4-1.页面置换算法

① 判断置换算法好坏的标准:

具有较低的页面置换频率。

② 内存抖动:

页面的频繁更换,导致整个系统效率急剧下降,这个现象称为内存抖动。

一、最佳置换算法

1.作用

所选择的被淘汰页,将是以后永不使用的,或者是在最长(未来)时间内不再被访问的页面。

2.例题1:

假定系统为某进程分配了3个物理块,并考虑有以下的页面号引用串:

7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

解析:
最佳置换算法例1.png

注意:红色是我自己标注的,代表每个页号在第几位出现。

① 进程运行时,3个物理块是空的,按照题述页号引用顺序,第一个是页号7,因为物理块是空的,也就是内存中无页号,所以页号7没在内存,就得发送缺页中断,接着调入内存占用1个物理块,同理,页号0、页号1各占一个物理块,将资源占完。此时页框内是701。

② 这时当访问页号2时,页号同样不在内存中发送缺页中断,这时3个物理块都被占用,就需要考虑将哪个淘汰掉,根据最佳置换算法,看7,0,1这3个页面哪一个是长时间未使用到的,根据页号引用顺序页面7在第18再次使用,所以选择页面7予以淘汰。

③ 同理,运行到页号0时,内存中已有,即命中,继续往下运行。此时页框内仍是201。

④ 运行到页号3:内存已满,发送缺页中断。因为页号1下一次得在第14位使用。所以将其替换掉。此时页框内是203。

⑤ 运行到页号0:内存中已有,即命中,继续往下运行 。此时页框内是203。

⑥ 运行到页号4:内存已满,发送缺页中断。因为页号0下一次得在第11位使用。所以将其替换掉。此时页框内是243。

⑦ 运行到页号2:内存中已有,即命中,继续往下运行 。此时页框内是243。

⑧ 运行到页号3:内存中已有,即命中,继续往下运行 。此时页框内是243。

⑨ 运行到页号0:内存已满,发送缺页中断。页号4在之后序列中都未出现,所以淘汰。此时页框内是203。

依次类推,最后页框内为701。

3.优缺点:

采用最佳置换算法,通常可保证获得最低的缺页率。

最佳置换算法是一种理想化得的算法,它具有较好的性能,但是实际上却是不可实现的。因为这种算法需要预先知道页面的走向次序,可实际上,程序中有分支结构,页面的实际走向是不能事先确定的。所以这种算法在实际的应用中是不可行的。

二、先进先出(FIFO)页面置换算法

1.作用

最先进来最先淘汰(即选择在内存中驻留时间最久的页面予以淘汰)

这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO算法并不能保证这些页面不被淘汰。

2.例题1:

假定系统为某进程分配了3个物理块,并考虑有以下的页面号引用串:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

解析:
先进先出页面置换算法例1解.png

① 进程最开始运行时3个物理块没有页号,所以发送缺页中断从外存调入页号7,同理,调用页号0、页号1,这时资源都已被占用。此时页框内是701。

② 当运行到页号2时,内存没有页号2,故发送缺页中断,这时就需要考虑置换掉谁。根据先进先出(FIFO)页面置换算法,谁先进就先淘汰谁。页号7先进,就先淘汰页号7。此时页框内是201。

③ 同理,运行到页号0时,内存中已有,即命中,继续往下运行。此时页框内仍是201。

④ 运行到页号3:此时页框内是201,页号0在内存中存在最久,所以将页号0替换成页号3。更改页框为231。

⑤ 运行到页号0:此时页框内是231,页号1在内存中存在最久,所以将页号1替换成页号3。更改页框为230。

⑥ 运行到页号4:页号1在内存中存在最久,所以将页号2替换成页号4。更改页框为430。

依次类推,最后页框内为701。

3.优缺点:

FIFO 页面置换算法易于理解和编程。然而,它的性能并不总是十分理想。一方面,所置换的页面可以是很久以前使用过但现已不再使用的初始化模块。另一方面,所置换的页面可以包含一个被大量使用的变量,它早就初始化了,但仍在不断使用。

三、最近一段时间最久未使用(LRU)置换算法

1.作用

根据页面调入内存的使用情况进行决策,把最近一段时间最久未使用的页面予以淘汰

详述:

FIFO置换算法性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入先后并不能反映页面的使用情况。最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况进行决策的。因为根据程序的局部性原理,刚刚被访问过页面,可能很快还被访问到。由于无法预测各个页面将来的使用情况,只能利用“最近的的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。

2.例题1:

假定系统为某进程分配了3个物理块,并考虑有以下的页面号引用串:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

解析:
![LRU寄存器.png](https://upload-images.jianshu.io/upload_images/21171580-36fa0089a3b53dd9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

① 进程最开始运行时3个物理块没有页号,所以发送缺页中断从外存调入页号7,同理,调用页号0、页号1,这时资源都已被占用。此时页框内是701。

② 当运行到页号2时,内存没有页号2,故发送缺页中断,这时就需要考虑置换掉谁。根据最近一段时间最久未使用(LRU)置换算法,最近一段时间最久未使用的页面予以淘汰。页号7在最近一段时间内(也就是在页号之前运行的时间里)页号7最久没被使用,所以就淘汰页号7。此时页框内是201

③ 同理,运行到页号0时,内存中已有,即命中,继续往下运行。

④ 运行到页号3:页号0刚用过,页号2页用过不久,页号1不用的时间最久,可能很快还被访问到,所以将页号1替换。此时页框内是203。

⑤ 运行到页号0:命中,继续往下运行。此时页框内仍是203。

⑥ 运行到页号4:页号0刚用过,页号3页用过不久,可能很快还被访问到,所以将页号2替换。此时页框内是403。

依次类推,最后页框内为107。

3.优缺点:

① 命中率,当存在热点数据时LRU的效率很好;但偶发性的,周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重 。

② 实现相对简单。

③ 命中时需要遍历链表,找到命中的数据块索引,然后需要将数据移到头部。

4.硬件支持

(1)寄存器LRU寄存器.png

为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄存器,可表示为

当进程访问某物理块时,要将相应寄存器的Rn-1位置 置1。此时,定时信号将每隔一定时间(例如100ms)将寄存器右移一位。如果我们把n位寄存器的数看做是一个整数,那么,具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。

例:

表6-1示出了某进程在内存中具有4个页面,为每个内存页面配置一个8位寄存器时的LRU访问情况。这里,把4个内存页面的序号分别定为1~4.由表可以看出,第3个内存页面的R值最小,当发生缺页时,首先将它置换出去。

LRU寄存器.png

(2)栈

可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号

1)例题1:

假定现有一进程所访问的页面的页面号序列为:

4,7,0,7,1,0,1,2,1,2,6

随着进程的访问,栈中页面号的变化情况如图6-9所示。在访问页面6时发生了缺页,此时页面4是最近最久未被访问的页,应将它置换出去。

LRU-栈例1解.png

四、Clock置换算法

LRU算法是较好的一种算法,但由于它要求有较多的硬件支持,故在实际应用中,大多采用LRU的近似算法。Clock算法就是用得较多的一种LRU近似算法。

1.简单的Clock置换算法

页号 物理块号 状态位P 访问字段A 修改位M 外存地址

各字段说明如下:

状态位P:用于表示该页是否已调入内存,供程序访问时判断是否应该产生缺页中断。

访问位A:用于记录本页在一段时间内被是否访问过,或记录本页最近已有多长时间未被访问,供选择换出页面时参考

修改位M表示该页在调入内存后是否被修改过

(1)流程和示例

简单Clock置换算法的流程和示例.png

当采用简单的Clock算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环的队列

当某页被访问时,其访问位被置1。置换算法在选择一页淘汰时只需检查页的访问位。如果是0,就选择该页面换出;若为1,则重新将它置0,暂不换出,而给该页第二次驻留内存的机会,再按照FIFO算法检查下一个页面。

当检查到队列中最后一个页面时,若其访问位仍为1,则再返回到队首去检查第一个页面。上图示出了该算法的流程和示例。由于该算法是循环地检查各个页面的使用情况,故称为Clock算法。但因该算法只有一位访问位,只能用它表示该页是否已经使用过,而置换时是将未使用过的页面换出去,故又把该算法称为最近最久未使用算法NRU(Not Recently Used)。

2.改进型Clock置换算法

(1)由访问位A和修改位M可以组合成下面四种类型的页面:

① 1类(A=0,M=0):

表示该页最近既未被访问,又未被修改,是最佳淘汰页

② 2类(A=0,M=1):

表示该页最近既未被访问,但被修改,并不是很好的淘汰页。

③ 3类(A=1,M=0):

最近既已被访问,但未被修改,该页有可能再被访问。

④ 4类(A=1,M=1):

最近已被访问,且又被修改,该页可能再被访问。

(2)执行流程

其执行过程可分成以下三步:

1)从指针所指示的当前位置开始,扫描循环队列,寻找A=0且M=0的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位A

  1. 如果第一步失败,即查找一周后未遇到第一类页面,则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置0

  2. 如果第二步也失败,亦即未找到第二类页面,则将指针返回到开始的位置,并将所有的访问位复0。然后重复第一步,如果仍失败,必要时再重复第二步,此时就一定能找到被淘汰的页。

五、其它置换算法

因为存在LRU算法,所以以下这些算法都不常用。

1.最少使用(LFU: Least Frequently Used)置换算法

2.页面缓冲算法(PBA: Page Buffering Algorithm)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352