您的位置:首页 > 其它

[OS复习]虚拟存储管理技术2

2016-08-14 22:28 211 查看

1.虚拟存储系统的软件策略

现代操作系统几乎都采用虚拟存储管理系统。一些特殊的操作系统和一些较老的操作系统没有采用虚拟存储技术。例如,MS DOS和早期的UNIX操作系统等。大多采用分段与分页相结合的段页式管理系统。下面以分页存储管理为例,介绍虚拟存储系统采用的软件策略。主要从以下几个方面进行分析:

驻留集管理(Resident Set Management)

放置策略(Placement Policy)

获取策略(Fetch Policy)

置换策略(Replacement Policy)

清除策略(Cleaning Policy)

负载控制(Load Control)

2.驻留集的管理

进程的驻留集指:虚拟存储系统中,每个进程驻留在内存的页面集合,或进程分到的物理页框集合。驻留集管理主要解决的问题是,系统应当为每个活跃进程分配多少个页框。

2.1影响页框分配的主要因素

分配给每个活跃进程的页框数越少,同时驻留内存的活跃进程数就越多,进程调度程序能调度就绪进程的概率就越大。然而,这将导致进程发生缺页中断的概率较大;为进程分配过多的页框,并不能显著地降低其缺页中断率。

2.2基本的驻留集管理策略 

固定分配策略:

为每个进程分配固定数量的页框。即每个活跃进程的驻留集尺寸在运行期间固定不变。为进程分配多少个页框是合理的呢?可以由系统根据进程的类型确定,也可以由编程人员或系统管理员指定。

可变分配策略:

为每个活跃进程分配的页框数在进程的生命周期内是可变的。即系统可以首先给进程分配一定数量的页框。进程运行期间,可以增加或减少页框。系统可以根据进程的缺页率调整进程的驻留集。当进程的缺页率很高时,驻留集太小,需要增加页框;当缺页率一段时间内都保持很低时,可以在不会明显增加进程缺页率的前提下,回收其一部分页框,减小进程的驻留集。

两种策略的评价:
可变分配策略比固定分配策略更灵活,既可以提高系统的吞吐量,又能保证内存的有效利用。可变分配要求统计进程的缺页率,增加系统额外开销。而准确判断进程缺页率的高低,确定缺页率的阈值是非常困难的。可变分配策略不仅需要操作系统软件专门的支持,而且,还需要处理机平台提供的硬件支持。

2.3页面放置策略

解决的问题:系统应当在内存的什么位置为活跃进程分配页框?一般地,对于一个分页系统或段页式系统,将进程的一个页面装入哪一个页框无关紧要。对于分段系统,需要考虑将一个程序段装入哪一个合适的分区中,可采用的分配算法包括首次适应法、下次适应法、最佳适应法或最差适应法等。

2.4页面获取策略

解决的问题:系统应当在何时把一个页面装入内存?

请求调页:

仅当进程执行过程中,通过检查页表发现相应页面不在内存时,才装入该页面。当进程刚开始执行时,由于预先未装入进程的页面,故需要频繁地申请装入页面。执行一段时间以后,进程的缺页率将下降。采用请求调页方式,一次装入请求的一个页面,磁盘I/O的启动频率较高,系统的开销较大。

预调页方式:

当进程创建时,预先为进程装入多个页面。缺页中断时,系统为进程装入指定的页面以及与之相临的多个页面。若局部性很差,预先装入的很多页面不会很快被引用,并会占用大量的内存空间,反而降低系统的效率。

2.5页面置换策略 

当发生缺页中断且无足够的内存空间时,需要置换已有的某些(个)页面。应该解决的基本问题:1.当系统欲把一个页面装入内存时,应当在什么范围内判断已经没有空闲页框供分配?2.当指定的范围内没有空闲页框时,应当从指定的范围内选择哪个页面移出内存?可以采用局部置换或全局置换策略。
局部置换:
系统在进程自身的驻留集中判断当前是否存在空闲页框,并在其中进行置换。

全局置换策略:

在整个内存空间内判断有无空闲页框,并允许从其它进程的驻留集中选择一个页面换出内存。

2.6分配模式与置换模式对比

固定分配策略-> 局部置换策略 

全局置换策略 -> 可变分配策略

可变分配策略+局部置换策略:即可增加或减少分配给每个活跃进程的页框数;当进程的页框全部用完,而需要装入一个新的页面时,系统将在该进程的当前驻留集中选择一个页面换出内存。  

3.页面置换算法

页面置换算法是指在指定的置换范围内,决定将哪一个页面换出内存。置换算法的好坏将直接影响系统的性能,不适当的置换算法可能导致系统出现“抖动”现象。常用的页面置换算法:最佳置换算法、最近最少使用算法、先进先出算法和时钟算法等

3.1最佳置换算法 (Optimal Algorithm,OPT) 

基本思想:被置换的页面是将来不再访问,或在最远的将来才被访问的页面。若采用固定分配策略,最佳置换算法可以保证系统的缺页率最低。但是,无法预知一个进程在内存的若干页面中,哪一个页面是将来不再访问的,甚至最长时间内将不再被访问的,因而该算法是无法实现的。该算法可以用于评价其它置换算法的性能。

示例:

假设系统分配给某进程3个页框,且进程开始运行时,这3个页框是空的。考虑下列页面号引用序列:2、3、2、1、5、2、4、5、3、2、5、2



据局部性原理,如果一个页面最近被访问过,那么,它将在不久的将来再次被访问。如果一个页面已经很长时间未被访问过,则在很久的将来,它将不会被访问。因此,可以根据页面的使用历史,判断其将来的行为。

3.2最近最少使用置换算法 (Least Recently Used Algorithm,LRU)

LRU根据页面装入内存以后的使用情况,选择淘汰最近最久未被使用的一个页面。该算法的性能接近OPT算法,但实现较困难。一种方法:为每一个页面增加一个访问字段,用以标注该页最后一次被访问的时间。需要选择淘汰页面时,比较置换范围内的所有页面的最后访问时间,选择访问时间最远的哪个页面。实现该方法的开销非常大,不易实现。

另一种方法:将访问页面组织在一个堆栈中,最近访问的页面位于栈顶,栈底的页面即是最久未被访问的。实践证明,该方法的实现仍然很困难,系统付出的代价也非常大。 



3.3先进先出置换算法 (First-in First-out Algorithm,FIFO)

淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。实现时,只需把一个进程已调入内存的页面按先后次序链接成一个队列,并设置一个指针,使它总是指向最老的页面。



该算法与进程实际的运行规律不相适应,进程中的某些程序代码或数据可能需要高频使用,该算法将导致这种类型的页面被反复地换进换出,从而降低系统性能。

3.4Clock时钟置换算法

内存中的每个页面配置一个使用位(U位); 当页面装入内存时,或被引用时,其U位将被设置为1;系统将置换范围内的所有页面组成一 个循环队列,并为其设置一个扫描指针;未进行页面置换时,扫描指针总是指向上一次进行页面置换时被置换页面所在位置的下一个位置。

当需要进行页面置换时,系统将移动扫描指针,搜索置换范围内的各个页面,以便找到一个U位为0的页面:

如果当前扫描指针所指向的页面的U位为1,那么系统将把该页面的U位设置为0,同时把扫描指针移到下一个位置,继续搜索;如果当前扫描指针所指向的页面的U位为0,那么系统将把该页面作为被置换页面,同时把扫描指针移到下一个位置,停止搜索。(该算法关注的使用频率





时钟置换算法的改进:

系统把一个页面移出内存时,如果该页面驻留内存期间没有被修改过,那么不必把它写回辅存,否则系统必须把它写回辅存。这表明,换出未修改过的页面比换出被修改过的页面开销小。显然,我们可以依据上述结论改进CLOCK算法。改进后的CLOCK算法将在置换范围内首选在最近没有被使用过、在驻留内存期间没有被修改过的页面作为被置换页面。

为了改进CLOCK算法,系统将为内存的每个页面配置一个修改位(简称为M位)。 改进后的CLOCK算法在置换范围内选择被置换页面时将同时考虑U位和M位。一个页面的U位与M位共有四种组合:U=0,M=0:最近没有被使用过,驻留内存期间也没有被修改过;U=1,M=0:最近被使用过,但驻留内存期间没有被修改过;U=0,M=1:最近没有被使用过,但驻留内存期间被修改过;U=1,M=1:最近被使用过,驻留内存期间也被修改过;

改进后的 CLOCK 算法将按下列步骤选择被置换页面:

1、从扫描指针的当前位置开始,搜索 U=0且 M=0 的页面。此次搜索不会修改置换范围内的任何一个页面的U位。若找到第一个U=0且M=0的页面,则把该页面选作被置换页面,终止算法。

2、如果第一步没有成功, 那么扫描指针将回到原位。 再次搜索U=0但M=1的页面。如果遇到U位为1的页面,将其U位修改为0。倘若找到第一个U=0但M=1的页面,将该页面选作被置换页面,终止算法。

3、如果第二步也没有成功, 那么扫描指针将再次回到原位,且置换范围内的所有页面的U位均为0。此时,算法将返回第一步继续执行。

4.页面清除策略 

页面清除是指,将由页面置换算法选择的被修改的置换页面保存到外存。页面清除策略需要决定系统何时把一个被置换页面写回外存。最直接的页面清除时机是,只有当一个页被选中作为置换页时,才被写回外存,称之为请求清除策略。

若被选中的置换页面自进入内存以来被修改过,则需要首先将该页面内容写回外存保存起来,然后,装入进程需要的新页内容。可见,采用请求清除策略时,写出一个被修改过的页面与读入一个新页的操作是成对出现的,而且,写出操作先于读入操作。所以,当正在执行的进程发生缺页中断时,需要阻塞等待一个页面的写出和另一个页面的读入,这可能降低处理机的使用效率。

一种有效的页面清除策略是结合页缓冲(Page Buffering)技术。当发生缺页中断时,不必首先写出置换页,然后读入新页。而是,将被选中的置换页暂时保留在内存的一个缓冲区,在以后某个合适的时候将这些被置换页批量写出到外存。减少磁盘I/O的次数,提高处理机的效率。

4.1页缓冲技术的实现

需要两个链表:未修改页链表和修改页链表。当选中一个被修改过的页作为置换页时,不需要立即、真正地将其写出到外存,而是首先将其插入到修改链表中缓冲存储。修改链表中的页可以周期性地批量写出到外存,并移到未修改表中。未修改表链接被选中的未修改置换页,当其中某页所占用的页框被新页占用时,新页的内容覆盖置换页的内容,置换页被真正从内存清除。

采用页缓冲技术,当需要读入一个新页时,首先检查未修改页链表,若该表非空,便可按照FIFO方法,将该链表头指向的第一个页面占用的页框分配给新页。如果未修改表为空,检查修改页链表,将该表中的页面内容批量写出到外存,并将这些页移到未修改表中,按照上述方法重新分配其占用的页框。显然,采用页缓冲技术不仅可以减少写出页面的系统开销,而且可以减少读入页面的开销。因为,当进程再次访问页面缓冲区的页面时,只需要将对应页面从缓冲区返回到该进程的驻留集中,而无须从外存读入。

5.负载控制 

多道程序系统允许多个进程同时驻留内存,以提高系统吞吐量和资源利用率。然而,如果同时驻留内存的进程数量太多,每个进程都竞争各自需要的资源,反而会降低系统效率。

如果内存中进程太多,将导致每个进程的驻留集太小,发生缺页中断的概率很大。相应地,系统发生抖动的可能性就会很大。如果在内存中保持太少的活动进程,那么所有活动进程同时处于阻塞状态的可能性就会很大,从而降低处理机的利用率。

负载控制主要解决系统应当保持多少个活动进程驻留在内存的问题,即控制多道程序系统的度。当内存中的活动进程数太少时,负载控制将增加新进程或激活一些挂起进程进入内存;反之,当内存中的进程数太多时,负载控制将暂时挂起一些进程,减少内存中的活动进程数。处理机利用率与多道程序的度之间的关系如图所示: 



5.1如何判断系统的负载 

L=S准则

通过调整多道程序的度,使发生两次缺页之间的平均时间等于处理一次缺页所需要的平均时间。即,平均地,一次缺页处理完毕,再发生下一次缺页。此时,处理机的利用率将达到最大。
50%准则 
当分页设备的利用率保持在50%左右时,处理机的利用率将达到最大。

如果系统使用基于CLOCK置换算法的全局置换策略,那么,可以通过监视扫描指针的移动速率来调整系统负载。如果扫描指针的移动速率低于某个给定的阀值,那么意味着近期页面失败的次数较少或者近期没有被引用的页面数较多;此时,系统可以放心地增加驻留内存的活动进程数。如果扫描指针的移动速率超出某个给定的阀值,那么意味着近期页面失败的次数较多或者近期没有被引用的页面数较少;此时,系统应当减少驻留内存的活动进程数。

5.2可以挂起的进程

优先级最低的进程;

缺页进程:因为发生缺页中断的进程处于阻塞状态,暂时不需要竞争处理机的使用权。而且,挂起一个缺页进程时,挂起和激活操作需要的数据交换将消除页替换的开销;

最后一个被激活的进程 :因为为此类进程装入的页面较少。将其挂起的开销较小;

驻留集最小的进程:将该类进程挂起以后,激活所需的开销较小;

最大的进程:挂起最大的进程将获得最多的内存空间,可以满足内存中的进程申请空闲页框的需要,使它们能尽快执行完成;

剩余执行时间最多的进程:对应于剩余时间最短者优先的进程调度算法,将剩余执行时间最多的进程挂起对其响应时间的影响不明显。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: