详解多级页表与快表

多级页表与快表

文章目录

  • 多级页表与快表
    • 什么是页表
    • 页表带来的问题
      • 快表
    • 多级页表
    • 三级页表转换法
    • 参考

什么是页表

页表就是一个用于将虚拟地址转换为物理地址的工具

转换的公式就是: 通过页表先找到页,在使用页内偏移地址找到最终对应的实际物理内存

页表带来的问题

在页式内存管理中有两个重要的问题

  1. 虚拟物理地址到物理地址转换要快
  2. 当虚拟空间很大的时候页表也会变的很大

所以为了解决第一个问题就有了快表

所以为了解决第二个问题就有了多级页表

快表

快表一般存放在 CPU 内部的高速缓冲存储器 Cache。

快表可以直接理解为页式内存管理的高速缓存(Cache)

快表的原理是基于局部性原理

  • 时间局部性: 也就是某个数据被访问过那么这个数据不久很可能再次访问
  • 空间局部性: 就是某个存储单元被访问过,那么它周围的存储单元很有可能被访问

快表的作用:加速虚拟地址到物理地址的转换速度

快表中存放着页表的一部分甚至全部内容

快表作为页表的高速缓存器(Cache),作用与页表的本质作用一致,只不过提高了页表的访问速度

原理:如果用页表做地址转换,则读写数据内存时,CPU要访问内存两次。当使用快表,有时只要访问一次高速缓存器,一次主存,这样就可以加速查找并提高指令执行速度

使用快表之后的地址转换流程:

  1. 根据虚拟地址中的页号查找快表
  2. 若该页在快表中,则直接从快表中读取对应的物理地址
  3. 若该页不在快表中,则访问内存中的页表,再从页表中读取物理地址,同时将该页表中的物理地址映射到快表中
  4. 当快表填满时,又要增加新的页表,就按照一定的淘汰策略删掉一页

多级页表

为了提高内存空间利用率,页应该小,页小了那么页表就大了

如果只有一级页表那么4G的虚拟地址空间就需要4M的连续内存来存放页表,开销太大

这时候就出现了多级页表,用来节约内存

使用二级页表的画,就只需要一个4k的页表来管理1024个二级页表,这时候你会有疑问怎么消耗的内存更大了,

其实不然,这里的内存不是都要放在内存里面的,根据局部性原理只有一级页表在内存,二级页表都存放在外部磁盘。只有当缺页中断的时候才会调用进去内存中

三级页表转换法

  1. 逻辑地址转物理地址

段起始地址+段内偏移地址=线性地址

一个32位的线性地址被划分为三部分

  • 10bit 页目录索引
  • 10bit 页吧表索引
  • 12bit 页内偏移量
  1. 线性地址转物理地址

cr3(页表寄存器)中拿出页目录地址

页目录地址+页目录索引=页表地址+页表索引=页地址+业内偏移=物理地址

参考

深入理解操作系统之——分页式存储管理

页式内存管理中的快表和多级页表

你可能感兴趣的:(计算机知识,java)