虚拟存储器
引入与回顾
常规存储管理方式的特征:一次性、驻留性
导致结果:作业大的无法运行。程序中不用的或暂时不用的程序数据占据大量空间。仅有少数作业能够运行
6.1虚拟存储技术概述
- 局部性原理:指程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址。分别局限于一定区域。
时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短的时期内
空间局部性:当前指令和附件的几条指令,当前访问的数据和邻近的数据都集中在一个较小区域内。
局部性原理的具体体现:
-
程序在执行时,大部分是顺序执行的指令,少部分是转移和过程调用指令
-
过程调用使程序的执行由一部份区域转到另一部分区域。过程调用的嵌套深度一般不超过5,因此执行的范围不超过这组嵌套的过程。
-
程序中存在相当多的循环结构,他们由少量指令组成,而被多次执行。
-
程序中存在很多对一定数据结构的曹祖,如数组操作,但往往局限在叫小范围内
2. 虚拟存储的基本原理 -
在程序装入时,不必将其全部读入到内存,而只需要将当前执行需要的部分页或段读入到内存就可让程序开始执行
-
在程序执行过程中,如果需要执行的指令或访问的数据未在内存(称为缺页或却段),则由处理器通知os将相应的页或段调入到内存。然后继续执行程序
-
另一方面,操作系统将内存中暂时不使用的页或段调出保存在外存上,从而腾出空间存放将要装入的程序以及将要调入的页或段。
虚拟存储器的定义:具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存容量和外存容量之和决定,其运行速度接近于内存速度
- 虚拟存储器的特征(超级重点!!!!!!!!!)
特征 | 说明 |
---|---|
多次性 | 一个作业允许分成多次调入内存,是虚拟存储器最重要的特征,是其他任何存储管理方式所不具有的(不连续性) |
对换性 | 暂时不用的代码和数据调至外存,需要时再将它们从外存调入内存;对换技术(部分对换) |
虚拟性 | 从逻辑上扩充内存容量,是用户看到的内存容量大于实际的内存容量,是虚拟器的最重要的目标(大空间) |
这些扩充内存的技术都是以CPU时间和外存空间换取昂贵的内存空间,这是操作系统中的资源转换的技术。
虚拟性是以多次性和对换性为基础的,多次性和对换性是以离散分配为基础
- 虚拟存储器的实现方法
虚拟存储器的实现建立在离散管理的基础之上
请求分页系统
- 在分页系统的基础上增加请求调页功能和置换页面功能所形成的页式虚拟存储器系统,置换时以页面为单位
- 硬件支持:请求分页的页表机制、缺页中断机构、地址变换机构
- 软件支持
请求分段系统
- 在分段系统的基础上增加请求调段功能和分段置换功能所形成的段式虚拟存储器系统
- 请求分段的段表机制、缺段中断机构、地址变换机构
- 软件支持
- 引入虚拟存储技术的好处
好处 | 说明 |
---|---|
大程序 | 可在较小的可用内存中执行较大的用户程序 |
大的用户空间 | 提供给用户可用的虚拟内存空间通常大于物理内存 |
并发 | 可在内存中容纳更多程序并发执行 |
易于开发 | 不会影响编程时的程序结构 |
6.2请求分页存储管理方式
6.2.1请求分页中的硬件支持
基本思想:
- 请求分页建立在基本分页的基础之上,增加了请求调页和页面置换功能
- 每次调入调出的基本单位都是长度固定的页面
- 在进程开始运行之前,不是装入全部页面,而是装入几个或零个页,之后根据进程运行的需要,动态装入其他页
- 当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页,以便装入新的页
- 请求页表机制(!!!!很重要!)
请求页表作用:将用户地址空间中的逻辑地址映射为内存空间的物理地址
表项 | 描述 |
---|---|
状态位P | 存在位,仅有一位。用来表示该页是否已经装入内存 |
访问字段A | 记录此页在一段时间被访问的次数,可用来淘汰那页(由不同的算法决定) |
修改位M | 标识此页是否在被调入内存后被修改过,保证内存中所保留的副本始终是最新的,供页面置换时参考 |
外存地址 | 该页在外存上的位置,通常是物理块号 |
- 缺页中断处理过程
程序在执行时,首先检查页表,当状态位指示该页不在主存时,则引起一个缺页中断发送,其中断执行过程与一般中断相同:
- 保护现场(CPU环境)
- 中断处理(中断处理程序装入页面)
- 恢复现场,返回断点继续执行
缺页中断同一般中断的区别???
相同点:都是中断,需要保护现场、中断处理、恢复现场
不同点:一般中断时一条指令完成后中断,缺页中断是一条指令执行时中断,一条指令执行时可能产生多个缺页中断。如指令可能访问多个内存地址,这些地址在不同的页中
3. 地址变换过程
- 在地址映射过程中,在页表中发现所要访问的页不在内存,则产生缺页中断
- 操作系统接收到此中断信号后,就调出缺页中断处理程序,根据页表中给出的外存地址,准备将页调入内存
- 此时应该将缺页的进程挂起
- 如果内存中有空闲块,则分配一个块,将要调入的页装入该块,并修改页表中相应页表项的状态位以及相应的内存块号
- 在此时内存块没有空闲块,则要淘汰某页(若被淘汰页在内存期间被修改过,则要将其写回外存)
请求分页中的内存分配
- 最小物理块的确定:能保障进程正常运行所需的最小物理块数。进程应获得的最小物理块数,与硬件结构有关,取决于指令的格式、功能和寻址方式
- 内存分配策略:固定分配策略和可变分配策略 全局置换策略和局部置换策略
物理块的分配策略:固定分配+局部置换:为每个进程分配一组固定数目的物理块,在运行期间不变。缺页时只能从本进程的n个物理块中选择一个用于换出再调入一页,保障分配给该进程的内存空间不变。困难的地方在于很难确定为每个进程分配多少个物理块
可变分配+全局置换:先为每个进程分配一定数目的物理块,os也保持一个空闲物理块队列,当进程缺页时,由系统从空闲物理块队列中取一个分配给该进程
当系统空闲物理块队列用完,OS从内存块中按某算法选出一页调出,可能任一进程中的页。最容易实现,但会影响其他页
可变分配+局部置换:为每个进程分配一定的物理块,当缺页时,只允许从该进程在内存的页面选一页调出。如进程在运行中频繁发生缺页中断,则系统会为该进程分配若干附加的物理块,直至缺页率减少到适当程度
物理块的分配算法:通常方式是把内存中可供分配的物理块分为两部分:一部分按照比例分配给各进程;另一部分按照优先权分配,为高优先权适当增加相应份额。
调入策略
何时调入页面?调入策略确定在外存中页面调入的时机。在页式虚拟邨管理中有两种常用策略
- 请求调页:只调入发生缺页时所需的页面,请求调入的页面一定会被访问,这种策略每次仅调入一页。优点容易实现,缺点对外存I/O次数多
- 预调页:以预测为基础的预调页策略,将那些预计在不久以后便会被访问的页面预先调入内存。在发生缺页需要调入某页时,一次调入该页以及相关的几个页。优点:提高了调页的I/O效率。缺点:基于预测,若调入的页在以后很少被访问,则效率低,预调的成功率仅有50%
何时调入页面?有足够的交换区;进程装入时,将其全部页面复制到交换区,以后总是从交换区调入 缺少足够的对换区:凡是不会被修改的页面,都直接从文件区读入,而被置换时不需调出。会被修改的页面,被置换时需调出交换区,以后从交换区调入,节省交换区空间。
页面调入过程
- 所要访问的页面不在内存,向CPU发出缺页中断
- 中断程序保留CPU环境分析中断原因转入中断处理程序
- 中断处理程序查找页表得到该页的外存物理块
- 整个页面调入过程对用户是透明的
缺页率受以下几个因素影响!!!!!!!!!!!!!!
- 页面大小
- 进程所需物理块数
- 页面置换算法
- 程序固有特性
页面置换算法
功能:需要调入页面时,选择内存中那个物理页面被置换
目标:把未来不再使用的或短期内较少使用的页面调出,通常只能在局部性原理指导下依据过去的统计数据进行预测
最佳页面算法(OPT)
FIFO
置换原理:选择建立最早的页面被置换(选择在内存中驻留时间最久的页面予以淘汰)可以通过链表来表示各页的建立时间先后
特点:性能较差,较早调入的页往往是进程被访问的页,这些页在FIFO算法被反复调入和调出产生异常现象
Belady:当分配给进程的物理块数增加时,缺页次数反而增加
原因:FIFO算法的置换特征与进程访问的动态特征是矛盾的,即被置换的页面并不是进程不会访问的
最近最久未使用置换算法
置换原理:选择最后一次访问的时间举例当前最长的一页并淘汰。
特点:局部性原理的合理近似,性能接近最佳置换,实现代价很高
影响缺页次数的因素:
- 页面置换算法
- 分配给进程的物理块数
- 页本身的大小
- 程序的编制方法
LRU的实现方法—硬件方法
- 寄存器:为每个在内存中的页面配置一个移位寄存器,
- 栈
抖动
不适当的提高多道程序度,不仅不会提高系统吞吐量,反而会出现”抖动“现象,就是刚换出页很快要被访问,需重新调入。因此再调入前要先选一页调出,而这个刚被换出的页,很快又要被访问,又要将它调入。如此频繁的更换页面,以至于一个进程在运行时,把大部分时间花费在页面置换的工作上,我们称该进程发生了抖动
抖动产生的原因
- 调度程序一旦发现CPU的利用率降低,就立即提高多道程序度,引入新的进程参加运行,以提高CPU的利用率
- 当新进程进入内存时,由于空闲物理块队列中的物理块都用完了,只能从其他运行进程出去获得物理块,于是又将进一步加剧了另外一些进程的缺页情况,又使等待页面调入/调出的进程数目增多。这又降低了CPU的利用率
- 那么为了提高CPU的利用率,调度程序又去引入新的进程,那么产生了恶性循环,使缺页率急剧上升。这时候,运行进程的大部分时间都用于页面的换入/换出,几乎不能完成任何有效的工作,我们称这时的进程是处于”抖动“状态
抖动的预防
- 选择合适的页面置换算法
- 分配给进程合适的物理页面数
- 调整多道程序度
请求分段存储管理方式