1 / 61

第九章 虚拟存储器管理技术

第九章 虚拟存储器管理技术. 虚拟存储器的基本概念 分页存储管理 ( 重点 ) 分段存储管理 段页式存储管理. 一、 虚拟存储器的概念. 1、虚拟存储器的引入. 在实存管理技术中,要求整个作业必须装入主存 。. 问题: 作业尺寸 > 主存大小 作业无法运行 解决方法: “ 扩充 ”主存 –– 虚拟存储技术. 并非真正扩充了物理主存空间. 地址空间. 存储空间. ( 编程 ). ( 运行 ). 交换. 逻辑. 物理. OS. 虚空间 ( 虚存 ). 实存、实空间. 2 、 虚拟存储器 的概念. 用户编程时所使用的一种用户思维中的存储器.

Download Presentation

第九章 虚拟存储器管理技术

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第九章 虚拟存储器管理技术 • 虚拟存储器的基本概念 • 分页存储管理(重点) • 分段存储管理 • 段页式存储管理

  2. 一、 虚拟存储器的概念 1、虚拟存储器的引入 在实存管理技术中,要求整个作业必须装入主存。 问题:作业尺寸>主存大小作业无法运行 解决方法:“扩充”主存––虚拟存储技术 并非真正扩充了物理主存空间

  3. 地址空间 存储空间 (编程) (运行) 交换 逻辑 物理 OS 虚空间(虚存) 实存、实空间 2、虚拟存储器的概念 用户编程时所使用的一种用户思维中的存储器 虚拟存储器:是一个地址空间,是进程访问的逻辑地址空间,而不是物理主存空间,是一个能从逻辑上对内存容量加以扩充的一种存储器系统。

  4. 运行进程访问的地址称为“虚地址”; • 而进程可访问的虚地址范围叫做程序的虚地址空间 • 处理器可直接访问的主存的地址称“实地址” • 可使用的实地址范围叫实地址空间(即主存) • 在多道程序运行环境下,操作系统把实际内存扩充成若干个虚存系统,为每个用户建立一个虚拟存储器,各用户可独立在虚存上编程运行。

  5. 需要大容量的外存储器的支持,或称物资基础.需要大容量的外存储器的支持,或称物资基础. 3、虚存技术基本思想 一般来说:虚空间>>实空间(也可以虚空间<实空间) 程序用20位有效地址长度–––0~220(寻址范围),实存64k<虚存220,此作业可以大于内存,其中部分程序被调入内存运行,其余放入辅存。 • 90-10规则: 90%的时间运行在10%的代码上 • 将所有程序代码放在内存是浪费 • 部分内容在内存,其它内存在辅存 虚存基本思想:当作业要求运行时,将其一部分装入内存,另一部分暂时留在辅存,作业在运行时,若要访问单元不在内存时,就将它们从辅存调入内存以保证作业正常运行。 主存+辅存虚存(还与地址结构有关) 虚拟存储器容量和速度? 局部性

  6. 4、 虚存管理三大策略(问题) • 调入策略(把哪部分装入主存-预调和请调) • 放置策略(放在主存什么地方) • 淘汰策略(或置换策略,主存不足时,把哪部分淘汰出主存)

  7. 5、常用的虚存管理技术 • 分页技术(重点讨论) • 分段技术 • 段页式技术

  8. 虚存概念的理解 1.部分装入; 2.离散分配; 3.多次对换; 4.虚存容量不是无限大(受内存和外存可利用的总容量限制;受计算机总线地址结构限制)。 5.虚存的“扩大”是以牺牲CPU工作时间以及内外存交换时间为代价的。

  9. 二、分页存储管理 (一)分页的基本思想 (二)请求式分页的基本思想 (三)分页系统的地址转换 (四)请求式分页的实现(页面置换算法) (五)分页系统的性能分析 (六)页面的共享和保护 (七)分页系统的软硬件

  10. (一)、分页的基本思想 • 内存空间分块:固定大小,连续编号(页架号)。 • 逻辑空间分页:大小与块同,称为页面;连续编号(页号)。 • 注意逻辑地址:分为页号和页内地址。 • 内存分配原则:连续的页分配在不连续的块内。 • 页表:页面和页架联系的数据基。 逻辑地址的表示(p, d); P = INT [A/L];d = A mod L (其中A:虚地址 L:页大小) 页面大小=页架大小

  11. 主存地址空间 作业地址空间 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页

  12. 页号 状态位 块号 (二)、请求式分页的基本思想 基本思想:在执行一个程序时才把它当前需要的少量几页放入内存。 具体做法: (1)只要在页表中增加一个状态位。  (2)当它为1时,该页已在内存; (3)当它为0时,发生缺页中断信号,调用缺页中断处理程序,装入请求页,调整页表。  在简单分页系统(实存)中,页表中只有两个字段,即页号与块号(页架号)。

  13. d (偏移) P(页) 虚地址 2 452 页表地址reg 页 块 页表长 页表始址 0 2 实地址 1 3 8 452 2 8 123 8644 9k … (三)、分页系统中的地址转换 特点:一次地址 转换需要访问 主存两次。 问题1:转换速度慢; 问题2:页表本身占     用主存空间。 1、直接映象地址转换 地 址: 2500 页面大小:1024 + +

  14. 2、 快表(解决页表时间问题) 访问主存=访问页表+访问物理地址 解决方法: 将作业中最常用的页表表目置入高速缓存,提高查表速度。(在地址变换机构中加入一个高速的联想存储器,称为快表) 在实际系统中一般采用快表与普通页表相结合的方式实现地址转换

  15. 页表与快表相结合 V=(p,d) 虚地址(分页) p d 在查找与给定的p对应的p’时,快表表与页表同时进行。若在快表中找到,则页表结束查找。若在页表中找到,则要更新快表。 快表 p P’ 输 入 p 输 出 P’ 页表 p P’ P’ P’ d 物理地址

  16. 例:设访问主存时间为200ns,访问联想存储器为40ns,命中率为90%,则平均存取时间为多少?例:设访问主存时间为200ns,访问联想存储器为40ns,命中率为90%,则平均存取时间为多少? 解: 方法1: 查页表两次访存:平均为200+200=400ns 方法2: 查快表(200+40)×90%+(200+200)×10%=256ns

  17. 3、 多级页表的地址转换(解决页表空间问题) Windows NT等使用x86的CPU的32位地址,使用4KB的页面(212),这意味着进程最多可以使用多达220(100多万)个页面。显然这样大的页表全放在主存中将占用相当大的主存空间。 解决方法: 对页表本身也采取分页措施。即把页表本身按固定大小分成为一个个页面(页面大小为 212=4KB)。只将顶级页表全部装入主存。

  18. 两级页表结构

  19. 当前进程页目录 页目录寄存器 31 11 0 页架号 当前进程的某个次级页表 31 12 11 0 页架号 + + 31 22 21 12 11 0 面目录号 页号 偏移 31 12 11 0 页架号 偏移 物理地址 虚拟地址 二级页表地址变换

  20. 通过二级页表的地址映射访问主存存取数据需要三次访问主存(一次页目录,一次页表,最后是数据所在物理地址),所需时间是原来的三倍。通过二级页表的地址映射访问主存存取数据需要三次访问主存(一次页目录,一次页表,最后是数据所在物理地址),所需时间是原来的三倍。 当然对64位的地址,也可组织成三级、四级页表,但性能的影响是不可忽视的。 多级页表:以时间换取空间

  21. 页号 辅存位置 状态位 块号 (四)、请求式分页的实现 第一个问题: 怎样发现页不在内存? 扩充页表(以前页表结构只包含页号和块号两个信息),为了判断页面在不在主存,可在原页表上扩充,增加两个数据项:状态位,辅存中的位置)。

  22. 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 页号 辅存 状态 块号 请求页式映象存储图

  23. 进程中指令的执行: 当进程执行某条指令时,若这条指令涉及逻辑地址,则由硬件机构得到页号,并以该页号为索引查页表,这时将有两种可能性: 页表中的状态位为1:表示此页已调入主存,可查得块号p’,形成p’+d的物理地址,从而指令得以执行,继而执行下条指令。 页表中的状态位为0:表示此页不在主存,而是在磁盘上(辅存地址)。 怎么办?

  24. 页面不在主存时的一般步骤如下: 若页面不在主存时,就会产生缺页中断: 当缺页中断发生时,用户程序被中断,控制转到OS的调页程序,由调页程序把所需的页面从磁盘调入内存的某块中,并把页表中该页面登记项中的状态位由0改为1,填入实际块号,随后继续执行被中断的程序。 这一页面是根据请求而装入的,因而称为请求分页存储管理。

  25. 第二个问题: 如果内存中无空闲的页架? 选取一页淘汰 选择哪一页呢? 页面淘汰算法(页面置换算法)

  26. 页面淘汰(置换)算法 ––– 确定淘汰哪一页的策略 置换算法优劣的指标:缺页率 缺页率=访问缺页次数/访问总次数 抖动(颠簸):内外存交换频繁使效率下降(导致系统效率急剧下降的主、辅存之间的频繁转换现象)

  27. 最佳置换算法OPT(Optimal) • 基本原则:   淘汰在将来再也不被访问,或者是在最远的将来才能被访问的页。(向后看) • 特点: 无法预测作业将用到哪些页!所以此算法是无法实现的——理论上的算法。

  28. 例:某进程分配页架数为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

  29. 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算法进行页面置换时的缺页情况。

  30. 先进先出置换算法FIFO(First In First Out) • 基本原则:选择最早进入主存的页面淘汰。 • 理由:最早进入的页面其不再使用的可能性比最近调入的页面要大。 • 实现:把进入主存的各页面按进入主存的时间次序构成队列(链表或表格),总是淘汰队头的页面。 • 缺点: • 异常现象:对于一些特定的访问序列,随分配页架数增加,缺页频率反而增加!

  31. 先进先出置换算法FIFO缺页率计算

  32. FIFO算法异常(Belady)现象 当分配的实际页数增加时,理论上缺页频率应该减少, 但实际中采用FIFO算法可能反而导致更多的缺页中断。 0 m 0 m 正常现象异常现象

  33. 页号 辅存位置 状态位 块号 “0”表示未修改过–––不必写回辅存 修改位 “0”表示没有访问过 “1”表示修改过–––写回辅存 访问位 页号 块号 修改位 访问位 状态位 辅存位置 “1”表示已被访问过 对页表扩展,添加访问位和修改位 页表表目扩展为

  34. 页号 块号 访问位 状态位 辅存地址 先进先出置换算法(FIFO)的改善 • 二次机会置换算法FIFO算法与页表中的“访问位”结合; 页表表目扩展为 • 时钟页面置换算法减少二次机会算法由于“移动”所引起的系统开销。

  35. 二次机会置换算法 思想:为了避免FIFO可能会把经常使用的页替换出去的问题,我们可以对它做一个简单的修改,对最老页面的R位进行检查。如果R位是0,那么这个页既老又没用,应该被立刻替换掉;如果是1,就清除这个位,把这个页放到页链表的尾端,修改它的装入时间让它就像刚装入的一样,然后继续搜索。 举例:

  36. 最近最少使用置换算法(LRU) --Least Recently Used • 基本原则:选择最近一段时间内最长时间没有被访问过的页面淘汰。(向前看) • 基本理由:认为过去一段时间里不曾被访问过的页,在最近的将来也可能不再会被访问。“最近的过去”与“最近的将来”近似。 • 实现困难:需为每个页设置一个特定单元,记录上次访问后到现在的时间量t,并选择t最大的页淘汰。无论硬件还是软件实现开销都很大! • 实际应用:近似算法NUR!

  37. 最近最少使用置换算法LRU缺页率计算

  38. 页号 块号 修改位 访问位 状态位 辅存地址 最近未使用置换算法(NUR)--Not Recently Used • 基本原则:淘汰最近未使用的页,且希望其在主存逗留期间页面内的数据未被修改过! • 页表扩充: • 过程: • 开始时所有页的访问位、修改位都为0。访问/修改时再置1。 • 当选择淘汰页时,按照访问位0 0 1 1的顺序淘汰。 修改位0 10 1 周期性地对访问位、修改位清零!

  39. 例1:在一个采用页式虚拟存储管理的系统中,有一用户作业,它依次要访问的字地址序列是:115,228,120,88,446,102,321,432,260,167,若该作业的第0页已经装入主存,现分配给该作业的主存共300字节,页的大小为100字节,请回答下列问题: (1)按FIFO调度算法将产生_____次缺页中断,依次淘汰的页号为_____,缺页中断率为_____。 (2)按LRU调度算法将产生_____次缺页中断,依次淘汰的页号为_____,缺页中断率为_____。

  40. 例2:设某作业占有7个页面,如果在主存中最多只允许装入4个页面,作业运行时,实际访问页面的顺序是1, 2, 3, 6, 4, 7, 3, 2, 1, 4, 7, 5, 6, 5, 2, 1。试用FIFO与LRU页面调度算法,列出各自的页面淘汰顺序和缺页中断次数。

  41. 小结 请求式分页系统中指令执行和缺页中断处理过程(如下图)

  42. 启动要处理的指令 给出虚地址 形成页号 准备执行下条指令 Y 该页在主存 执行完该指令 N 硬件 软件 缺页中断 N 选一页淘汰 有空闲块 Y 调整存储分块表和页表 从外存读入需要的页 N 要重新写入 调整存储分块表和页表 Y 该页写入外存 重新启动被中断的指令 指令执行和缺页中断处理

  43. 由硬件和软件相配合实现的,虚线上面部分是由硬件实现的,而下部是由软件实现的。由硬件和软件相配合实现的,虚线上面部分是由硬件实现的,而下部是由软件实现的。 在多进程环境下,一个进程在等待传输页面时,它处于阻塞态,此时系统可以调度另一进程运行,当传输完成时,唤醒原先被阻塞的那个进程,等到下次再调度到它时,才能恢复到断点,继续运行下去。

  44. 影响缺页率的主要因素 • 程序质量:尽可能使编出的程序具有高度的局部性,则执行时可经常集中在几个页面上进行访问,减少缺页率。 目标:尽可能减少缺页中断次数 • 页面大小:页面大,页表小,省空间且查找快,缺页次数相对也少;一次换页的时间长,页内零头空间浪费的可能性较大。页面小则相反。 • 主存容量:一个程序运行时遇到缺页中断的次数,是和分配给该道程序的主存容量(页架数)成反比的,但当主存容量达到某个值时,缺页次数减少不再明显。多数程序都有一个确定值——拐点。图9.16 • 淘汰算法:在淘汰页时应选择最合适的置换算法。

  45. 程序局部性是虚存引入和使用的前提 程序运行的局部特性    进程对主存的访问不是均匀的,而是高度地表现出其局部性。 • 时间局部性:指某个位置(数据或指令)最近被访问了,那么往往很快又要被再次访问。借助于循环、经常用到的变量和子程序等程序结构实现。 • 空间局部性:指一旦某个位置最近被访问了,那么它附近的位置也要被访问。采用顺序的指令串、线性的数据结构(如数组或常用变量彼此相近存放)来实现。 • 程序在某段时间对整个地址空间各页的访问往往不是分散的,而是比较集中在少数几页; • 而就一个页面而言,程序对一个页面中各单元的访问也不是均匀的,而是集中于页面中的较少部分。

  46. (3)页面的大小 • 页面大小: • 大页面:增加页内碎片——小页面好! • 小页面:增加主存页架数,更多页表空间——大页面好! • 缺页时,读入一页总的传送时间=总的延迟时间(80~90%)+数据块传送时间。——大页面好! • 结论:理论和实践——页面尺寸以小些为好! P190

  47. 三、分段存储管理 (一)分段存储管理基本概念 (二)地址转换 (三)段的动态连接 (四)虚拟存储管理中的存储保护问题 (五)分段存储管理的优缺点

  48. (一)分段存储管理基本概念 1、进程的逻辑地址空间 • 程序员为每个段给出段名=>二维逻辑地址空间(段名,段内地址) • 编译或汇编之后系统为每个段给出一个内部段名(段号) =>二维虚地址空间(段号s,段内相对地址w) 2、程序的地址结构: (S,W)----段号S,段内地址W

  49. 3、主存分配: 以段为单位,每一段分配一块连续的主存分区,一个进程的各段所分到的主存分区不要求是相邻连续的分区。 4、段表和段表地址寄存器: • 内容:段号,段的长度,段在主存中的起始地址,段的状态位,访问位,修改位,扩充位,段在外存的地址等 • 组织:段号从小到大排列,包含该进程的全部段。 • 生命期:作业调入时为进程建立段表,撤消进程时清除此进程的段表。 • 段表地址寄存器:存放运行进程的段表在主存中起始地址。(调度时从PCB中读取)

More Related