第五章 虚拟存储管理

1.虚拟存储器的定义

所谓“虚拟存储器”,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。

虚拟存储管理下

内存逻辑容量由内存容量和外存容量之和所决定

运行速度接近于内存速度

每位的成本却接近于外存。

2.虚拟存储器的实现

虚拟存储管理:

允许将一个作业分多次调入内存。

u若采用连续分配方式,需申请足够空间,再分多次装入,造成内存资源浪费,并不能从逻辑上扩大内存容量。

u虚拟的实现建立在离散分配存储管理基础上

方式:请求分页/请求分段系统

细节:分页/段机构、中断机构、地址变换机构、软件支持

3.虚拟存储器的特征

离散分配方式是基础

n多次性:一个作业被分成多次调入内存运行

n对换性:允许在作业的运行过程中进行换进、换出。(进程整体对换不算虚拟)

n最终体现虚拟性:能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。

请求分页存储管理方式

u基本分页 + “请求调页”和“页面置换”功能。

u换入和换出基本单位都是长度固定的页面

1)硬件支持

   一台具有一定容量的内/外存的计算机

+ 页表机制

+ 缺页中断机构

+ 地址转换机构

②缺页中断机构

每当要访问的页面不在内存时,便产生一缺页中断通知OS,OS则将所缺之页调入内存。作为中断,需经历几个步骤:

a)“保护CPU环境”

b)“分析中断原因”

c)“转入缺页中断处理程序”

d)“恢复CPU环境”等。

作为一种特殊中断,与一般中断有明显区别:

(1)

在指令执行期间产生和处理中断信号。

(2)

一条指令在执行期间,可能产生多次缺页中断。



2)内存分配

   作业不一次装入,部分装入的情况下如何为进程分配内存,涉及三个问题:

①最小物理块数的确定

少于此数量进程将不能运行

与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式

②物理块的分配策略

③物理块的分配算法

②物理块的分配策略

考虑:固定OR可变分配、全局OR局部置换。

组合出三种适合的策略。

u固定分配、局部置换

为每个进程分配一定数目的物理块,在整个运行期间不再改变(基于进程的类型,或根据程序员、程序管理员的建议)

运行中缺页时,只能从该进程内存中n个页面中选出一页换出,然后再调入一页。

  困难:难以把握为每个进程分配“适量”物理块数

u可变分配、全局置换

先为每个进程分配一定数目的物理块

OS管理一个空闲物理块队列,发生缺页时,系统从队列中取出一块分配给该进程,将欲调入的页装入(动态增长型,全局空闲空间都可分配使用)

空闲空间不足时,可与其他任何进程页面置换。“会使其他进程缺页率提高,影响运行”

最易实现

③物理块的分配算法


u考虑优先权的分配算法

     实际应用中,要照顾重要、急迫的作业尽快完成,为它分配较多的内存空间。

所有可用物理块分两部分:

 一部分按比例分配给各进程;

另一部分根据各进程优先权,适当地为其增加份额,分配给各进程。

3)调页策略

何时调入页面

1.预调页策略

以预测为基础,将预计不久后便会被访问的若干页面,预先调入内存。

优点:一次调入若干页,效率较好

缺点:预测不一定准确,预调入的页面可能根本不被执行到。主要用于进程的首次调入,由程序员指出应该先调入哪些页。

2.请求调页策略

运行中需要的页面不在内存,便立即提出请求,由OS将其调入内存。

优点:由请求调页策略所确定调入的页,一定会被访问;比较容易实现。

缺点:每次仅调入一页,需花费较大的系统开销,增加了磁盘I/O的启动频率。

进程运行过程中,访问的页面不在内存,调入时内存已无空闲空间,需要将内存中的一页程序或数据调到外存。

3.页面置换算法

页面置换算法(pagereplacement algorithms):选择换出哪些页面的算法,其好坏直接影响系统的性能。

应具有较低的缺页率:

页面调入次数(缺页次数)/总的页面使用次数

1)最佳(Optimal)置换算法

Belady,1966年提出的一种理论上的算法

换出以后永不再用的,或在最长(未来)时间内不再被访问的页面。

优点:保证获得最低的缺页率

不足:无法实现,因为无法预知一进程将来的运行情况

作用:作为参照标准,评价其他算法。

2)先进先出置换算法(FIFO)

先进入的先淘汰,即选择内存中驻留时间最久的页面予以淘汰。

优点:实现简单,把一进程已调入内存的页面按先后次序组织成一个队列,并设置一个指针(替换指针),使它总是指向队首最老的页面。

不足:与进程实际运行规律不相适应(较早调入的页往往是经常被访问的页,频繁被对换造成运行性能降低)

Belady现象:出现分配的页面数增多,缺页率反而提高的异常现象。

描述:一个进程P要访问M个页,OS分配N个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(S,N)。当N增大时,PE(S, N)时而增大,时而减小。

Belady现象的原因:FIFO算法的置换特征与进程访问内存的动态特征矛盾,即被置换的页面并不是进程不会访问的。

3)最近最久未使用(LRU)置换算法

无法预测将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法选择最近最久未使用(least recently used)的页面予以淘汰

①寄存器记录时间的原理

一进程有8个页面,每个页面需配备一个8位的(移位)寄存器。

移位寄存器表示为

            R=Rn-1Rn-2Rn-3…R2R1R0

页面被访问后的操作:

将该页对应的寄存器的Rn-1位置为1

如何记时:

由系统发出定时信号,每隔一定时间将所有寄存器右移1位。

某一时刻,比较各寄存器的值,被用到的标志1逐渐往低位上积累,若高位上没有1,就说明最近没用过。所以最近最久未使用的就是寄存器值最小的那个页。

4)轮转算法(clock)又称最近未使用算法(NRU, Not Recently Used),

LRU(最近最久未使用算法)近似算法

折衷FIFO

每个页设一个使用标志位(use bit),若该页被访问则将其置为1。

设置一个指针,从当前指针位置开始按地址先后检查各页,寻找use bit=0的页面作为被置换页。

若指针经过的页use bit=1,修改use bit=0(暂不凋出,给被用过的页面驻留的机会 ),指针继续向下。到所有页面末尾后再返回队首检查。

5)其他置换算法

最少使用 (LFU, Least Frequently Used)

关键在次数记录上

每页设置访问计数器,每当页面被访问时,该页面的访问计数器加1;缺页中断时,淘汰计数值最小的页面,并将所有计数清零;

计数的实现类似LRU,用移位寄存器,但比较时不是简单比较寄存器的值,而是比较寄存器每位的和∑Ri。

页面缓冲算法PBA(page buffering algorithm)

对FIFO算法的发展,弥补了FIFO可能造成的I/O开销,又不需要LRU等算法的硬件支持。

仍用FIFO算法选择被置换页

但并不将其马上换入外存。

系统将页面放入两个链表之一:如果页面未被修改,就将其归入到空闲页面链表的末尾;否则将其归入到已修改页面链表。

需要调入新的物理页面时,将新页面内容读入到空闲页面链表的第一项所指的页面,然后将第一项删除(从空闲链表摘下)。

空闲页面和已修改页面,仍停留在内存中一段时间,如果这些页面被再次访问,只需较小开销,而被访问的页面可以返还作为进程的内存页。

当已修改页面达到一定数目后,再将它们一起调出到外存,然后将它们归入空闲页面链表,这样能大大减少I/O操作的次数。

你可能感兴趣的:(第五章 虚拟存储管理)