210 likes | 451 Views
要完全实现最近最少用置换算法是一件非常困难的事情。因为需要对每一页被访问的情况进行实时记录和更新,这显然要花费巨大的系统开销,所以在实际系统中往往使用 LRU 的近似算法。
E N D
要完全实现最近最少用置换算法是一件非常困难的事情。因为需要对每一页被访问的情况进行实时记录和更新,这显然要花费巨大的系统开销,所以在实际系统中往往使用LRU的近似算法。要完全实现最近最少用置换算法是一件非常困难的事情。因为需要对每一页被访问的情况进行实时记录和更新,这显然要花费巨大的系统开销,所以在实际系统中往往使用LRU的近似算法。 • LRU近似算法是在页表中为每一页增加一个“引用位”,当该页被访问时,由硬件将它的引用位置为“1”,操作系统选择一个时间周期T,每隔一个周期T,将页表中所有页面的引用位置“0”,这样,在时间周期T内,被访问过的页面,其引用位为1,而没有被访问过的页面,其引用位仍为0。这样,当产生缺页中断时,可以从引用位为0的页面中选择一页调出,同时将所有页面的引用位全部置零。这种近似算法实现比较简单,但关键在于时间周期T大小的确定。T太大,可能所有的引用位都变成1,找不出最近最少使用的页面淘汰;T太小,引用位为0的页面可能很多,而无法保证所选择的页面是最近最少使用的。图3-39给出了以OPT算法中的例子采用LRU近似算法时,保留在主存中页面的变化情况,该进程执行过程中,共产生了12次缺页中断,缺页中断率为60%,页面淘汰的顺序为7,1,2,3,0,4,0,3,2。
(4)最近最不常用页面置换算法(Least Frequently Used——LFU) • 最近最不常用置换算法总是选择被访问次数最少的页面调出,即认为在过去的一段时间里被访问次数多的页面可能经常需要访问。 • 一种简单的实现方法是为每一页设置一个计数器,页面每次被访问后其对应的计数器加1,每隔一定的时间周期T,将所有计数器全部清零。这样,在发生缺页中断时,选择计数器值最小的对应页面淘汰,显然它是最近最不常用的页面,同时把所有计数器清零。这种算法实现比较简单,但代价很高,同时有一个关键问题是如何选择一个合适的时间周期T。
3.缺页中断率分析 • 虚拟存储系统解决了有限主存贮器的容量限制问题,能使更多的作业同时多道运行,从而提高了系统的效率,但缺页中断处理需要系统的额外开销,影响系统效率,因此应尽可能地减少缺页中断的次数,降低缺页中断率。 • 假定一个作业共有n页,系统分配给它的主存块是m块(m、n均为正整数,且1≤m≤n)。因此,该作业最多有m页可同时被装入主存。如果作业执行中访问页面的总次数为A,其中有F次访问的页面尚未装入主存,故产生了F次缺页中断。现定义: • f=F/A, • 则f称为“缺页中断率”。 • 显然,缺页中断率与缺页中断的次数有关。因此影响缺页中断率的因素有:
(1)分配给作业的主存块数 • 系统分配给作业的主存块数多,则同时装入主存的页面数就多,那么缺页中断次数就少,缺页中断率就低,反之,缺页中断率就高。
从理论上说,在虚拟存储器的环境下,每个作业只要获得一块主存空间就可以开始执行,这样可以增加在主存中多道执行的作业数,但是每个作业将频繁地发生缺页中断,效率非常低下,如图3-40示出了处理器的利用率与多道程序之间的关系。如果为每个作业分配很多主存块,则减少了可同时多道执行的作业数,影响系统的吞吐量。模拟试验表明,一个程序运行时发生的缺页中断次数是存放页从理论上说,在虚拟存储器的环境下,每个作业只要获得一块主存空间就可以开始执行,这样可以增加在主存中多道执行的作业数,但是每个作业将频繁地发生缺页中断,效率非常低下,如图3-40示出了处理器的利用率与多道程序之间的关系。如果为每个作业分配很多主存块,则减少了可同时多道执行的作业数,影响系统的吞吐量。模拟试验表明,一个程序运行时发生的缺页中断次数是存放页 面的实际存储容量的函数,图3-41所示存储容量与缺页中断次数的关系。
当然图3-41的曲线是与程序的结构有关的,每个程序均有自己唯一的曲线。但图3-41的曲线形状十分典型,一个程序面对较小的主存容量时,发生的缺页中断次数就多,当主存容量增加时,缺页中断次数就减少。但从图中可以看出,主存容量增加到80K以后,随着主存容量的增加,缺页中断次数的减少就不明显了。大多数程序都有一个特定点,在这个特定点以后再增加主存容量,缺页中断次数的减少并不明显。据试验分析表明,对每个程序来说,要使其有效工作,它在主存中的页面数应不低于它的总页面数的一半。如果一个有n页的作业,当主存至少分配n/2主存空间块时进入主存执行,系统可以获得高效率。当然图3-41的曲线是与程序的结构有关的,每个程序均有自己唯一的曲线。但图3-41的曲线形状十分典型,一个程序面对较小的主存容量时,发生的缺页中断次数就多,当主存容量增加时,缺页中断次数就减少。但从图中可以看出,主存容量增加到80K以后,随着主存容量的增加,缺页中断次数的减少就不明显了。大多数程序都有一个特定点,在这个特定点以后再增加主存容量,缺页中断次数的减少并不明显。据试验分析表明,对每个程序来说,要使其有效工作,它在主存中的页面数应不低于它的总页面数的一半。如果一个有n页的作业,当主存至少分配n/2主存空间块时进入主存执行,系统可以获得高效率。
(2)页面的大小 • 页面的大小影响页表的长度、页表的检索时间、置换页面的时间、可能的页内零头的大小等,对缺页中断的次数也有一定的影响。如果划分的页面大,一个作业的页面数就少,页表所占用的主存空间少且查表速度快,在系统分配相同主存块的情况下,发生缺页中断的次数减少,降低了缺页中断率,但是一次换页需要的时间延长,可能产生的页内零头所带来的空间浪费较大。反之,页面小,一次换页需要的时间就短,可能产生的页内零头少,空间利用率提高,但是一个作业的页面数多,页表所占用的主存空间长且查表速度慢,在系统分配相同主存块的情况下,发生缺页中断的次数增多,增加了缺页中断率。 • 因此,页面的大小应根据实际确定,对不同的计算机系统,页面大小不同。一般页面大小在1K至4K字节之间。
(3)程序编制方法 • 程序编制的方法不同,对缺页中断的次数也有很大影响。缺页中断率与程序的局部化程度密切相关。一般,希望编制的程序能经常集中在几个页面上进行访问,以减少缺页中断次数,降低缺页中断率。 • 例如,一个程序要将128×128数组置初值“0”。现假设分配给该程序的主存块数只有一块,页面的大小为每页128个字,数组中每一行元素存放在一页中。 • 开始时,第一页已经调入主存。若程序如下编制: • A:array[1..128] of array[1..128] of integer; • for j:=1 to 128 • do for i:=1 to 128 • do A[i][j]:=0; • 则每执行一次A[i][j]:=0就要产生一次缺页中断,总共需要产生(128*128-1)次缺页中断。
如果重新编制这个程序: • A:array[1..128] of array[1..128] of integer; • for i:=1 to 128 • do for j:=1 to 128 • do A[i][j]:=0; • 则总共产生(128-1)次缺页中断。 • (4)页面调度算法 • 页面调度算法对缺页中断率的影响也很大,如果选择不当,有可能产生抖动现象。理想的调度算法是当要装入一个新页而必须调出一个页面时,所选择的调出页应该是以后再也不使用的页或者是距离当前最长时间以后才使用的页。这样的调度算法能使缺页中断率最低。
3.7.3请求分段式存储管理 • 请求分段式存储管理以段式存储管理为基础,为用户提供比主存实际容量更大的虚拟空间。请求分段式存储管理把作业的各个分段信 息保留在磁盘上,当作业被调度进入主存时,首先把当前需要的一段或几段装入主存,便可启动执行,当所要访问的段已在主存,则将逻辑地址转换成绝对地址;如果所要访问的段尚未调入主存,则产生一个“缺段中断”,请求操作系统将所要访问的段调入。为实现请求分段式存储管理,需要有一定的硬件支持和相应的软件。 • 请求分段式存储管理所需要的硬件支持有段表机制、缺段中断机构,以及地址变换机构等。
1.段表机制 在请求分段式存储管理中,段表是进行段调度的主要依据。在段表中需要增设段是否在主存,各段在磁盘上的存储位置,已在主存的段需要指出该段在主存中的起始地址和占用主存区的长度,还可设置该段是否被修改,是否可扩充等标志信息。请求分段式存储管理 的段表结构如下: • 其中:“存取方式”标识本段的存取属性(只执行或只读或读/写);“访问字段A”记录该段被访问的频繁程度;“修改位M”表示该段进入主存后,是否已被修改,供置换段时参考;“状态位P”指示本段是否已调入主存,若已调入,则“段的基址”给出该段在主存中的起始地址,否则在“辅存始址”中指示出本段在辅存中的起始地址;“扩充位”是请求分段式存储管理中所特有的字段,表示本段在运行过程中是否有动态增长。
2.缺段中断机构 • 在请求分段式存储管理中,当所要访问的段尚未调入主存时,则由缺段中断机构产生一个“缺段中断”信号,请求操作系统将所要访问的段调入主存。操作系统处理缺段中断的步骤如下: • (1)空间分配:查主存分配表,找出一个足够大的连续区以容纳该分段,如果找不到足够大的连续区,则检查主存中空闲区的总和,若空闲区总和能满足该段要求,那么进行适当移动将分散的空闲区集中;若空闲区总和不能满足该段要求,则可选择将主存中的一段或几段调出,然后把当前要访问的段装入主存。 • (2)修改段表:段被移动、调出和装入后都要对段表中的相应表目作修改。 • (3)新的段被装入后应让作业重新执行被中断的指令,这时就能在主存中找到所要访问的段,可以继续执行下去。
3.地址变换机构 • 请求分段式存储管理方式中的地址变换在分段式存储管理系统的地址变换机构的基础上增加缺段中段请求及处理等形成。图3-42示出了请求分段式存储管理系统的地址变换过程。
请求分段式存储管理还是以段为单位进行主存空间的分配,整段信息的装入、调出,有时需要主存空间的移动,这些都增加了系统的开销。如果按段页式存储管理方式,每个作业仍然按逻辑分段,把每一段再分成若干页面,这样,在请求式存储管理中,每一段不必占用连续的存储空间,可按页存放在不连续的主存块中,甚至当主存块不足时,可以将一段中的部分页面装入主存。这种管理方式称请求分段式存储管理还是以段为单位进行主存空间的分配,整段信息的装入、调出,有时需要主存空间的移动,这些都增加了系统的开销。如果按段页式存储管理方式,每个作业仍然按逻辑分段,把每一段再分成若干页面,这样,在请求式存储管理中,每一段不必占用连续的存储空间,可按页存放在不连续的主存块中,甚至当主存块不足时,可以将一段中的部分页面装入主存。这种管理方式称 为“请求段页式存储管理”。 • 采用请求段页式存储管理,需要对每一个装入主存的作业建立一张段表,对每一段建立一张页表,段表中指出该段对应页表所存放的起始地址及其长度,页表中应指出该段的每一页在磁盘上的位置以及该页是否在主存,若在主存,则填上占用的主存块号。作业执行时按段号查找段表,找到相应的页表再根据页号查找页表,由状态位判定该页是否已在主存,若在,则进行地址转换,否则进行页面调度。 • 请求段页式存储管理结合了请求分段式虚拟管理和请求分页式虚拟管理的优点,但增加了设置表格(段表、页表)和查表等开销。目前将实现虚拟其所需支持的硬件,集成在处理器芯片上,例如,Inter 80386以上的处理器芯片都支持请求段页式存储管理。段页式虚拟存储管理一般只在大型计算机系统中采用。