640 likes | 754 Views
第九章 虚拟存储器管理技术. 虚拟存储器的基本概念 分页存储管理 ( 重点 ) 分段存储管理 段页式存储管理. 一、 虚拟存储器的概念. 1、虚拟存储器的引入. 在实存管理技术中,要求整个作业必须装入主存 。. 问题: 作业尺寸 > 主存大小 作业无法运行 解决方法: “ 扩充 ”主存 –– 虚拟存储技术. 并非真正扩充了物理主存空间. 地址空间. 存储空间. ( 编程 ). ( 运行 ). 交换. 逻辑. 物理. OS. 虚空间 ( 虚存 ). 实存、实空间. 2 、 虚拟存储器 的概念. 用户编程时所使用的一种用户思维中的存储器.
E N D
第九章 虚拟存储器管理技术 • 虚拟存储器的基本概念 • 分页存储管理(重点) • 分段存储管理 • 段页式存储管理
一、 虚拟存储器的概念 1、虚拟存储器的引入 在实存管理技术中,要求整个作业必须装入主存。 问题:作业尺寸>主存大小作业无法运行 解决方法:“扩充”主存––虚拟存储技术 并非真正扩充了物理主存空间
地址空间 存储空间 (编程) (运行) 交换 逻辑 物理 OS 虚空间(虚存) 实存、实空间 2、虚拟存储器的概念 用户编程时所使用的一种用户思维中的存储器 虚拟存储器:是一个地址空间,是进程访问的逻辑地址空间,而不是物理主存空间,是一个能从逻辑上对内存容量加以扩充的一种存储器系统。
运行进程访问的地址称为“虚地址”; • 而进程可访问的虚地址范围叫做程序的虚地址空间 • 处理器可直接访问的主存的地址称“实地址” • 可使用的实地址范围叫实地址空间(即主存) • 在多道程序运行环境下,操作系统把实际内存扩充成若干个虚存系统,为每个用户建立一个虚拟存储器,各用户可独立在虚存上编程运行。
需要大容量的外存储器的支持,或称物资基础.需要大容量的外存储器的支持,或称物资基础. 3、虚存技术基本思想 一般来说:虚空间>>实空间(也可以虚空间<实空间) 程序用20位有效地址长度–––0~220(寻址范围),实存64k<虚存220,此作业可以大于内存,其中部分程序被调入内存运行,其余放入辅存。 • 90-10规则: 90%的时间运行在10%的代码上 • 将所有程序代码放在内存是浪费 • 部分内容在内存,其它内存在辅存 虚存基本思想:当作业要求运行时,将其一部分装入内存,另一部分暂时留在辅存,作业在运行时,若要访问单元不在内存时,就将它们从辅存调入内存以保证作业正常运行。 主存+辅存虚存(还与地址结构有关) 虚拟存储器容量和速度? 局部性
4、 虚存管理三大策略(问题) • 调入策略(把哪部分装入主存-预调和请调) • 放置策略(放在主存什么地方) • 淘汰策略(或置换策略,主存不足时,把哪部分淘汰出主存)
5、常用的虚存管理技术 • 分页技术(重点讨论) • 分段技术 • 段页式技术
虚存概念的理解 1.部分装入; 2.离散分配; 3.多次对换; 4.虚存容量不是无限大(受内存和外存可利用的总容量限制;受计算机总线地址结构限制)。 5.虚存的“扩大”是以牺牲CPU工作时间以及内外存交换时间为代价的。
二、分页存储管理 (一)分页的基本思想 (二)请求式分页的基本思想 (三)分页系统的地址转换 (四)请求式分页的实现(页面置换算法) (五)分页系统的性能分析 (六)页面的共享和保护 (七)分页系统的软硬件
(一)、分页的基本思想 • 内存空间分块:固定大小,连续编号(页架号)。 • 逻辑空间分页:大小与块同,称为页面;连续编号(页号)。 • 注意逻辑地址:分为页号和页内地址。 • 内存分配原则:连续的页分配在不连续的块内。 • 页表:页面和页架联系的数据基。 逻辑地址的表示(p, d); P = INT [A/L];d = A mod L (其中A:虚地址 L:页大小) 页面大小=页架大小
主存地址空间 作业地址空间 0 0块 0页 1k 页表 1块 页号 块号 2k 1k 2块 0 2 3k 1页 1 3 3块 2k 4k 2 8 2500 123 2页 8k 123 8块 3k 9k 页 1k 分3页
页号 状态位 块号 (二)、请求式分页的基本思想 基本思想:在执行一个程序时才把它当前需要的少量几页放入内存。 具体做法: (1)只要在页表中增加一个状态位。 (2)当它为1时,该页已在内存; (3)当它为0时,发生缺页中断信号,调用缺页中断处理程序,装入请求页,调整页表。 在简单分页系统(实存)中,页表中只有两个字段,即页号与块号(页架号)。
d (偏移) P(页) 虚地址 2 452 页表地址reg 页 块 页表长 页表始址 0 2 实地址 1 3 8 452 2 8 123 8644 9k … (三)、分页系统中的地址转换 特点:一次地址 转换需要访问 主存两次。 问题1:转换速度慢; 问题2:页表本身占 用主存空间。 1、直接映象地址转换 地 址: 2500 页面大小:1024 + +
2、 快表(解决页表时间问题) 访问主存=访问页表+访问物理地址 解决方法: 将作业中最常用的页表表目置入高速缓存,提高查表速度。(在地址变换机构中加入一个高速的联想存储器,称为快表) 在实际系统中一般采用快表与普通页表相结合的方式实现地址转换
页表与快表相结合 V=(p,d) 虚地址(分页) p d 在查找与给定的p对应的p’时,快表表与页表同时进行。若在快表中找到,则页表结束查找。若在页表中找到,则要更新快表。 快表 p P’ 输 入 p 输 出 P’ 页表 p P’ P’ P’ d 物理地址
例:设访问主存时间为200ns,访问联想存储器为40ns,命中率为90%,则平均存取时间为多少?例:设访问主存时间为200ns,访问联想存储器为40ns,命中率为90%,则平均存取时间为多少? 解: 方法1: 查页表两次访存:平均为200+200=400ns 方法2: 查快表(200+40)×90%+(200+200)×10%=256ns
3、 多级页表的地址转换(解决页表空间问题) Windows NT等使用x86的CPU的32位地址,使用4KB的页面(212),这意味着进程最多可以使用多达220(100多万)个页面。显然这样大的页表全放在主存中将占用相当大的主存空间。 解决方法: 对页表本身也采取分页措施。即把页表本身按固定大小分成为一个个页面(页面大小为 212=4KB)。只将顶级页表全部装入主存。
当前进程页目录 页目录寄存器 31 11 0 页架号 当前进程的某个次级页表 31 12 11 0 页架号 + + 31 22 21 12 11 0 面目录号 页号 偏移 31 12 11 0 页架号 偏移 物理地址 虚拟地址 二级页表地址变换
通过二级页表的地址映射访问主存存取数据需要三次访问主存(一次页目录,一次页表,最后是数据所在物理地址),所需时间是原来的三倍。通过二级页表的地址映射访问主存存取数据需要三次访问主存(一次页目录,一次页表,最后是数据所在物理地址),所需时间是原来的三倍。 当然对64位的地址,也可组织成三级、四级页表,但性能的影响是不可忽视的。 多级页表:以时间换取空间
页号 辅存位置 状态位 块号 (四)、请求式分页的实现 第一个问题: 怎样发现页不在内存? 扩充页表(以前页表结构只包含页号和块号两个信息),为了判断页面在不在主存,可在原页表上扩充,增加两个数据项:状态位,辅存中的位置)。
0 … 1 5 1 … 1 6 2 … 0 - 0 … 1 2 1 … 1 4 2 … 0 - 3 … 0 - 0 … 1 8 1 … 1 3 2 … 0 - job1 job1页表 0 0 os 1k 1k os 2k 2k job2(0页) 3k-1 job2 3k job2页表 0 job3(1页) 4k 1k L 1, 2120 ADD 1, 3410 L 1, 2120 ADD 1, 3410 2k 5k job1(0页) 006802 6k 3k job1(1页) 006251 7k 4k-1 空 job3页表 job3 8k 0 job3(0页) 9k 1k 空 10k 2k 主存 3k-1 页号 辅存 状态 块号 请求页式映象存储图
进程中指令的执行: 当进程执行某条指令时,若这条指令涉及逻辑地址,则由硬件机构得到页号,并以该页号为索引查页表,这时将有两种可能性: 页表中的状态位为1:表示此页已调入主存,可查得块号p’,形成p’+d的物理地址,从而指令得以执行,继而执行下条指令。 页表中的状态位为0:表示此页不在主存,而是在磁盘上(辅存地址)。 怎么办?
页面不在主存时的一般步骤如下: 若页面不在主存时,就会产生缺页中断: 当缺页中断发生时,用户程序被中断,控制转到OS的调页程序,由调页程序把所需的页面从磁盘调入内存的某块中,并把页表中该页面登记项中的状态位由0改为1,填入实际块号,随后继续执行被中断的程序。 这一页面是根据请求而装入的,因而称为请求分页存储管理。
第二个问题: 如果内存中无空闲的页架? 选取一页淘汰 选择哪一页呢? 页面淘汰算法(页面置换算法)
页面淘汰(置换)算法 ––– 确定淘汰哪一页的策略 置换算法优劣的指标:缺页率 缺页率=访问缺页次数/访问总次数 抖动(颠簸):内外存交换频繁使效率下降(导致系统效率急剧下降的主、辅存之间的频繁转换现象)
最佳置换算法OPT(Optimal) • 基本原则: 淘汰在将来再也不被访问,或者是在最远的将来才能被访问的页。(向后看) • 特点: 无法预测作业将用到哪些页!所以此算法是无法实现的——理论上的算法。
例:某进程分配页架数为3(3个内存块),其运行期间页面访问序列: 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 分析其按照OPT算法进行页面置换的过程? 7 7 7 7 2 2 2 2 2 7 7 2 2 2 2 2 2 2 2 2 0 0 0 0 0 4 0 0 0 0 0 0 0 4 4 0 0 0 0 1 1 1 3 3 3 1 1 1 1 1 1 3 3 3 1 3 3
A B C D A B E A B C D E 页面访问序列 A A A A A A A A A C C C B B B B B B B B B D D C D D D E E E E E E + + + + + + + = 7 /12=58% 缺页次数=7; 缺页率 例:某进程分配页架数为3(3个内存块),其运行期间页面访问序列:A,B,C,D,A,B,E,A,B,C,D,E,分析其按照OPT算法进行页面置换时的缺页情况。
先进先出置换算法FIFO(First In First Out) • 基本原则:选择最早进入主存的页面淘汰。 • 理由:最早进入的页面其不再使用的可能性比最近调入的页面要大。 • 实现:把进入主存的各页面按进入主存的时间次序构成队列(链表或表格),总是淘汰队头的页面。 • 缺点: • 异常现象:对于一些特定的访问序列,随分配页架数增加,缺页频率反而增加!
FIFO算法异常(Belady)现象 当分配的实际页数增加时,理论上缺页频率应该减少, 但实际中采用FIFO算法可能反而导致更多的缺页中断。 0 m 0 m 正常现象异常现象
页号 辅存位置 状态位 块号 “0”表示未修改过–––不必写回辅存 修改位 “0”表示没有访问过 “1”表示修改过–––写回辅存 访问位 页号 块号 修改位 访问位 状态位 辅存位置 “1”表示已被访问过 对页表扩展,添加访问位和修改位 页表表目扩展为
页号 块号 访问位 状态位 辅存地址 先进先出置换算法(FIFO)的改善 • 二次机会置换算法FIFO算法与页表中的“访问位”结合; 页表表目扩展为 • 时钟页面置换算法减少二次机会算法由于“移动”所引起的系统开销。
二次机会置换算法 思想:为了避免FIFO可能会把经常使用的页替换出去的问题,我们可以对它做一个简单的修改,对最老页面的R位进行检查。如果R位是0,那么这个页既老又没用,应该被立刻替换掉;如果是1,就清除这个位,把这个页放到页链表的尾端,修改它的装入时间让它就像刚装入的一样,然后继续搜索。 举例:
最近最少使用置换算法(LRU) --Least Recently Used • 基本原则:选择最近一段时间内最长时间没有被访问过的页面淘汰。(向前看) • 基本理由:认为过去一段时间里不曾被访问过的页,在最近的将来也可能不再会被访问。“最近的过去”与“最近的将来”近似。 • 实现困难:需为每个页设置一个特定单元,记录上次访问后到现在的时间量t,并选择t最大的页淘汰。无论硬件还是软件实现开销都很大! • 实际应用:近似算法NUR!
页号 块号 修改位 访问位 状态位 辅存地址 最近未使用置换算法(NUR)--Not Recently Used • 基本原则:淘汰最近未使用的页,且希望其在主存逗留期间页面内的数据未被修改过! • 页表扩充: • 过程: • 开始时所有页的访问位、修改位都为0。访问/修改时再置1。 • 当选择淘汰页时,按照访问位0 0 1 1的顺序淘汰。 修改位0 10 1 周期性地对访问位、修改位清零!
例1:在一个采用页式虚拟存储管理的系统中,有一用户作业,它依次要访问的字地址序列是:115,228,120,88,446,102,321,432,260,167,若该作业的第0页已经装入主存,现分配给该作业的主存共300字节,页的大小为100字节,请回答下列问题: (1)按FIFO调度算法将产生_____次缺页中断,依次淘汰的页号为_____,缺页中断率为_____。 (2)按LRU调度算法将产生_____次缺页中断,依次淘汰的页号为_____,缺页中断率为_____。
例2:设某作业占有7个页面,如果在主存中最多只允许装入4个页面,作业运行时,实际访问页面的顺序是1, 2, 3, 6, 4, 7, 3, 2, 1, 4, 7, 5, 6, 5, 2, 1。试用FIFO与LRU页面调度算法,列出各自的页面淘汰顺序和缺页中断次数。
小结 请求式分页系统中指令执行和缺页中断处理过程(如下图)
启动要处理的指令 给出虚地址 形成页号 准备执行下条指令 Y 该页在主存 执行完该指令 N 硬件 软件 缺页中断 N 选一页淘汰 有空闲块 Y 调整存储分块表和页表 从外存读入需要的页 N 要重新写入 调整存储分块表和页表 Y 该页写入外存 重新启动被中断的指令 指令执行和缺页中断处理
由硬件和软件相配合实现的,虚线上面部分是由硬件实现的,而下部是由软件实现的。由硬件和软件相配合实现的,虚线上面部分是由硬件实现的,而下部是由软件实现的。 在多进程环境下,一个进程在等待传输页面时,它处于阻塞态,此时系统可以调度另一进程运行,当传输完成时,唤醒原先被阻塞的那个进程,等到下次再调度到它时,才能恢复到断点,继续运行下去。
影响缺页率的主要因素 • 程序质量:尽可能使编出的程序具有高度的局部性,则执行时可经常集中在几个页面上进行访问,减少缺页率。 目标:尽可能减少缺页中断次数 • 页面大小:页面大,页表小,省空间且查找快,缺页次数相对也少;一次换页的时间长,页内零头空间浪费的可能性较大。页面小则相反。 • 主存容量:一个程序运行时遇到缺页中断的次数,是和分配给该道程序的主存容量(页架数)成反比的,但当主存容量达到某个值时,缺页次数减少不再明显。多数程序都有一个确定值——拐点。图9.16 • 淘汰算法:在淘汰页时应选择最合适的置换算法。
程序局部性是虚存引入和使用的前提 程序运行的局部特性 进程对主存的访问不是均匀的,而是高度地表现出其局部性。 • 时间局部性:指某个位置(数据或指令)最近被访问了,那么往往很快又要被再次访问。借助于循环、经常用到的变量和子程序等程序结构实现。 • 空间局部性:指一旦某个位置最近被访问了,那么它附近的位置也要被访问。采用顺序的指令串、线性的数据结构(如数组或常用变量彼此相近存放)来实现。 • 程序在某段时间对整个地址空间各页的访问往往不是分散的,而是比较集中在少数几页; • 而就一个页面而言,程序对一个页面中各单元的访问也不是均匀的,而是集中于页面中的较少部分。
(3)页面的大小 • 页面大小: • 大页面:增加页内碎片——小页面好! • 小页面:增加主存页架数,更多页表空间——大页面好! • 缺页时,读入一页总的传送时间=总的延迟时间(80~90%)+数据块传送时间。——大页面好! • 结论:理论和实践——页面尺寸以小些为好! P190
三、分段存储管理 (一)分段存储管理基本概念 (二)地址转换 (三)段的动态连接 (四)虚拟存储管理中的存储保护问题 (五)分段存储管理的优缺点
(一)分段存储管理基本概念 1、进程的逻辑地址空间 • 程序员为每个段给出段名=>二维逻辑地址空间(段名,段内地址) • 编译或汇编之后系统为每个段给出一个内部段名(段号) =>二维虚地址空间(段号s,段内相对地址w) 2、程序的地址结构: (S,W)----段号S,段内地址W
3、主存分配: 以段为单位,每一段分配一块连续的主存分区,一个进程的各段所分到的主存分区不要求是相邻连续的分区。 4、段表和段表地址寄存器: • 内容:段号,段的长度,段在主存中的起始地址,段的状态位,访问位,修改位,扩充位,段在外存的地址等 • 组织:段号从小到大排列,包含该进程的全部段。 • 生命期:作业调入时为进程建立段表,撤消进程时清除此进程的段表。 • 段表地址寄存器:存放运行进程的段表在主存中起始地址。(调度时从PCB中读取)