Linux分页机制

分页机制为传统需求页、虚拟内存系统提供了实现机制

Linux分页机制_第1张图片

系统中的线性地址比实际的物理地址大的多,所以进行虚拟化线性地址空间,即虚拟存储技术

当使用分页时,每个段被划分成页面(每页通常4KB或者1字节),页面会存储于物理内存或者硬盘上。通过页目录表和页表进行线性地址到物理地址的转换;如果当前被访问的页面不在物理内存中,处理器会中断程序执行(页错误异常),然后操作系统就可以从硬盘把该页面读入物理内存中,并继续执行中断的程序。

分页机制把线性地址和物理地址空间都划分成各个页面,大小相同,并在这两个空间之间提供了任意映射。

Linux分页机制_第2张图片

当页面大小设置为4KB时,4G(2^32)的线性地址空间被划分成2^20个页面,由4K大小的页面作为一个单元映射,4K对齐,线性地址的低12位就是可以直接作为物理地址的低12位,分页机制可以看作是把线性地址的高20位转换到物理地址的高20位。

在保护模式下,允许线性地址直接映射到大容量的物理内存上,或者间接地映射到较小容量的物理内存和磁盘空间中(虚拟存储)。

页表结构

页表有2^20个表项,每项4Byte,如果是一级存放需要4MB内存,故使用两级结构。线性地址的高20位转换分两步,每步10bits。

第一级称为页目录,存放在1页4KB的页面中,有2^10(1K)个4Bytes长度的表项,来进行索引选择2^10个二级表之一。

第二级称为页表,长度也是一个页面(4KB),每个4Bytes的表项都包含相关页面的20位物理基地址。

寄存器CR3指定页目录表的基地址。







分段与分页,两种不同的地址变换机制,段表存储在线性地址空间,页表存放在物理地址空间。分页使用了固定长度的页面,段的长度通常与存放在其中的代码或者数据结构具有相同的长度,如果仅使用分段地址转换,那么存储在物理内存中的数据结构将包含其所有部分,但如果使用了分页,那么一个数据结构就可以一部分存储在物理内存中,一部分存储在磁盘中。




















你可能感兴趣的:(Linux)