虚拟存储器概述
1. 常规存储器管理方式的特征和局部性原理
- 常规存储器管理方式的特征:
- 一次性。要求将作业全部装入内存才能运行,当程序大于内存时,作业无法运行。
- 驻留性。装入内存中用的作业一直驻留内存,直到运行结束(处于等待状态的进程也占用内存)。
- 局部性原理:
- 时间局限性。如果程序中的某条指令一旦执行, 则不久以后该指令可能再次执行;如果某数据被访问过, 则不久以后该数据可能再次被访问。产生时间局限性的典型原因,是由于在程序中存在着大量的循环操作。
- 空间局限性。一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,其典型情况便是程序的顺序执行。
2. 虚拟存储器的定义和特征
- 虚拟存储器定义:
- 具有请求调入功能和置换功能, 能从逻辑上对内存容量加以扩充的一种存储器系统。
- 其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近于外存。
- 虚拟存储器的特征 :
- 多次性:作业被分成多次调入内存运行。
- 对换性:允许在作业的运行过程中进行换进、换出。
- 虚拟性:从逻辑上扩充内存容量。
- 实现虚拟存储器的效果:
- 可使一个大的用户程序能在较小的内存空间中运行;也可在内存同时装入更多的进程使它们并发执行。
- 从用户的角度看,该系统所具有的内存容量,比实际容量大得多。这只是一种感觉,是虚的。故称为虚拟存储器。
- 虚拟空间的容量由系统的有效地址长度决定。假设地址长度为32,按字节寻址,则虚拟存储空间大小为232个字节。即32位的操作系统,用户程序只能编写最多4G的程序(虚存空间) 。
虚拟存储的实现方式
1. 请求分页存储管理方式
(1) 请求分页的硬件支持
- 请求页标机制,将用户地址空间中的逻辑地址映射成为内存空间中的物理地址。
- 请求分页系统中的每个页表结构如下:
- 状态位P:表明该页是否在内存。
- 访问字段A:记录本页在一段时间内被访问的次数,或记录本页最近有多长时间未被访问,供换出页面时参考。
- 修改位M:查看此页在调入内存后是否被修改过。供置换页面时参考。
- 外存地址:指出该页在外存上的地址,供调入该页时参考。
(2) 缺页中端机构
- 要访问的页不在内存时,便产生了一个缺页中断,请求操作系统将该页面调入内存。缺页中断同其它中断一样要经历CPU环境保护、分析中断原因、转入中断处理程序、恢复CPU环境等步骤。但缺页中断又是一种特殊的中断。
- 这种中断在指令执行期间产生和处理中断信号。
- 一条指令在执行期间可能产生多次缺页中断。
- 地址变换机构如下图:
(1) 请求分页中的页面置换算法
- 最佳置换算法
- 其所选择的被淘汰页面,将是以后永不使用的, 或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。
- 实际上该算法是无法实现的。
- 先进先出置换算法
- 实现方便。不需要额外硬件。 效果不好。
- 最近最久未使用LRU算法
- 根据页面调入内存后的使用情况来做出决策。
- 为了快速知道哪一页是最近最久未使用的页面,需要硬件支持。
- Clock置换算法
- 简单的Clock置换算法
- 只需要为每页设置一位访问位,再将内存中的所有页面都通过链接指针连接成一个循环队列。当某页访问时,其访问位被置为1.置换算法在选择一页淘汰时,只需要检查页的访问位。如果是0,就选择该页换出。若为1,则将其重新置为0,暂不换出。给与第二次驻留内存的机会。流程如下:
- 改进的Clock置换算法
- 在将一个页面换出时,若该页已被修改过,便将该页重新写回磁盘上,但如果该页未被修改过,则不必将它考回磁盘。
- 改进型Clock算法:换出的页面是既未使用的、又未被修改过的页面。
- 在Clock算法的访问为A基础上加一个修改位M。
- 由访问位A和修改位M可以组合成下面四种类型的页面:
- 1类(A=0, M=0):表示该页最近既未被访问, 又未被修改, 是最佳淘汰页。
- 2类(A=0, M=1): 表示该页最近未被访问, 但已被修改, 并不是很好的淘汰页。
- 3类(A=1, M=0): 最近已被访问, 但未被修改, 该页有可能再被访问。
- 4类(A=1, M=1):最近已被访问且被修改, 该页可能再被访问。
- 其执行过程可分成以下三步:
- 从指针所指示的当前位置开始, 扫描循环队列, 寻找A=0且M=0的第一类页面, 将所遇到的第一个页面作为所选中的淘汰页。 在第一次扫描期间不改变访问位A(改变访问位会对第2步产生影响)。
- 如果第一步失败,即查找一周后未遇到第一类页面, 则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置0。
- 否则第三遍找A=0,M=0的页面,有则淘汰(其实这里的A=0,M=0的页面是由A=1,M=0的页面被第2步修改形成的)。
- 否则第四遍找A=0,M=1的页面,(肯定会找到)。其实这里的A=0,M=1的页面是由A=1,M=1的页面被第2步修改形成的)。
(2) 抖动
- 产生原因:
- 因系统中运行的进程太多,分配给每个进程的物理块太少,导致每个进程在运行时,频繁地出现缺页,必须请求OS将所缺的页调入内存。
2. 请求分段存储管理方式
虚拟段式分配又称为请求分段,在程序装入时,只需调入几个分段而不是所有的分段。随着程序的运行,如果需要访问的段不在内存,可以请求操作系统把需要的段调入内存。
(1) 请求分段中的硬件支持
- 请求段表机制:
- 存取方式:表明本段是只执行、只读,还是允许读/写。
- 访问字段A :用于记录该段被访问的频繁程度。
- 修改位M:用于记录该段在进入内存后是否被修改过。
- 存在位P :记录该段是否已调入内存。
- 增补位:表明本段在运行过程中,是否做过动态增长。
- 外存始址:表明本段在外存中的起始盘号。
(2) 缺段中断机构
- 请求分段系统中的中断处理过程:
- 请求分段系统中的地址变换机构:
时间: 2024-07-28 22:08:12