声明:本篇博客参考书籍《计算机操作系统》(西安电子科技大学出版社)
首先说说影响页面换进换出的效率的几个因素:
(1)页面置换算法。该因素是影响页面换进换出效率的重要因素。一个好的页面置换算法可以使进程在运行过程中具有较低的缺页率,从而减少页面换进换出的频率。
(2)写回磁盘的频率。对于已经被修改的页面,换出时,需要写入到磁盘,也就是I/O操作。如果一个被修改的页面被换出后,系统暂时不将其写回到磁盘,而是挂在已经修改的换出页面的链表上。仅当被换出页面的数目达到一定值时,再将它们一起写入到磁盘中。显著的减少了磁盘I/O操作。
(3)读入内存的频率。设置了已修改换出页面链表后,在该链表上有一批换出且待写回磁盘的页面,如果有进程在这些页面被写回磁盘前再次需要访问该页面,那么可以直接从已修改的链表上获取该页面。可以减少从磁盘读取页面到内存的频率。
一、最佳页面置换算法
1、基本知识
最佳页面置换算法是一种理想化的页面置换算法,具有最好的性能,但是实际上没办法实现,其他页面置换算法的好坏,通常以最佳页面置换算法为比较标准。
2、算法思想
该算法选择的被淘汰的页是以后永不使用或者是在最长未来时间内不再被访问的页面,故最佳置换算法保证了最低的缺页率。但是由于人们目前无法预知一个进程在内存中的哪个页面是未来最长时间内不再被访问的,所以该算法到目前为止还只是一个理论算法,没有被实现。下面用举例说明该算法。
假设系统为某个进程分配了4个物理块,并且该进程的页面的引用顺序如下:
1 ,0,2,3,4,3,2,1,4,5,3,4,0 …
则各时刻页面被装入内存的情况如下:
当装入1,0,2之后,调用页面3时会发生缺页中断,需要将一个页面置换出去,将页面3置换进来,对于最佳置换算法,发现对于页面1,0,2来说,页面0是未来最久未使用到的页面,所以将页面0置换出去,将页面3置换进来。
当调用页面4时会发生页面中断,需要将一个页面置换出去,将页面4置换进来,对于最佳置换算法,发现对于页面1,3,2来说,页面1是未来最久未使用到的页面,所以将页面1置换出去,将页面4置换进来
. . . . .一直这样进行着页面置换,这就是最佳页面置换算法。由图可看出,画出来的部分进行了4次页面置换。
二、先进先出(FIFO)页面置换算法
1、基本知识
先进先出置换算法是最早出现的算法,该算法实现简单,只需要将一个进程已调入内存的页面按照先后次序连接成一个队列,并且设置成一个指针,称为替换指针,总是指向该队列的头,即指向该进程已调入内存的页面中,最先调入的页面(即在内存中待的时间最长的页面)。
该算法的性能比较差,因为它所依据的条件是各个页面在内存中驻留的时间的长短,而页面调入的先后并不能反应页面的使用情况。
2、算法思想
思想为总是淘汰最先进入内存的页面,即选择在内存中驻留时间最长的页面淘汰。
以最佳置换算法中的页面和引用顺序举例:
当页面1,0,2装入内存后,调用页面3时,会发生页面中断,对于先进先出页面置换算法来说,由于1,0,2三个页面,页面1在内存中驻留时间最长,所以将页面1置换出去,将页面3置换进来。
当需要调用页面4时,会发生页面中断,由于页面3,0,2中页面0在内存中驻留时间最长,所以将页面0置换出去,将页面4置换进来。
. . . . . . 一直这样页面置换,总是将在内存中驻留时间最长的页面置换出去。从画出的图中可以看出进行了6次页面置换
三、最近最久未使用(LRU)页面置换算法
1、基本知识
最近最久未使用页面置换算法是根据页面调入内存后的使用情况而做出决策的。由于无法预测页面未来的使用情况,所以只能根据页面最近的使用情况作为未来的使用情况的近似。
2、算法思想
最近最久未使用(LRU)页面置换算法是选择最近最久未使用的页面给予淘汰,该算法赋予每一个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当需要淘汰一个页面时,选择现有页面中t值最大的,即最近最久未使用的页面给予淘汰。
当第一次需要引用页面3时,会发生缺页中断,对于最近最久未使用算法来说,对于在内存中的页面1,0,2,页面1最近最久未使用,所以将页面1置换出,将页面3置换进内存。
当第一次引用页面4时,会发生缺页中断,对于最近最久未使用算法来说,对于在内存中的页面3,0,2,页面0最近最久未使用,所以将页面0置换出,将页面4置换进内存。
对于内存中驻留页面是3,4,2来说,需要引用页面1,发生缺页中断,对于最近最久未使用算法来说,对于在内存中的页面3,4,2,页面4最近最久未使用,所以将页面4置换出,将页面1置换进内存。
. . . . . . 按照最近最久未使用规则一直这样置换下去。
最近最久未使用置换算法是根据过去的使用情况来决定被置换出去的页,而最佳置换算法是根据未来的使用情况来决定被置换出去的页。也可以说最近最久未使用置换算法试图希望通过过去的页面使用情况来近似接近于未来页面的使用情况,而接近于最佳置换算法。但是这只是一种希望,因为页面过去的使用情况和未来的使用情况之间没有必然的联系。
3、硬件支持
为了了解一个进程在内存中的哪一个页面是最近最久未使用的,需要寄存器或者栈这两类硬件之一支持。
(1)移位寄存器
可以为在内存中的每个页面配置一个移位寄存器,假设该寄存器有n个位,每个位由R表示,最低位由R0表示,最高位由R(n-1)表示。
当进程访问某个物理块时,将相应的寄存器的位R(n-1)置为1,定时信号将每隔一定时间(比如100ms)将寄存器右移一位(相当于数值以>>1的方式缩小),也就是越久未使用,该页面对应的寄存器的值越小(除非该寄存器的值已经为0了),那么值最小的移位寄存器对应的页面就是最近最久未使用的页面。
(2)栈
可以利用一个特殊的栈保存一个进程被调入内存的页面的页面号。当一个页面被访问时,将该页面从栈中移出,将该页面重新压入栈中。因此栈顶保存的总是最近被访问的页面的页面号,而栈底就是最近最久未使用的页面号。
四、最少使用(LFU)页面置换算法
1、基本知识
使用最少使用(LFU)页面置换算法时,应该在内存中为每一个页面设置一个移位寄存器,用来记录被访问的频率。最少使用页面置换算法,顾名思义,选择使用频率最少的页面置换出去。
2、算法思想
思想即选择最近最少使用的页面淘汰。
由于存储器具有较高的访问速度,例如100ns,在1ms内可能对一个页面访问成千上万次,所以,只能采用较大的时间间隔来记录对存储器某页的访问,在最少使用置换算法中也使用了移位寄存器。
当某页被访问时,将该移位寄存器的最高位置为1,隔一定时间,将移位寄存器的值右移一位,故寄存器各个位值相加,值越小,说明该移位寄存器对应的页面在最近一段时间使用的次数最少。
这种算法并不能真正反应页面的使用情况,因为在每一个时间间隔内,只是用寄存器的一个位来记录该页在该间隔被使用了,但是在该时间间隔内,页面被使用1次和被使用10000次完全是等效的。
五、Clock页面置换算法
1、基本知识
最近最久未使用(LRU)算法是比较常见的页面置换算法,但是由于LRU置换算法需要较多的硬件支持,所以使用LRU算法的成本较高,所以在实际应用中大多采用LRU的近似算法,Clock就是其中一个用的较多的LRU近似算法。
2、算法思想
当利用Clock算法时,只需要将每一个页设置一个访问位,再将内存中的所有页面都通过指针连接成一个循环队列,当某页被访问时,访问位置为1。
Clock置换算法在选择一个页置换出时,只需要检查页面的访问位,如果是0,就将该页换出;如果是1,则将访问位重新置为0,暂不换出,给予该页第二次驻留内存的机会,再按照Clock算法检查下一个页面。当检查到队列中的最后一个页面时,若其访问位仍然为1,则再去返回队首检查第一个页面…
3、改进型Clock置换算法
当一个页面换出时,如果该页面已经被修改,那么需要将这个页面重新写回到磁盘上,但是如果该页面没有被修改,那么不必将它拷回到磁盘。所以对于修改过的页面来说,没有修改的页面的换出时付出的代价要更小。所以在改进型Clock置换算法中在考虑页面的使用情况之外,又考虑了页面置换代价,即是否被修改了。所以每个页面有两个标志位,分别为访问为A和修改位M,可以组合成以下四种情况:
(1)(A = 0, M = 0):表示该页最近既没有被访问也没有被修改,是最佳淘汰页。
(2)(A = 0, M = 1):表示该页最近没有被访问,但是被修改了,并不是很好的淘汰页。
(3)(A = 1, M = 0):表示该页最近被访问了,但是没有被修改,该页有可能会被再次访问。
(4)(A = 1, M = 1):表示该页最近既被访问又被修改,该页有可能被再次访问。
改进型Clock置换算法寻找淘汰页时,执行过程可以分为以下三步:
(1)从指针所指示的当前位置开始,扫描循环队列,寻找A = 0且M = 0的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不修改访问位A。
(2)如果第一步失败,即查找一轮后未遇到第一类页面,则开始第二轮扫描,寻找A = 0且M = 1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置为0。
(3)如果第二步也失败,即第二类页面也没有找到,则将指针返回到开始位置,并且将所有的访问位都置为0,然后重复第一步,即寻找A=0且M=0的页面,如果仍然失败,必要时再重复第二步,寻找A=0且M=1的第二类页面,此时就一定能找到被淘汰的页。
该算法与普通Clock置换算法相比,可以减少磁盘I/O操作次数。实现该算法的本身的开销将增加。
六、页面缓冲(PBA)算法
1、基本知识
页面缓冲算法有以下两个特点:
(1)显著的降低了页面换进换出的频率,使磁盘I/O操作次数大为减少。
(2)由于磁盘I/O操作次数大为减少,使得页面换进换出的效率减少,所以使其可以采用较为简单的页面置换算法,比如先进先出页面置换算法。文章来源:https://www.toymoban.com/news/detail-471655.html
2、算法思想
该算法主要由两类链表支撑,空闲页面链表和修改页面链表。页面缓冲算法主要是将换出的页面暂时不写回到磁盘中,而是将页面挂到相应的链表上。其一减少磁盘I/O操作次数,其二可以减少读入内存的频率。
(1)空闲页面链表
该链表是一个空闲物理块链表。是系统掌握的空闲物理块,用于分配给频繁发生缺页中断的进程,以降低该进程的缺页率。当这样的进程需要读入一个页面时,便可利用空闲物理块来装入该页。
当有一个未被修改的页面要换出时,实际上并不将它换回到外村,而是把它们所在的物理块挂在空闲链表的末尾。这些挂在空闲链表中的物理块是有数据的,如果以后某个进程需要访问这些页面时,可以直接从空闲链表中取下,免除了从磁盘读入数据的操作,减少了页面换进的开销。其实也减少了页面换出的开销,因为这个换出页面到目前为止都没有写回到磁盘。
(2)已修改页面的链表
该链表是由已修改的页面所形成的链表。设置该链表的目的是减少修改页面换出的次数。当进程需要将一个已经修改的页面换出时,系统并不立即将它换出到磁盘上,而是将它所在的物理块挂在修改页面链表的末尾。
当已修改页面的链表上的页面个数达到一定程度时,会一一起将这些页面写回到磁盘。如果这些被换出的页面在写回磁盘之前,有进程需要访问其中的页面,那么可以直接从已修改页面链表上获取该页面。所以可见,减少了磁盘I/O操作,并且减少了内存写入频率。文章来源地址https://www.toymoban.com/news/detail-471655.html
到了这里,关于计算机操作系统——页面置换算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!