10 虚拟存储器
- 常规存储管理方式的特征
- 一次性
- 驻留性
- 导致结果
- 作业大的无法运行;
- 程序中不用的或暂时不用的程序数据占据大量空间。
- 仅有少数作业能够运行。
10.1 覆盖技术与交换技术
在多道环境下扩充内存的方法,用以解决在较小的存储空间中运行较大程序时遇到的矛盾。
- 覆盖技术主要用在早期的操作系统中;
- 交换技术被广泛用于小型分时系统中,交换技术的发展导致了虚存技术的出现。
交换技术与覆盖技术共同点:
- 进程的程序和数据主要放在外存,当前需要执行的部分放在内存,内外存之间进行信息交换。
10.1.1 覆盖技术
- 覆盖:一个程序的若干程序段,或几个程序的某些部分共享某一个存储空间。
- 把程序划分为若干个功能上相对独立的程序段,按照其自身的逻辑结构将那些不会同时执行的程序段共享同一块内存区域。
- 程序段先保存在磁盘上,当有关程序段的前一部分执行结束,把后续程序段调入内存,覆盖前面的程序段(内存“扩大”了)。
- 一般要求程序各模块之间有明确的调用结构,程序员要向系统指明覆盖结构,然后由操作系统完成自动覆盖。
缺点:
对用户不透明,增加了用户负担。
应用:
目前这一技术用于小型系统中的系统程序的内存管理上,MS-DOS的启动过程中,多次使用覆盖技术;启动之后,用户程序区TPA的高端部分与COMMAND.COM暂驻模块也是一种覆盖结构。
10.1.2 交换技术
- 当内存空间紧张时,系统将内存中某些进程暂时移到外存,把外存中某些进程换进内存,占据前者所占用的区域;
- 这种技术是进程在内存与外存之间的动态调度
- 多用于分时系统中
1、选择原则
即:将哪个进程换出内存?
- 例子:分时系统,时间片轮转法或基于优先数的调度算法,在选择换出进程时,换出要长时间等待的进程。
2、交换时机的确定
- 只要不用就换出(或很少再用);
- 只在内存空间不够或有不够的危险时换出;
3、交换时需要做哪些工作?
- 需要一个磁盘交换区:
- 必须足够大以存放用户程序的内存映像的拷贝;
- 必须对这些内存映像直接存取。
- 换出和换入过程
- 选择换出进程,将其程序和数据传送到交换区,回收其内存空间,修改该PCB。
- 定时查看交换区的进程,找出换出时间最长的进程作为换入进程,进行换入。
4、换入回内存时位置的确定
- 受地址映射技术的影响,即绝对地址产生时机的限制。
分析
- 与覆盖技术相比,交换技术不要求用户给出程序段之间的逻辑覆盖结构;
- 交换主要发生在进程或作业之间,而覆盖主要发生在同一进程或作业内。
- 覆盖只能覆盖那些与覆盖段无关的程序段。
10.2 虚拟存储技术
10.2.1 虚拟存储的引入
- 程序的执行具有以下特点:
- 程序在执行时,大部分是顺序执行的指令,少部分是转移和过程调用指令。
- 过程调用的嵌套深度一般不超过5,因此执行的范围不超过这组嵌套的过程。
- 程序中存在相当多的循环结构,它们由少量指令组成,而被多次执行。
- 程序中存在相当多对一定数据结构的操作,如数组操作,往往局限在较小范围内。
- 局部性原理(principle of locality):指程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域。
- 时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内;
- 空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的数据都集中在一个较小区域内。
10.2.2 虚拟存储的基本思想
虚拟存储器的定义
具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
- 部分装入:在程序装入时,不必将其全部读入到内存,而只需将当前执行需要的部分页或段读入到内存,就可让程序开始执行。
- 请求调入:在程序执行过程中,如果需执行的指令或访问的数据尚未在内存(称为缺页或缺段),则程序利用OS提供的请求调页或调段功能,将相应的页或段调入到内存,然后继续执行程序。
- 置换功能:另一方面,操作系统将内存中暂时不使用的页或段调出保存在外存上,从而腾出空间存放将要装入的程序以及将要调入的页或段。
10.2.3 虚拟存储的实现方法
- 虚拟存储的实现都是基于离散分配的存储管理方式建立的。
- 请求分页系统
- 在分页系统的基础上增加请求调页功能和置换功能所形成的页式虚拟存储器系统。
- 硬件支持:请求分页的页表机制、缺页中断机构、地址变换机构。
- 软件支持:调入和分配策略、置换算法
- 请求分段系统
- 在分段系统的基础上增加请求调段功能和分段置换功能所形成的段式虚拟存储器系统。
- 硬件支持:请求分段的段表机制、缺段中断机构、地址变换机构
- 软件支持
10.2.4 虚拟存储器的特征
- 多次性
- 对换性
- 虚拟性
这些扩充内存的技术都是以CPU时间和外存空间换取昂贵内存空间,这是操作系统中的资源转换技术。
- 不连续性:物理内存分配的不连续,虚拟地址空间使用的不连续(数据段和栈段之间的空闲空间,共享段和动态链接库占用的空间)
- 部分交换:与交换技术相比较,虚拟存储的调入和调出是对部分虚拟地址空间进行的;
- 大空间:通过物理内存和快速外存相结合,提供大范围的虚拟地址空间
- 总容量不超过物理内存和外存交换区容量之和。
10.3 请求分页存储管理方式
10.3.1 基本思想
1.在进程开始运行之前,不是装入全部页面,而是装入几个或零个页面,之后根据进程运行的需要,动态装入其它页面;
2.当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。
10.3.2 页表机制
- 状态位:表示该页是否装入内存;
- 访问位:此页在一段时间被访问的次数,可用来决定淘汰哪页(由不同的算法决定);
- 修改位:查看此页是否在内存中被修改过;
- 外存地址:该页在外存上的位置。
10.3.3 缺页中断(Page Fault)处理
- 在地址映射过程中,在页表中发现所要访问的页不在内存,则产生缺页中断。
- 操作系统接到此中断信号后,就调出缺页中断处理程序,根据页表中给出的外存地址,准备将该页调入内存。
- 此时应将缺页的进程挂起(调页完成唤醒)
- 如果内存中有空闲块,则分配一个块,将要调入的页装入该块,并修改页表中相应页表项的状态位及相应的内存块号;
- 若此时内存中没有空闲块,则要淘汰某页(若被淘汰页在内存期间被修改过,则要将其写回外存)。
缺页中断与普通中断的异同点
相同点:
- 保护现场
- 中断处理
- 恢复现场
不同点:
- 一般中断是一条指令完成后中断,缺页中断是一条指令执行期间中断;
- 一条指令执行时可能产生多个缺页中断。如指令可能访问多个内存地址,这些地址在不同的页中。
基于以上特征,请求分页系统中的硬件机构应能保存多次中断时的状态,并保证最后能返回中断前产生缺页中断的指令处,继续执行。
10.3.4 地址变换机构
10.3.5 调入策略
调入策略确定在外存中页面的调入时机。在页式虚拟管理中有两种常用策略。
- 请求调页(demand paging):只调入发生 缺页时所需的页面。
- 优点:容易实现。
- 缺点:对外存I/O次数多,开销较大
- 预调页(prepaging):在发生缺页需要调 入某页时, 一次调入该页以及相邻的几个页。
- 优点:提高调页的I/O效率。
- 缺点:基于预测,若调入的页在以后很少被访问,则效率低。常用于程序装入时的调页。
10.3.6 调入页面来源
- 进程装入时,将其全部页面复制到交换区,以后总是从交换区调入。
- 执行时调入速度快。
- 要求交换区空间较大。
- 凡是不会被修改的页面,都直接从文件区读入,而被置换时不需调出;可能会被修改的页面,被置换时需调出到交换区,以后从交换区调入。节省交换区空间。
- 可能引发问题。如:装入可执行文件a从而创建进程P,如果在P执行时,改写了可执行文件a(如重新编译和链接),而此后P发生缺页需要从a中调入页面,则可能会因为各个页面内容无法配合而出错(如Bus Error或 Segmentation Fault)
10.3.7 分配策略
- 最小物理块的确定
- 最小物理块:能保证进程正常运行所需的最小物理块数。
- 常驻集resident set:页式虚存管理中给进程分配的物理块数目。
- 取决于指令的格式、功能和寻址方式。
- 物理块的分配策略
- 固定分配+局部置换
- 为每个进程分配固定数目的物理块,在运行期间不变;
- 缺页时只能从本进程的物理块中选择一个用于换出;
- 很难确定为每个进程分配多少个物理块。
- 可变分配+全局置换
- 先为每个进程分配一定数目的物理块,OS也保持一个空闲物理块队列,当进程缺页时,由系统从空闲物理块队列中取一个分配给该进程。
- 当系统空闲物理块队列用完,OS从内存中按某算法选出一页调出,可能任一进程中的页。
- 最易实现,但会影响到其他页。
- 可变分配+局部置换
- 为每个进程分配一定数目的物理块,当缺页时,只允许从该进程在内存的页面选一页调出。
- 如进程在运行中频繁发生缺页中断,则系统会为该进程分配若干附加的物理块,直至缺页率减少到适当程度。
- 固定分配+局部置换
- 物理块的分配算法(初始分配)
- 平均分配
所有可供分配的物理块平均分配给各进程。 - 按比例分配
根据进程的大小按比例分配物理块。
- 考虑优先权分配
为紧急作业分配较多的物理块。
- 平均分配