主题:请教各位,如何在伙伴系统算法中运用位图算法?
如题:
伙伴系统是非常经典,大家非常熟悉的内存管理算法。
但是单一的伙伴算法无论在分配回收速度上还是碎片合并上都可以通过别的算法进行辅助性能提升。
在提升回收速度上,可以通过位图来快速的判断被回收的内存块时候要被合并成大块。
Buddy 的算法我是知道了,我很想知道位图算法是如何巧妙的安置到Buddy 里面的。
本想看Linux 的源代码,而且我确实看了,说实话我水平很低,实在看不懂。
那似乎并不是纯算法代码,里面涉及到很多我不知道的东西。
我听说过:
“位图的某位对应于两个伙伴块”
“当位图中的一位为0,表示两块都空或都闲”
“当位图中的一位为1,表示有一块为忙”
但是具体是怎么一回事根本不知道。
如何设置这个位图?因为那些空闲领接表都是双向链表,时刻在‘变动’的,
而那些位是‘死’的,怎么随着分配和释放的进行而改变?
谁可以以一个教学的方式或一个比较粗浅的方式告诉我,或是给一个这样的连接。
小弟在这里谢过各位大侠了。
伙伴系统是非常经典,大家非常熟悉的内存管理算法。
但是单一的伙伴算法无论在分配回收速度上还是碎片合并上都可以通过别的算法进行辅助性能提升。
在提升回收速度上,可以通过位图来快速的判断被回收的内存块时候要被合并成大块。
Buddy 的算法我是知道了,我很想知道位图算法是如何巧妙的安置到Buddy 里面的。
本想看Linux 的源代码,而且我确实看了,说实话我水平很低,实在看不懂。
那似乎并不是纯算法代码,里面涉及到很多我不知道的东西。
我听说过:
“位图的某位对应于两个伙伴块”
“当位图中的一位为0,表示两块都空或都闲”
“当位图中的一位为1,表示有一块为忙”
但是具体是怎么一回事根本不知道。
如何设置这个位图?因为那些空闲领接表都是双向链表,时刻在‘变动’的,
而那些位是‘死’的,怎么随着分配和释放的进行而改变?
谁可以以一个教学的方式或一个比较粗浅的方式告诉我,或是给一个这样的连接。
小弟在这里谢过各位大侠了。