LINUX采用4K页框大小作为标准标准的内存分配单元。
所有的页描述符存放在mem_map数组中。
页面描述符的字段:
_count:页的引用计数器。如果该字段为-1,则相应页框空闲,并可分配给任一进程或内核本身;如果该字段的值大于或等于0,则说明页框分配给一个或多个进程,或用于存放一些内核数据结构。page_conunt()函数返回_count加1后的值,也就是该页的使用者数目。
flags:包括多达32个也描述符框状态的标志。
内存管理区
ISA总线的直接内存存取处理器有一个严格的限制,只能对RAM的前16M寻址。
LINUX2.6把内存节点的物理 内存划分为三个管理区:
ZONE_DMA:低于16M的内存y页框
ZONE_NORMAL:16MB——896MB
ZONE_HIGHMEM:896开始高于896的内存页框。
每个页描述符都有内存节点和到节点ne内存管理区的链接。
为了节省空间,这些链接的存放方式与典型的指针不同,而是被编码成索引存放在flags字段的高位。
当内核调用一个内存分配函数时,必须指明请求页框所在的管理区。