分页单元(page unit): 把线性地址转化成物理地址.
为了效率, 线性地址分成固定长度的组, 该单元成为页, 页内部连续的线性地址被映射到连续的物理地址.
页框: 分页单元把RAM分成固定长度的页框, 页框是一个存储区域, 与页长度相同
页是数据块, 页框是存储区域, 所以页可以放到页框和磁盘中.
线性地址到物理地址的映射功能成为页表, 页表放在驻村, 并且在启用分页单元之前必须对页表初始化.
分页机制在x86处理器上通过设置cr0寄存器的PG标志, PG = 0的时候线性地址就被解释成物理地址
自从386开始分页单元处理4KB页, 32位线性地址被分成3部分第一部分为页目录(10 bit), 第二部分为页表(10bit), 最后是offset(12bit),使用页目录和页表两个方式来转换的目的在于减少进程页表所需要的RAM数量.
使用二级分页模式每个页表只需要2^10个表项(总共2 * 1024), 假设一项4字节则需要8KB, 如果使用一级分页则需要2^20个表项, 1MB * 4 = 4MB
每个进程必须有一个页目录, 页目录的物理地址放在cr3寄存器.
我们称页目录为pg dir, 页表为pg tbl, 偏移量为offset. 所以1024 * 1024 * 4096 = 4GB.
扩展分页
从pentium开始x86引入了扩展分页, 它使页框为4MB而不是4KB, 内核就用不到页表项, 只需要页目录就可以访问全部物理地址,从而节省了内存.
扩展分页机制和正常分页的不同在于, Page size标志必须设置成支持4MB, 由于每个物理地址都是4MB对齐, 所以地址的最低22位都为0.
通过设置cr4寄存器的PSE能使扩展分页和常规分页共存.
常规分页举例:
假设内核给一个进程分配了0x20000000-0x2000ffff, 该空间为2 ^ 16一共32