Linux之物理页面的分配

Linux中存储空间按连续与否可分为连续存储空间和不连续存储空间。连续存储空间以UMA为表明,非连续存储空间以NUMA为表明。在内核中,经过条件编译选择项CONFIG_DISCONTIGMEM能够选择不一样类型的存储空间。针对不一样的存储空间,Linux内核有不一样的alloc_pages()函数以供调用,以实现物理页面的分配。

Linux中物理页面分配的主函数为:struct page * alloc_pages(int gfp_mask, unsigned long order)

先考虑NUMA结构的存储空间。咱们知道,NUMA结构的存储空间有不一样的存储节点(pg_data_t),每一个存储节点有多个不一样类型的存储管理区(最多3个),而每一个存储管理区又管理多个连续的物理页面。若是有进程要求分配页面,则依次在由存储节点构成的单链表中尝试分配2的order次幂页面个数,若是成功就返回申请成功的页面块的首个页面结构的地址。

相对于UMA结构的存储空间,其页面分配就相对简单多了。它只有一个存储节点,只需在该节点的各个存储管理区上去获取2的order次幂页面个数便可。
相关文章
相关标签/搜索