Linux中有关伙伴算法的思维导图
树图思维导图提供 伙伴算法思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 伙伴算法思维导图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:cc46b57526cf2aabab2a55e1651df931
伙伴算法思维导图思维导图模板大纲
把所有的空闲页面分为 10 个块组,每组中块的大小是 2 的幂次方个页面
第 0 组中块的大小都为 20 (1 个页面),第 1 组中块的大小都为 21 (2 个页面),第 9 组中块的大小都为 29 (512 个页面)
每一组中块的大小是相同的,且这同样大小的块形成一个链表
伙伴
两个块的大小相同
两个块的物理地址连续
list_head 域是一个通用的双向链表结构,链表中元素的类型将为 mem_map_t
struct page 结构
Map 域指向一个位图,其大小取决于现有的页面数
free_area 第 k 项位图的每一位,描述的就是大小为 2k 个页面的两个伙伴块的状态
如果位图的某位为 0,表示一对兄弟块中或者两个都空闲,或者两个都被分配
如果为 1,肯定有一块已被分配
当兄弟块都空闲时,内核把它们当作一个大小为 2k+1的单独快来处理
free_aea 数组的元素 0 包含了一个空闲页(页面编号为 0)
元素 2 则包含了两个以 4 个页面为大小的空闲页面块
第一个页面块的起始编号为 4
第二个页面块的起始编号为 56
当需要分配若干个内存页面时,用于 DMA 的内存页面必须是连续的
为了便于管理,从伙伴算法可以看出,只要请求分配的块大小不超过 512 个页面(2KB),内核就尽量分配连续的页面