(一)定义
虚拟存储器是为了扩大主存容量而采用的设计方法,具有请求调入功能和置换功能,能仅把作业一部分装入主存便可运行,能从逻辑上对主存容量进行扩充。
逻辑容量由主存和外存容量之和及CPU可寻址范围来决定,其运行速度接近于主存速度,成本较低。是一种性能非常优越的广泛应用的存储器管理技术。
(二)程序局部性原理
程序在执行时呈现出局部性规律,即在一段时间内,程序执行仅局限于某个部分。相应地,它所访问的存储空间也局限于某个区域内。
分类 | 说明 | 原因 | |
1 | 时间局限性 | 如果程序某指令(存储单元)一旦执行,则不久的将来该指令(存储单元)可能再次被执行(访问); | 序中存在大量循环操作 |
2 | 空间局限性 | 如果程序访问了某个存储单元,则在不久的将来,其附近存储单元也最有可能被访问。 即程序在一段时间内所访问的地址可能集中在一定范围内 | 程序是顺序执行的 |
(二)虚拟存储器实现
在对应系统上增加了请求调页功能和页面置换功能。
实现方式 | 基础 | 说明 | 置换 | |
1 | 请求分页系统 | 页式虚拟存储系统 | 允许只装入若干页用户程序和数据(非全部)就可以启动运行,以后再通过调页功能和页面置换功能陆续把将要使用的页面调入主存,把暂不运行的页面置换到外存上。 | 以页面为单位 |
2 | 请求分段系统 | 段式虚拟存储系统 | 允许只装入若干段用户程序和数据就可以启动运行,以后再通过调段功能和置换功能将不运行的段调出,同时调入将要运行的段。 | 以段为单位 |
3 | 请求段页式系统 | 段页式虚拟存储系统 |
(三)缺页中断对比一般中断
中断 | 处理中断信号时机 | 返回执行情况 | 发生频率 | |
1 | 缺页中断 | 在指令执行期间 | 回到被中断指令的开始重新执行该指令 | 一条指令在执行期间可能多次产生 |
2 | 一般中断 | 在一条指令执行完,下一条指令开始执行前 | 返回到下一条指令执行 |
(五)页面置换算法
(1)系统抖动(thrashing 颠簸):不适当的算法导致刚被换出的页很快又被访问,需重新调入,导致系统频繁更换页面,以至于一个进程在运行中大部分时间都在置换页面。
(2)Belady现象:如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多,但缺页率反而提高的异常现象。
(3)置换算法
算法 | 说明 | 优缺点 | |
1 | 最佳(Optimal)置换算法 | 选择那些永不使用的,或者是在最长时间内不再被访问的页面置换出去 | 理想化,性能最好,但实际上难于实现。 |
2 | 先进先出(FIFO)置换算法 | 淘汰最先进入主存的页面,即选择在主存中驻留时间最久的页面予以淘汰。 | 实现简单,性能最差 |
3 | 最近最少使用(Least Recently Used, LRU)置换算法 | 淘汰最近最少使用的页面,系统在每个页面设置1个访问字段(记录自上次被访问以来所经历时间),选择时间最大的页面淘汰 | 实现时需要硬件支持(寄存器或栈) |
4 | 最近未用(Not Used Recently, NUR)置换算法 | 将最近一段时间未引用过的页面换出。为每个页面设置1位访问位。将主存中所有页面都通过链接指针链成一个循环队列。当某页被访问时置1。淘汰时检查,如果是0则换出;若为1则重置为0,暂不换出,循环检查下一个页面,直到访问位为0的页面为止。 | 近似LRU算法 |
(六)工作集
(1)出现背景
为了最大程度避免 “颠簸"(抖动)现象,1968年Denning提出了工作集理论。
(2)定义
在某段时间间隔△里进程实际要访问的页面集合。
(3)原理
程序运行时对页面访问不均匀,如果能够预知程序在某段时间间隔内要访问哪些页面,提前调入主存,将会大大降低缺页率,减少置换工作,提高CPU利用率。
把某进程在时间t的工作集记为w(t,△),变量△称为工作集“窗口尺寸(Windows Size)”。正确选择工作集窗口△的大小,对存储器的有效利用和系统吞吐量的提高都将产生重大影响。