一、页表
层次化的页表用于支持对大地址空间的快速、高效的管理。考察具体的技术实现。
页表用于建立用户进程的虚拟地址空间和系统物理内存之间的关联。到目前为止讨论的结构主要用来描述内存的结构(划分为结点和内存域),同时指定其中包含的页帧的数量和状态(使用中或空闲)。页表用于向每个进程提供一致的虚拟地址空间。应用程序看到的地址空间是一个连续的内存区。该表也将虚拟内存页映射到物理内存,因而支持共享内存的实现(几个进程同时共享的内存),还可以在不额外增加物理内存的情况下,将页换出到块设备来增加有效的可用内存空间。
内核内存管理总是假定使用
四级页表,而不管底层处理器是否如此。该假定对IA-32系统是不正确的。默认情况下,该体系结构只使用两级分页系统。因此,第三和第四级页表必须由特定于体系结构的代码模拟。
页表管理分为两个部分,第一部分依赖于体系结构,第二部分是体系结构无关的。所有数据结构和操作数据结构的几乎所有函数都是定义在特定于体系结构的文件中。特定于不同CPU的实现有一些比较大的差别。
在以后几节里描述的数据结构和函数,通常基于体系结构相关的文件中提供的接口。定义可以在头文件include/asm-arch/page.h和include/asm-arch/pgtable.h中找到,下文简称为page.h和pgtable.h。在讨论特定于体系结构的问题时,会明确指出相关的体系结构。所有其他的信息,即使相关结构的定义是特定于体系结构的,也都适用于所有的体系结构。
1、数据结构
在C语言中, void *数据类型用于定义可能指向内存中任何字节位置的指针。该类型所需的比特位数目依不同体系