文章目录

  • 页表
  • 页面的大小
  • 页表特性
  • PTBR--寄存器
  • 快表
  • TLB 命中率
  • 基于页表的保护与共享
  • 多级页表

页表

为什么说分页的逻辑地址是一维的地址;
从下图我们可以看出,把一个程序分为等大的页面(这里每个页面大小假设4bytes),每一个页面的里的指令(假设每条指令大小为1bytes)都会有相对应的逻辑地址,都是从0开始算起的;


页表记录的主要信息就是:页框号和页面号的映射关系,页框号也就是物理地址,页面号也是逻辑地址的一部分;



上面的例子中:把程序分为了3个页面的大小,放入到内存中,其中#0页面放入到了frame#5 也框中,#2页面放入到 frame#2页框中,#1放入到frame#0页框中;

至于是页面是如何放入到页框的,其实页框是也是有自己一份表,该表记录着页框是否呗占用的情况,只要放页面去页框前去查找页框表,发现没有被占用的页框,那么就会把页面放入进去;

由于程序的地址,被分成页面放入到页框中,并不是连续存放的,所以我们需要找到程序的真实物理地址,需要一个页表,来记录页框和页面的映射,方便我们找到真实的物理地址空间;


页面的大小


页面的大小如何计算?
我们前提的知道逻辑地址的bit位,和页面大小;
只要有这两个数据,我们就可以通过页面大小推算出,页内位移占用逻辑地址多少个bit;那么页面的大小就可以呼之欲出了;


不过,一般我们Linux的系统都是逻辑地址有64个bit,因为大多数都是64位OS系统了;
页面大小一般都是4kbytes,通过简单计算 我们得知 4kbytes = 212bit;那么说明页内位移是有12个bit,这样我们就得出页面大小占用的bit位数位 64 - 12 = 52; 但是着52个bit给页面用,只是理论上的,因为52bit位页面来用实在太多了,实际上OS只用32个bit,给页面使用,其他只是闲置放在没用而已;


页表特性


OS会给每一份进程都分配一个页表;

页表的主要作用就是翻译逻辑地址位物理地址的;

并且页表是只有在进程被CPU调度时候,才会被使用,如果该进程没有被调度,那么对应得页表只会留在内存中,不会被使用;

CPU是通过一个寄存器来保存页表得信息的;

并且页表带来一个新的问题,会增加上下文切换的开销,因为进程切换时候,不仅要保存进程的相关信息,它对应的页表信息也需要被保存起来;


PTBR–寄存器


我们要清楚知道,页表也是需要存储在内存中的,但是页表会增加上下文切换的负担,一直让页表留在内存中,我们切换上下文就会缓慢,所以在CPU中专门有一个为页表服务的寄存器,那就是PTBR,它存放的是页表的地址;

有了它,就不用上下文切换时候,要把这页表搬来搬去,只需要修改PTBR的值即可,哪个进程被CPU调度,那么就往PTBR添加哪个进程的页表;极大缩短上下文切换的时间;

我们知道有了这个寄存器后,我们访问页表,就需要有两次的内存访问了咯,当我们调度进程时候,第一次,访问的是页表的位置在哪,把它放入到PTBR寄存器中,第二次访问就是内存中页表的逻辑地址到物理地址的具体位置数据在哪咯;


快表


认识快表前,我们要知道为什么需要快表?肯定是页表的访问速度太慢了,才导致快表的产生,是的,确实是,因为页表是存储在内存中的,还是那样CPU去内存读取页表,对于CPU来说太慢了,所以为了加快读取页表速度,那么OS设计者搞出一个快表;

他们如何搞快表的呢?我们知道软件设计有一个大原则:任何问题都可以通过增加中间层来解决问题;

是的,我们OS设计者,搞了一个硬件,是TLB,就是一缓存,它是专用缓存,专门用来存取页表的条目信息的,因为cahe比较小嘛。。不可以存储全部的页表,只能存储部分的页表条目;

所以当访地址空间时候,我们首先去TLBcahe查找是否有你要页表信息,如果有直接返回给CPU就可以处理,没有那么就再去内存访问剩余其他的页表条目即可;

这里会有两次内存访问,一次是访问 cache 一次是内存访问。是不是说这样变慢了/
不是的,只要我们保证一个原则,我们TLB cache中存放的页表信息,都是进程中需要寻找的地址那么就可以加快速度,只要再TLB cahce的信息,命中率高即可!

至于愈合提高TLB cache的命中率,是缓存那边的话题,这先不讨论,我们只要知道;有一个TLB硬件,他是cache,并且他存放的是页表的部分条目信息,他可以加快页表的访问速度,快表的体现也就是体现在这里;


一张图解释:CPU调度程序,如何访问页表的过程:


TLB 命中率


基于页表的保护与共享



多级页表

认识多级页表,我们先看看,页表的大小问题:


基于32位的系统下,我们一个进程最多可以分配到1m个页面(每个页面大小位4kb),用具体数字说,就是100w个左右的页面,那么一个进程的页表就是存放页面和页框的信息,也就是说,一个进程的页表就要存放1m左右的页表项(页面和页框的映射),也就是要一个进程的页表要存放100w个左右的页表项信息;

我们再假设一个页表项大小为4字节,那么,一个页表就要存放4M字节的信息,也就是400w个左右的页表项信息;

这是什么概念?这个概念是,每当你创建出一个进程,OS都需要为你这个进程维护一个页表,这个页表占用的实际空间是4M;

这样可能觉得不大,假如我的OS搞出100个进程呢?那么你OS就要帮你维护400M的页表信息;

这样说可能觉得还没什么,你知道一个进程维护一个4M字节的页表什么概念嘛?也就是你的物理内存,需要有
4M / 4KB = 1K个页框存放你的页表哦,意思是你的物理内存有1024个左右的页框,并且还是连续的1024个页框,为什么是连续的?因为你的页表不可以被打散存放在页框中,如果打算存放你怎么找到?


基于上面页表的信息过于大,且需要连续的物理空间,存放页表信息,所以我们认为这种方式不合理。

所以多级页表的方式就诞生的。

多级页表的意思是将页表也拆分一个一个的,然后放入到物理内存的页框中,此时我们就需要多了一个数据结构,保存,页表号,和页框号的信息,因为我们需要找到也标号,才能找到页面号,进而找到对应的物理地址;


这个数据保存页表号的数据结构我们叫页表页;
所以一个逻辑地址:就被表示为了页表页号+页号+页内位移了;

上面的处理方式就是2级页表的处理方式;



【操作系统基础】页表 快表 多级页表相关推荐

  1. 快表、页表和cache之间的关系

    快表.页表和cache之间的关系 偏移量的含义 全相联映射快表命中[快表是集成在CPU里的] 全相联映射快表未命中[二级页表] 四路组相连映射[TLB] 23年复习 引入部分 单级页表[一个进程一张页 ...

  2. 18.多级页表与快表

    [README] 1.本文内容总结自 B站 <操作系统-哈工大李治军老师>,内容非常棒,墙裂推荐: 2.操作系统内存管理:分页机制+多级页表+快表来实现: [0]分页的问题 1)分页的问题 ...

  3. 操作系统(九) -- 多级页表与快表

    文章目录 单级页表的缺点 多级页表的提出 第一种尝试:页表里面只存放用到的页 第二种尝试:多级页表,页目录表+页表 多级页表的缺点 相连快速存储TLB(快表) 小结 参考资料 单级页表的缺点 前面说了 ...

  4. 【学习笔记】第三章——内存 II(分页存储、快表与局部性原理、两级页表)

    文章目录 一. 分页存储概念 二. 地址转换 1)为什么页面大小为2的次幂? 三. 页表 1)页表项长度.页号"隐含" 四. 局部性原理与快表 五. 二级页表 1)单级页表存在的问 ...

  5. 操作系统基础知识总结

    第一章 操作系统引论 系统的目标:有效性(提高资源利用率和系统吞吐量).方便性.可扩充性.开放性. 有效性和方便性是操作系统最重要两个目标. 操作系统的作用: (1)     OS作为用户与计算机硬件 ...

  6. 操作系统-内存管理(快表的地址变换机构,两级页表,虚拟内存的基本概念,基本页式管理下的页表和页面置换算法)

    文章目录 1.快表地址变换机构 2. 两级页表 3. 虚拟内存的基本概念 基本分页存储管理 1.快表地址变换机构 快表,又称联想寄存器(TLB,translation lookaside buffer ...

  7. 虚拟内存,页表,快表,多级页表,倒排页表

    虚拟内存 尽管基址寄存器和界限寄存器可以用于创建地址空间的抽象,还有另一个问题需要解决:管理软件的膨胀(bloatware).虽然存储器容量增长快速,但是软件大小的增长更快.需要运行的程序往往大到内存 ...

  8. 操作系统(day11)--快表,两级页表

    具有快表的地址变换机构 时间局限性:会有大量连续的指令需要访问同一个内存块的数据的情况(程序中的循环) 空间局限性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问.(因为很多 ...

  9. 【操作系统/计组】页面大小 与 页表项 ( 二级页表 、多级页表 )

    [操作系统/计组]页面大小 与 页表项 结论1(一级页表) 结论2(二级.多级页表) 例题 首先,不论一级页表还是多级页表: 页面大小 = 2^(页内地址位数) 页号有多少,页就有多少个 用于存放页的 ...

最新文章

  1. 特征重要性、特征集成+FeatureUnion、特征选择变换器+ColumnTransformer、标签特征变换+TransformedTargetRegressor、特征质量、自动学习数据中的特征
  2. import win32api 安装pip install pypiwin32
  3. sp_MSforeachtable使用方法
  4. 从屌丝毕业生到三次优秀员工(腾讯三年工作感悟)
  5. android 网络通信框架volly
  6. 详细介绍如何在win7下首次实现通过Git bash向Github提交项目
  7. IISASP.NET 站点IP跳转到域名
  8. 安卓开发——基于ViewPager的图片轮播
  9. IDEA导入旧版本项目maven不会自动下载依赖JAR包处理方法
  10. 解决: Windows下启动Redis失败
  11. 来自DFRobot的中文语音识别模块
  12. JDBC部署到Tomcat驱动加载失败
  13. 在B站看猫片被老板发现?不如按下F12学学HTTP
  14. charles https 抓包
  15. 抖音神曲《一百万个可能》:“在一瞬间,我们有一百万个可能”
  16. LeetCode994 Rotting Oranges解题方案
  17. 模拟【The Biggest Water Problem】+模拟【明明的随机数】
  18. 圆的周长面积(YZOJ-1020)
  19. android 导出Excel列表
  20. python监听串口数据_python 读取串口数据的示例

热门文章

  1. 揭开邮票界《一轮生肖猴》的神秘面纱
  2. STATA:加i.year和不加i.year的区别
  3. 永中Office 安装新宋体、宋体
  4. A Simple Framework for Contrastive Learning of Visual Representations[论文学习] SimCLR
  5. 生活片段(4)我所见过的母亲3
  6. 直播带货的三大技巧,九大维度
  7. android付款功能,Qpay,利用 Android 新特性,把所有付款方式放在一起 | App+1
  8. STM32使用内部时钟当系统时钟
  9. [转]屏幕录相专家常见问题
  10. BMZCTF baby_dsa