linux 中有个被称作分区页框分配器的内核子系统,处理对连续页框的内核分配请求。管理区分配器接受动态内存分配与释放的请求,该部分会搜索一个满足所请求的一组连续页框内存的管理区,每个管理区都被伙伴系统所处理。
伙伴系统工作原理:请求了一个256个页框的块。算法现在256个页框大小的链表中去检查是否有一个空闲块满足要求,如果没有,算法会查找下一个更大的页块。也就是先在512的页框链表中查找,如果有,会把前一半满足请求,剩下的则插入到256的页框链表中。如果没有则继续向更大的页框大小链表中查找。如果更大的也没有,则发出错误信号。
释放过程是一个逆过程,只不过释放完一个页框块时,会检查它的伙伴块,进行合并。
合并的条件:两个块具有相同的大小
物理地址是连续的。第一块的第一个页框的物理地址是每个页框大小的2倍。
形成的更大块插入相应的链表。