第五章 虚拟存储器
一、虚拟存储器概述
1.1 常规存储管理方式的特征和局部性原理
1. 常规存储管理方式的特征
- 一次性:作业必须一次性地全部装入内存后方可开始运行,导致大作业无法在小内存中运行,无法进一步提高系统的多道程序度,限制了处理机利用率和系统吞吐量的提高
- 驻留性:作业呗装入内存后,整个作业都一直驻留在内存中,其中任何部分都不会背换出,直至作业运行结束
2. 局部性原理
在一较短的时间内,程序的执行仅局限于某个部分,相应地,它所访问的存储空间也局限于某个区域
- 程序执行时大多数情况是顺序执行
- 过程调用将会使程序执行轨迹由一部分转移到另一部分。大多数情况过程调用的深度不超过 5
- 程序中存在许多循环结构,仅有少数指令构成
- 程序中包括许多对数据结构的处理,局限在很小的范围内
局限性又体现在
- 时间局限性:程序中某条指令被执行,则不久后该指令可能再次执行;某数据被访问过,不久后可能被再次访问。时间局限性的典型原因是程序中存在大量的循环操作
- 空间局限性:一旦程序访问了某个存储单元,不久之后其临近的存储单元也将被访问。典型情况是程序的顺序执行
3. 虚拟存储器的基本工作情况
由局部性原理知,程序运行之前不需要全部装入内存,而是讲那些当前运行的少数页面或段装入内存便可,其余暂存在盘上。
程序运行时若所要访问的页(段)已调入内存便可继续执行,否则(称为缺页或缺段)发出缺页(段)中断请求,OS 遍利用请求调页(段)功能将它们调入内存。若内存已满则利用页(段)的置换功能,将暂时不用的页(段)调至盘上,腾出足够的空间后,再调入所需的页(段),使程序继续执行
这样可使一个大的用户程序在较小的内存中间中运行,也可在内存中同时装入更多的进程使它们并发执行
1.2 虚拟存储器的定义和特征
1. 虚拟存储器的定义
虚拟存储器指具有请求调入和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。逻辑容量有内外存容量之和决定,运行速度接近内存速度,每位成本接近外存。
2. 虚拟存储器的特征
- 多次性:一个作业允许被多次调入内存运行,是虚拟存储器最重要的特征
- 对换性:相对于常驻性而言
- 虚拟性:从逻辑上扩充内存容量,是用户所看到的内存容量远大于实际内存容量。改善内存利用率,提高程序执行并发速度。是实现虚拟存储器的最重要的目标
1.3 虚拟存储器的实现方法
1. 分页请求系统
- 硬件支持
- 请求分页的页表机制
- 缺页中断机构
- 地址变换机构
- 实现请求分页的软件
2. 请求分段系统
- 硬件支持
- 请求分段的段表机制
- 缺段中断机构
- 地址变换机构
- 软件支持
二、请求分页存储管理方式
2.1 请求分页中的硬件支持
1. 请求页表机制
- 状态位(存在位)P
- 访问字段 A
- 修改位 M
- 外存地址
2. 缺页中断机构
- 在指令执行期间产生和处理中断信号
- 一条指令在执行期间可能产生多次缺页中断
3. 地址变换机构
2.2 请求分页中的内存分配
1. 最小物理块数的确定
最小物理块数是指保证进程正常运行所需的最小物理块数
与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式
2. 内存分配策略
固定分配局部置换
固定分配:每个进程分配一组固定数目的物理块。进程运行期间不再改变
局部置换:发现缺页只能从分配给该进程的
个页面中选一页换出,再调入一页,以保证分配给该进程的内存空间不变 困难在于:确定每个进程分配多少个物理块难以确定
太少导致频繁缺页中断降低系统吞吐量;太多导致内存中驻留进程数减少,CPU 利用率下降,而且实现进程对换更耗时
可变分配全局置换
可变分配:先为每个进程分配一定数目的物理块,运行期间可适当增加或减少
全局置换:进程发生缺页后,将 OS 保留的空闲物理块取一块分配给该进程
最易于实现的一种物理块分配和置换策略
可变分配局部置换
当缺页时,只运行从该进程在内存的页面中选择一页换出,不会影响其他进程的运行。
若进程频繁缺页中断,则系统再为其分配若干附加的物理块;反之若缺页率特别地可适当减少分配的物理块数
3. 物理块分配算法
平均分配算法
未考虑到进程本身的大小,实际上的不公平
按比例分配算法
假设
个进程,每个页面数为 ,则系统中各进程页面总数为 假定物理块总数为 ,则每个进程分到的物理块数为 考虑优先权的分配算法。通常采取吧内存分为两部分,一部分按比例分配,另一部分根据优先权为晋城的优先权分配。重要的实时系统中完全按优先权分配物理块
2.3 页面调入策略
1. 何时调入页面
- 预调页策略
- 请求调页策略
2. 何处调入页面
- 系统拥有足够对换区空间:全部从对换区调入所需页面。为此,进程运行前将进程有关的文件从文件区拷贝到对换区
- 系统缺少足够对换区空间:不会被修改的文件直接从文件去调入。可能修改的文件将它们换出时需调到对换区
- UNIX 方式:与进程有关的文件都放在文件区,范式未运行过的页面都从文件去调入。调出的页面放在对换区
3. 页面调入过程
未修改过可以不写写会磁盘
对用户透明
4. 缺页率
访问页面成功的总数为
- 页面大小
- 进程分配物理块数目
- 页面置换算法
- 程序固有特性
三、页面置换算法
3.1 最佳置换算法和先进先出置换算法
1. 最佳置换算法
被淘汰页是以后永不访问,或最长内不再被访问的页面
2. 先进先出(FIFO)页面置换算法
总是淘汰最先进入内存的页面
3.2 最近最久未使用和最少使用置换算法
1. LRU 置换算法
选择最近最久未使用的页面淘汰
2. LRU 置换算法的硬件支持
寄存器
未记录某进程在内存中各页的使用情况,需为每个在内存中的页面配置一个移位寄存器,表示为
当进程访问某物理块时,将相应寄存器的 设为 ,定时信号每隔一段时间将寄存器右移一位。具有最小熟知的寄存器所对应的页面就是最近最久未使用的页面 栈
每当进程访问某页面时将该页面的页面号从栈中溢出并压入栈顶,栈底就是最近最久未使用的页面号
3. 最少使用(LFU)置换算法
设置一个寄存器记录被访问的频率
同样使用移位寄存器方式
3.3 Clock 置换算法
一种成本没有 LRU 高的 LRU 近似算法
1. 简单的 Clock置换算法
为每页设置一位访问位,再将内存中所有页面通过链接指针链接成一个循环队列
某页被访问时,该位设为
检查淘汰时,若为
又称为最近未用算法(NRU)
2. 改进型 Clock 算法
除了考虑页面的使用情况外,增加一个因素——置换代价,则访问位 A 和修改位 M 组合成一下四种页面
- A=0,M=0:最近既未被访问,有未被修改,最佳淘汰页
- A=0,M=1:最近未被访问,已被修改,不是很好的淘汰页
- A=1,M=0:最近已被访问,未被修改,可能再次被访问
- A=1,M=1:最近已被访问且已被修改,可能在北方文
执行过程可分为以下三步
- 寻找 A=0 且 M=0 的第一类页面,此时不改变访问位 A
- 如果第一步没找到,写拍照 A=0 且 M=1 的第二类页面,第二轮扫描设所有扫描过的页面的访问位为 0
- 第二步也是被,则所有访问位复 0,重复第一步,若仍失败则重复第二步,此时一定能找到被淘汰的页
减少了磁盘的 I/O 次数,但实现算法本身的开销有所增加
3.4 页面缓冲算法(PBA)
1. 影响页面换进换出效率的若干因素
- 页面置换算法
- 写回磁盘的频率
- 读入内存的频率
2. 页面缓冲算法 PBA
- 显著降低页面换进换出的频率,减少磁盘 I/O 次数,减少页面换入换出开销
- 减少了上述的开销,才能采用一种较为简单的置换策略如 FIFO 算法。不许特殊硬件支持,实现简单
3.5 访问内存的有效时间
被访问页在内存中,页表项在快表中
被访问页在内存中,页表项不在快表中
被访问页不在内存中
设缺页中断处理时间为
令命中率为
四、“抖动”与工作集
4.1 多道程序度与“抖动“
1. 多道程序度与处理机的利用率
在系统中运行更多的进程,即增加多道程序度,以提高处理机利用率
处理机利用率是一个单峰函数
2. 产生抖动的原因
同时在系统中运行的程序太多,分配给每一个进程的物理块太少,频繁缺页,对磁盘的有效访问增加,每个进程的大部分时间都用于页面的换入换出,不能做什么有效的工作,从而导致处理机的利用率急剧下降并趋于
称此时的进程处于“抖动”状态
4.2 工作集
1. 工作集的基本概念
程序在运行时间,对页面的访问是不均匀的,在一段时间内仅局限于较少的页面,另一短时间内又局限于另一些较少的页面。这些页面称为活跃页面
2. 工作集的定义
工作集,是在某段时间间隔
工作集是窗口尺寸
4.3 “抖动”的预防方法
1. 采用局部置换策略
简单易行,效果不是很好
2. 工作集算法融入处理机调度
调度前检查是否每个进程驻留页面够多,够则调入新作业,否则给缺页率高的进程增加物理块
3. 利用“L=S”准则调节缺页率
4. 选择暂停的进程
多道程序度偏高时,应基于某种原则暂停某些当前活动的进程,调出到磁盘上
五、请求分段存储管理方式
5.1 请求分段中的硬件支持
1. 请求段表机制
2. 缺段中断机构
3. 地址变换机构
5.2 分段的共享和保护
1. 共享段表
- 共享进程计数:某进程不再需要而释放时,检查 count 是否为
,为 才回收该内存区 - 存取控制字段:存取权限,如文件主允许读写,其他进程允许读或只运行执行
- 段号:同一个共享段在不同进程可以由不同的段号,每个进程可以用自己进程的段号访问它
2. 共享段的分配与回收
共享段的分配
第一个请求使用该共享段的进程,有系统分配物理区,调入该区,始址填入请求进程段表的相应项
在共享段表中增加一项,count 置为
其他的进程需要调用共享段时只需段表填写共享段的物理地址,count+=1
共享段的回收
撤销进程段表的表项,count-=1。若 count 为零则回收,否则只是取消调用者进程在共享段表的记录
3. 分段保护
越界检查
存取控制检查
- 只读
- 只执行
- 读/写
环保护机构:底编号的环有高优先级。OS 核心位于
号环内;某些重要的应用程序和操作系统服务占据中间环;一般的应用程序占据外环 程序可以访问相同/外环中的数据,调用相同/内环中的服务