linux内核源码研究
文章平均质量分 91
jkzzxQQQ
这个作者很懒,什么都没留下…
展开
-
linux内存管理(四)源码解析之伙伴系统alloc_pages/free_pages
本文kernel代码分析基于以下1.linux-4.14.1592.64bit代码处理逻辑3.UMA架构上一节伙伴系统详细介绍了伙伴系统的原理以及描述了页申请和释放的过程,另外对伙伴系统及涉及的一些概念进行了介绍,理解这些后我们来看代码中具体的申请流程和释放流程。alloc_pageslinux内核伙伴系统中分配物理内存常用的接口是alloc_pages(),其它接口最终都会归到alloc_pages(),特点是分配页面的个数是2的整数幂,因此函数无需提供分配的size,只需指明两个参数第一个原创 2020-12-27 22:00:48 · 929 阅读 · 3 评论 -
linux内存管理(三)源码解析之伙伴系统介绍
本文kernel代码分析基于以下1.linux-4.14.1592.64bit代码处理逻辑伙伴系统介绍linux把内存通常分为4K大小的page进行管理,叫做页帧/页框,如果频繁申请或释放不同大小的页帧,长时间后会造成剩余很多物理地址不连续的页帧,称为碎片,这样要是申请一个较大的地址连续页帧的时候,则因为碎片问题不能满足申请。为了避免这种碎片(其实伙伴只能避免外部碎片)问题,linux系统引入了一种伙伴系统算法对这些页帧进行管理。当linux系统启动的过程中此时伙伴系统还未初始化ok,此时仍需要原创 2020-12-06 15:29:37 · 488 阅读 · 0 评论 -
linux内存管理(二)源码解析之物理内存组织结构
Linux通过三层树状结构来管理内存:Node、Zone、Page。Node:UMA(Uniform Memory Access)模型:直译为“统一内存访问,所有处理器共享相同的内存地址空间NUMA (Non-Uniform Memory Access)模型:译为“非一致性内存访问”。这种构架下,简单理解就是按照物理内存按CPU核进行分配,每CPU访问自己的内存肯定必访问其他CPU核的要快,因此不同的物理存储器件和CPU从属不同的 Node,既引入Node的概念。Zone:在引入Node概念后,由原创 2020-11-28 20:47:34 · 288 阅读 · 0 评论 -
linux源码之信号量(semaphore/rw_semaphore )分析
本文以linux-4.14.159 kernel代码进行研究分析信号量semaphore机制是以一. 信号量结构体struct semaphore { raw_spinlock_t lock; unsigned int count; struct list_head wait_list;};二. 读写信号量原创 2020-11-10 23:31:14 · 1148 阅读 · 0 评论 -
linux内存管理(一)源码解析之内核虚拟内存布局
本文kernel代码分析基于以下1.linux-4.14.1592.64bit代码处理逻辑linux内存管理非常复杂及庞大,因此针对内存管理的研究应该选中一些感兴趣的点逐一击破,当对这些点有一定认知同时又比较疑惑时,再从宏观上进行系统学习,这样多研究几遍,相信就可以对内存管理整个系统有一定认知。这节我们看下内核虚拟内存布局,理解内核内存布局对认识内存管理至关重要,我们从源码来进行解析,这样方便记忆及理解。在linux系统中,内核的虚拟地址空间对所有进程共享的,然而每一个进程存在自己的用户虚拟地址空原创 2020-11-23 23:40:53 · 1370 阅读 · 1 评论 -
linux源码之自旋锁(spinlock)/读写自旋锁分析
本文kernel代码分析基于以下1.linux-4.14.1592.64bit代码处理逻辑我们知道linux内核中存在进程、中断、软中断等相互之间的同步问题,在SMP下这些使用场景会变的尤为复杂,因此linux内核提供了semaphore、spinlock、mutex,rcu、atomic等锁机制来解决这些问题。然而每种锁机制都有不同的实现原理以使用场景,在性能方面也是会存在一定差异,因此对于不同场景下的问题我们能选择最适用的机制才是最好的。此篇我们重点看下semaphore以及rw_semapho原创 2020-11-16 23:47:43 · 774 阅读 · 0 评论