18.多级页表与快表
【README】
1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐;
2.操作系统内存管理:分页机制+多级页表+快表来实现;
【0】分页的问题
1)分页的问题(大页表):为了提高内存利用率,页应该小,页小了,页表项就多了,页表就大了;(页是4K,每个段最多浪费4K)
- 问题:页表大了不利于查找,且大页表占用内存多;
【例】页表结构与大页表
页号 |
页框号 |
保护 |
0 |
5 |
R |
1 |
1 |
R/W |
2 |
3 |
R/W |
3 |
6 |
R |
- 如总内存大小2^32=4G,每页大小4K,则页表项数量=4G/4K=1M 即100万个页表项;
- 又每个页表项占用4个字节,所以含有100万个页表项的页表占用的总内存为 4M;
- 又若系统并发执行10个进程,每个进程页表项4M,所以需要40M;那如果系统并发100个进程,则需要400M存储页表,这会导致内存利用率低;
【1】大页表的解决方法1(只是尝试):只存放用到的页
1)页表只存放用到的页(页表号不连续)
实际上,大部分逻辑地址不会用到;
把不会用到的逻辑页号从页表中删除,从而减少了当前进程的页表大小;即,用到的逻辑页才有页表项;
2) 用到的逻辑页才有页表项
因为删除了不使用的逻辑页号,所以页号是不连续的(页号0 1 3 )。如下。
页号 |
页框号 |
保护 |
0 |
5 |
R |
1 |
1 |
R/W |
3 |
3 |
R |
在计算页基址时,需要从页表中根据页号查找页框号,进而计算出该页的物理内存基址。
3)如何根据页号查找页框号?
- 顺序查找,折半查找都比较慢;
- 如总内存大小为4M,页表项个数为4M/4K=1K;采用顺序查找需要1K次,采用折半需要 log(2^10)=10次;也就是说每执行一条指令都需要10次访存,1次主存访问耗费约200ns,则10次需要2us;这会严重影响指令执行速度;
【小结】
- 页号必须要连续,这样才可以立即定位到页表项。如页表项基址+3就可以得到页号为3的页表项(而不用顺序或折半查找);
- 这又回到了刚开始的问题,即32位地址空间 + 4K页面 + 页号必须连续 => 导致了2^20个页表项 => 导致了大页表占用过多内存,造成浪费;
所以解决方法1中的尝试是失败的。
进一步的,我们得出需要解决的问题是:
- 页号连续,且页表占用内存少;
- 用书的章目录和节目录来类比思考;
【2】 大页表的解决方法2(尝试):多级页表
【2.1】多级页表
由单级页表转为多级页表;
即多级页表,页目录表(章)+页表(节);
1)多级页表具体分配
指令中的逻辑地址结构如下:
10 bits |
10 bits |
12 bits |
页目录号 |
页号 |
Offset偏移量 |
- 步骤1:根据页目录号从页目录表中查询到页表基址;
- 步骤2:根据页号从页表(通过页表基址确定)中查询到页框号(物理内存页号);
- 步骤3:根据页框号可以计算出物理内存页基址(具体是页框号乘以4K),用页基址加上逻辑地址偏移量得到物理内存地址;
因为页目录号,页号都是连续的,所以页目录号及页号的查询时间复杂度是O(1);
2)利用多级分页的地址翻译步骤
【说明】图解说明:
- 说明1)1个页目录项(章)指向1k个内存页,每个内存页4K,所以1个页目录项指向4M内存;所以1K个页目录项就可以映射容量为4G的内存空间;
- 说明2)页目录表中,进程使用了3个页目录项,即使用了4G内存中的12M内存;页目录表与页表占用的总内存大小=1K*4 + 3 * 1K*4 = 16K;(每个页目录项与每个页表项均占用4个字节,因为32位地址空间)
- 说明3)需要注意的是,如果内存使用单级分页,需要4G/4K=1M个页表项,每个页表项占用4个字节,则单级分页下的页表占用内存大小为4M;
【小结】
- 在内存总大小4G的基础上,占用12M内存的程序,采用多级分页时页表占用16K 远远小于 单级分页时的4M;
【2.2】多级页表优缺点
1)多级页表优点:
- 多级页表既保证了页表表项的连续性,使得查找起来非常快(时间复杂度O(1));
- 又保证了内存中存储的页表少了,减少了内存浪费,提高了内存使用率;
2)多级页表缺点
- 多级页表增加了访存速度,特别64位系统(因为64位系统的多级页表有5,6级);
- 多级页表,每增加一级,访存次数就会加1; 所以 64位系统的多级页表访存次数约为5,6次;
- 多级页表的级数越多,访存越多,效率越低(级数越多,类比书的多层目录),这会造成指令执行效率低;
针对多级页表缺点,引入了快表;
【3】 快表(指的是TLB寄存器)
1)快表:
- 也叫TLB,TLB是一组相联快速存储,是寄存器;
- TLB,即Translation lookaside buffer,又称为翻译后备缓冲区寄存器;
- 通过TLB可以快速找到最近使用的逻辑页映射的物理页号;
2)TLB存储的内容(记录的是最近使用的逻辑页映射的物理页号)如下:
有效 |
页号(无序) |
修改 |
保护 |
页框号(物理页号) |
1 |
140 |
0 |
R |
56 |
1 |
20 |
1 |
R/W |
23 |
0 |
19 |
0 |
R/W |
29 |
1 |
21 |
0 |
R |
43 |
因为寄存器访问速度快,可以设计 TLB寄存器的硬件逻辑,使得可以一次访存就可以根据页号查询出页框号(物理页号),最后得到物理地址;
【3.1】基于快表的地址翻译
1)基于快表的地址翻译步骤
- 步骤1: 根据逻辑地址的页号,查询一次TLB寄存器就可以得到页框号(物理页号);
- 步骤2: 若快表TLB不存在页框号(未命中),则查询多级页表,并把查询结果送入TLB存储作为缓冲用于后续地址翻译;
小结:快表+多级页表合在一起形成的结构,保证了查询(翻译物理地址)时间快,页表项连续,减少了内存资源浪费;
2)这也充分体现了操作系统折中思想;通过把一些技术组合在一起,使得访问时间不错,空间利用也不错;具体是:
- 多级页表是减少了空间浪费,降低了空间复杂度,访问时间还可以,但还想提高页表查询速度;
- TLB是提高了页表查询速度,降低了时间复杂度;
- TLB可以弥补多级页表(特别64位系统)访存耗时,慢的缺点;
【3.2】TLB如何保证高命中率
1)TLB得以发挥作用的原因:保证高命中率;
【说明】公式说明:
- 有效访问时间等于命中时的访问时间 + 没有命中时的访问时间;
- 上图有效访问时间式子中的符号解释:
- HitR 表示 命中率;
- (1-HitR)表示 未命中率;
- TLB 表示访问寄存器的时间;通常为10ns (当然图中给出的是20ns,数量级相同)
- MA表示访问内存的实际; 通常为 200ns (图中给出的是100ns,数量级相同)
- 可以看到: 命中率越高,则访问时间才接近于1次访存的时间;
2)如何提高TLB命中率
- TLB越大越好, 但TLB很贵,折中处理是 TLB可以存储的页表项数量范围是 [64,1024];
3)为什么 TLB存储的页表项数量可以在 64~1024之间 ?
原因:
- 程序的地址访问存在局部性;
- 因为访问局部性,所以程序用的是固定的那几个逻辑页号;
- 最近访问的逻辑页与物理页映射关系会送入TLB存储,所以TLB的命中率会很高;
- 补充:程序多体现在循环,顺序结构;
18.多级页表与快表相关推荐
- 操作系统(九) -- 多级页表与快表
文章目录 单级页表的缺点 多级页表的提出 第一种尝试:页表里面只存放用到的页 第二种尝试:多级页表,页目录表+页表 多级页表的缺点 相连快速存储TLB(快表) 小结 参考资料 单级页表的缺点 前面说了 ...
- 内存管理<原理篇>(五、页表和快表)
文章目录 5.1 页表 5.1.1 页表介绍 5.1.2 页表项 5.2 页表结构 5.2.1 多级页表 5.2.2 哈希页表 5.2.3 倒置页表 5.3 快表 5.3.1 局限性原理 5.3.2 ...
- 虚拟内存,页表,快表,多级页表,倒排页表
虚拟内存 尽管基址寄存器和界限寄存器可以用于创建地址空间的抽象,还有另一个问题需要解决:管理软件的膨胀(bloatware).虽然存储器容量增长快速,但是软件大小的增长更快.需要运行的程序往往大到内存 ...
- (计算机组成原理)第三章存储系统-第七节1:页式存储器、页表及快表
文章目录 一:页式存储器 二:逻辑地址和物理地址 三:页表和地址变换过程 (1)页表 (2)快表 一:页式存储器 前面说过主存和Cache之间是以块作为数据的传输单位的 我们知道,应用程序运行时需要加 ...
- 快表、页表和cache之间的关系
快表.页表和cache之间的关系 偏移量的含义 全相联映射快表命中[快表是集成在CPU里的] 全相联映射快表未命中[二级页表] 四路组相连映射[TLB] 23年复习 引入部分 单级页表[一个进程一张页 ...
- 【操作系统基础】页表 快表 多级页表
文章目录 页表 页面的大小 页表特性 PTBR--寄存器 快表 TLB 命中率 基于页表的保护与共享 多级页表 页表 为什么说分页的逻辑地址是一维的地址: 从下图我们可以看出,把一个程序分为等大的页面 ...
- 【学习笔记】第三章——内存 II(分页存储、快表与局部性原理、两级页表)
文章目录 一. 分页存储概念 二. 地址转换 1)为什么页面大小为2的次幂? 三. 页表 1)页表项长度.页号"隐含" 四. 局部性原理与快表 五. 二级页表 1)单级页表存在的问 ...
- 操作系统的内存管理机制(连续分配管理、页式、段式、段页式、快表、二级页表)
来源:https://www.bilibili.com/video/BV1YE411D7nH 操作系统的内存管理机制(连续分配管理.页式.段式.段页式.快表.二级页表) 内存被分为系统区和用户区,系统 ...
- 操作系统-内存管理(快表的地址变换机构,两级页表,虚拟内存的基本概念,基本页式管理下的页表和页面置换算法)
文章目录 1.快表地址变换机构 2. 两级页表 3. 虚拟内存的基本概念 基本分页存储管理 1.快表地址变换机构 快表,又称联想寄存器(TLB,translation lookaside buffer ...
最新文章
- 负离子发生器模块 ANION GENERATOR
- Android 8.1 源码_启动篇(一) -- 深入研究 init(转 Android 9.0 分析)
- 用Electron开发企业网盘(二)--分片下载
- jboss5+EJB3+MDB Queue
- java 源码分析_Java 源代码编译成 Class 文件的过程分析
- Apt 命令解说(apt-get update、apt-cache search package、apt-get install package、apt-get remove )
- Python下使用optparse模块实现对多个文件进行统计【二】
- Python面向对象程序设计中属性的作用与用法
- c++ 后台 sendstring_苹果狂杀微信后台,微信官方出必杀技!
- 从零开始学安全(二十三)●用PHP编写留言板
- mysql一对多前端实现_django一对多模型以及如何在前端实现详解
- DS18B20的CRC验证算法
- 伯禹公益AI《动手学深度学习PyTorch版》Task 06 学习笔记
- 初探区块链的挑战,应用和发展
- java的memset怎么写_memset函数使用详解
- iOS笔记-performSelector的探索
- Mongo Shell 文档搜索
- matlab二维doa估计,阵列信号处理,一维、二维DOA估计
- 数控机床远程运维监控解决方案
- 鸿蒙开发板HI3861 利用蜂鸣器播放音乐 open Harmony1.0.0(附cmsis_os2.h源码)