虚拟存储器
文章目录
- 虚拟存储器
- 虚拟存储器概述
- 常规存储器管理方式的特征
- 局部性原理
- 虚拟存储器的定义和特征
- 请求分页存储管理方式
- 请求分页中的硬件支持
- 请求分页中的内存分配
- 页面调入策略
- 页面置换算法
- 最佳(Optimal)置换算法
- 先进先出(FIFO)页面置换算法
- 最近最久未使用(LRU)置换算法
- 最少使用(Least Frequently Used, LFU)置换算法
- Clock 置换算法
- 页面缓冲算法(PBA:Page Buffering Algorithm)
- “抖动”与工作集
- 多道程序度与“抖动”
- 工作集
- “抖动”的预防方法
- 请求分段存储管理方式
- 请求分段中的硬件支持
- 分段的共享与保护
虚拟存储器概述
-
常规存储器管理方式的特征
- 一次性:在前面所介绍的几种存储管理方式中,都要求将作业全部装入内存后方能运行
- 驻留性:作业装入内存后,便一直驻留在内存中,直至作业运行结束。
-
局部性原理
- 时间局限性:如果程序中的某条指令一旦执行,则不久以后该指令可能再次执行; 如果某数据被访问过,则不久以后该数据可能再次被访问。(循环操作)
- 空间局限性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将 被访问。(顺序执行)
-
虚拟存储器的定义和特征
- 定义:谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
- 特征:
- 多次性:多次性是指一个作业被分成多次调入内存运行
- 对换性:对换性是指允许在作业的运行过程中进行换进、换出
- 虚拟性:虚拟性是指能够从逻辑上扩充内存容量
请求分页存储管理方式
-
请求分页中的硬件支持
-
页表机制
- 状态位 P:用于指示该页是否已调入内存,供程序访问时参考。
- 访问字段 A:用于记录本页在一段时间内被访问的次数,或记录本页最近已有多长 时间未被访问,供选择换出页面时参考。
- 修改位 M:表示该页在调入内存后是否被修改过。M 位供置换页面时参考。
- 外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考。
-
缺页中断机构
它与一般的中断相比,有着明显的区别
- 在指令执行期间产生和处理中断信号
- 一条指令在执行期间,可能产生多次缺页中断
-
地址变换机构
-
-
请求分页中的内存分配
在为进程分配内存时,将涉及到三个问题:第一,最小物理块数的确定;第二,物理块的分配策略;第三,物理块的分配算法。
-
最小物理块数的确定
取决于指令的格式、功能和寻址方式
-
内存分配策略
在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。在进行置换 时,也可采取两种策略,即全局置换和局部置换。
- 固定分配局部置换(Fixed Allocation,Local Replacement)
固定分配:为 每个进程分配固定数目的物理块
局部置换:,如果进程 在运行中发现缺页,则只能从该进程在内存的 n 个页面中选出一个页换出,然后再调入一 页,以保证分配给该进程的内存空间不变。
-
可变分配全局置换(Variable Allocation,Global Replacement) 大锅饭
可变分配:先为进程分配一定数目的物理块,在进程运行期间根据情况适当的增加或减小
全局置换:发现缺页从OS保留空闲块中取出一块分配,当OS无空闲块,则从一个选中进程块中抽取
-
可变分配局部置换(Variable Allocation,Local Replacement) 会哭的孩子有糖吃
如果进程在运行中频繁地发生缺页中断,则系统须再为该进程分配若干 附加的物理块,直至该进程的缺页率减少到适当程度为止;反之,若一个进程在运行过程 中的缺页率特别低,则此时可适当减少分配给该进程的物理块数
-
物理块分配算法
- 平均分配算法
- 按比例分配算法
- 考虑优先权的分配算法
-
-
页面调入策略
- 预调页策略:如果进程的许多页是存放在外存的一个连续区域中,则一次调入若干个相邻的页,会 比一次调入一页更高效些
- 请求调页策略:但这种策略每次仅调入一页,故须花费较大的系统开销,增加了磁盘 I/O 的启动频率。
页面置换算法
-
最佳(Optimal)置换算法
其所选择的被淘汰页面, 将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。
-
先进先出(FIFO)页面置换算法
该算法总是淘汰最先进入内存的页面,即选择在内存中驻 留时间最久的页面予以淘汰
-
最近最久未使用(LRU)置换算法
LRU 置换算法是选择最近最久未 使用的页面予以淘汰。
LRU置换算法的硬件支持
-
寄存器
为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄 存器,可表示为
当进程访问某物理块时,要将相应寄存器的 Rn-1 位置成 1。此时,定时信号将每隔一 定时间(例如 100 ms)将寄存器右移一位。如果我们把 n 位寄存器的数看做是一个整数,那么, 具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。
由图可以看出,第 3 个内存页面的 R 值最小,当发 生缺页时,首先将它置换出去。
-
栈
可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时, 便将该页面的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编 号,而栈底则是最近最久未使用页面的页面号。
-
-
最少使用(Least Frequently Used, LFU)置换算法
寄存器R中1位数最少淘汰
对比LRU
2 1 1 0 4
LRU: 2 21 21 01 04
LFU: 2 21 21 01 41
-
Clock 置换算法
Clock 算法就是用得较多的一种 LRU 近似算法。
-
简单的Clock置换算法(NRU)
当采用简单 Clock 算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过 链接指针链接成一个循环队列。当某页被访问时,其访问位被置 1。置换算法在选择一页淘 汰时,只需检查页的访问位。如果是 0,就选择该页换出;若为 1,则重新将它置 0,暂不 换出,而给该页第二次驻留内存的机会,再按照 FIFO 算法检查下一个页面。当检查到队列 中的最后一个页面时,若其访问位仍为 1,则再返回到队首去检查第一个页面。
-
改进型 Clock 置换算法
由访问位 A 和修改位 M 可以组合成下面四种类型的页面:
- 从指针所指示的当前位置开始,扫描循环队列,寻找 A=0 且 M=0 的第一类页面, 将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位 A。
- 如果第一步失败,即查找一周后未遇到第一类页面,则开始第二轮扫描,寻找 A=0 且 M=1 的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所 有扫描过的页面的访问位都置 0。
- 如果第二步也失败,亦即未找到第二类页面,则将指针返回到开始的位置,并将所 有的访问位复 0。然后重复第一步,如果仍失败,必要时再重复第二步,此时就一定能找到 被淘汰的页。
-
-
页面缓冲算法(PBA:Page Buffering Algorithm)
该算法规定将一个被淘汰的页放入两个链表中的一个,即如果页面未被修改,就将 它直接放入空闲链表中;否则,便放入已修改页面的链表中。
“抖动”与工作集
-
多道程序度与“抖动”
- 多道程序度:系统中能运行的进程数
- 抖动:每个进程大部分时间都用于也免得换进/换出,而几乎不能再去做任何有效的工作,从而导致处理机急剧下降并趋于0的情况
- 发生抖动的原因:同时在系统中运行的进程太多,由此分配给每个进程的物理块太少,不能满足进程正常运行的基本要求,知识每个进程运行时,频繁的缺页,必须请求系统将所缺之页调入内存。
-
工作集
- 定义:在某段时间间隔 △ \triangle △里,进程实际所要访问页面的集合,在时间t的工作集 w ( t , △ ) w(t, \triangle) w(t,△),其中 △ \triangle △称为工作集的窗口大小
- 工作集 w ( t , △ ) w(t, \triangle) w(t,△)是二元函数,即在不同时间t的工作集,所含页面不同,工作集与 △ \triangle △有关 w ( t , △ ) ⊆ w ( t , △ + 1 ) w(t, \triangle)\subseteq w(t, \triangle + 1) w(t,△)⊆w(t,△+1)
-
“抖动”的预防方法
-
局部置换策略
-
工作集算法
-
利用“L = S”准则调节缺页率:
其中L是缺页之间的平均时间,S是平均缺页服务时间,即用于置换一个页面所需的时间。
如果是L远比S大,说明很少发生缺页,磁盘的能力尚未得到充分的利用;反之,如果是L比S小,则说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。
只有当L与S接近时,磁盘和处理机都可达到它们的最大利用率。理论和实践都已证明,利用“L=S”准则,对于调节缺页率是十分有效的。 -
选择暂停进程
-
请求分段存储管理方式
-
请求分段中的硬件支持
-
段表机制
- 存取方式:用于标识本分段的存取属性是只执行、只读,还是允许读/写。
- 访问字段 A:其含义与请求分页的相应字段相同,用于记录该段被访问的频繁程度。
- 修改位 M:用于表示该页在进入内存后是否已被修改过,供置换页面时参考。
- 存在位 P:指示本段是否已调入内存,供程序访问时参考。
- 增补位:这是请求分段式管理中所特有的字段,用于表示本段在运行过程中是否做 过动态增长。
- 外存始址:指示本段在外存中的起始地址,即起始盘块号。
-
缺段中断机构
-
地址变换机构
-
-
分段的共享与保护
-
共享段表
- 共享进程计数 count。非共享段仅为一个进程所需要。当进程不再需要该段时,可 立即释放该段,并由系统回收该段所占用的空间。
- 存取控制字段。对于一个共享段,应给不同的进程以不同的存取权限。
- ) 段号。对于一个共享段,不同的进程可以各用不同的段号去共享该段。
-
共享段的分配与回收
-
共享段的分配
在为共享段分配内存时,对第一个请求使用该共享段的进程,由系 统为该共享段分配一物理区,再把共享段调入该区,同时将该区的始址填入请求进程的段 表的相应项中,还须在共享段表中增加一表项,填写有关数据,把 count 置为 1;之后,当 又有其它进程需要调用该共享段时,由于该共享段已被调入内存,故此时无须再为该段分 配内存,而只需在调用进程的段表中增加一表项,填写该共享段的物理地址;在共享段的 段表中,填上调用进程的进程名、存取控制等,再执行 count :=count+1 操作,以表明有两 个进程共享该段。
-
共享段的回收
当共享此段的某进程不再需要该段时,应将该段释放,包括撤消在该进程段表中共享 段所对应的表项,以及执行 count :=count-1 操作。若结果为 0,则须由系统回收该共享段的物理内存,以及取消在共享段表中该段所对应的表项,表明此时已没有进程使用该段;否 则(减 1 结果不为 0),只是取消调用者进程在共享段表中的有关记录。
-
-
分段保护
- 越界检查
- 存取控制检查
- 环保护机构
-
此段的某进程不再需要该段时,应将该段释放,包括撤消在该进程段表中共享 段所对应的表项,以及执行 count :=count-1 操作。若结果为 0,则须由系统回收该共享段的物理内存,以及取消在共享段表中该段所对应的表项,表明此时已没有进程使用该段;否 则(减 1 结果不为 0),只是取消调用者进程在共享段表中的有关记录。
-
分段保护
- 越界检查
- 存取控制检查
- 环保护机构