Linux对内存区内的页框的分配和释放,采用的算法是伙伴系统。
尽管页的分配算法是简单的,但是实际过程却非常复杂。这是因为分配页式必须考虑一下几点:
1 备用内存区。当从一个内存区无法得到内存时,系统会从同一内存节点的其它内存区或者从另一个内存节点中的内存区中获取内存。
2 页的换入和换出,在没有足够多的空闲页时,可能需要将页换出以获取空闲内存。
3 页的回收,对一些缓冲区的不再使用的页进行回收,以获取空闲页。
4 系统中必须保持一定“水位”的空闲页,以应付对内存的紧急分配。如果系统将页分配完,在急需内存时,再进行页的回收或换出,无疑是非常糟糕的设计。系统中必须保持一定量的内存页。
5 不同的分配策略。不同的分配策略可能采用的方法有区别。
总之,页的分配和释放需要考虑许多因素,尽量满足内存分配的同时,要保证系统的稳定性和健壮性。