读深入理解Linux内核 (第8章 内存管理, 第一部分 --- 页的管理)

来源:互联网 发布:买淘宝号一个多少钱 编辑:程序博客网 时间:2024/05/21 17:38

页的管理

每个内存页面对应一个页描述符,所有的页描述符存放在一个连续的内存区域。所以,通过页面的地址可以很方便得到描述符的地址,比如virt_to_page(addr),通过页地址得到页描述符地址。页描述符携带了该页的使用情况。



1. 内存访问的不一致性

我们通常以为内存里的单元是没差别的,事实上,不同的内存位置(结点)CPU访问时间可能不同。同一结点,不同的地址范围用途不同,比如有的是高端内存。因此同一内存结点下又分为不同的内存区域(Zone)。页面的申请需要声明从那个Zone里面申请。



2. 页的申请和释放

操作系统通过内存区域分配器(ZoneAllocator)管理着内存区域(Zone),比如alloc_pages(gfp_mask,order)gfp_mask指明了内存区域的类别等,而order是指,分配2order次方个页面,这些页面是连续的。



3. Buddy(伙伴)系统

具体内存区域(Zone)里面的页面由Buddy系统管理。区域里的页面一开始被分配到11个组里面,1page,2page4个,8...直到1024个。分配时,找最小的满足需求的连续页面,剩余的页面放到其它组里面。所以,随着系统的运行,连续页面越来越少,如果驱动需要用到连续的物理页面,就应该在初始化时申请好。


0 0
原创粉丝点击