页面置换算法

最佳置换算法

最佳置换算法是由Belady于1966年提出的一种理论上的算法。其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。

缺点:由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。

 

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

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

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

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

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


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

 

LRU 置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t 值最大的,即最近最久未使用的页面予以淘汰。

举例:

 

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

 

最少使用置换算法(LFU置换算法)

采用LFU算法时, 应为内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率,该置换算法选择在最近时期使用最少的页面作为淘汰页。

 

简单Clock置换算法

当采用简单Clock算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位被置1。置换算法在选择一页淘汰时,只需检查页的访问位。如果是0,就选择该页换出;若为1,则重新将它置0,暂不换出,而给该页第二次驻留内存的机会,再按照FIFO 算法检查下一个页面。当检查到队列中的最后一个页面时,若其访问位仍为1,则再返回到队首去检查第一个页面。

 

 举例:
一个作业的物理块数为3,此作业的页面走向为:3, 4, 2, 6, 4, 3, 7, 4, 3, 6, 3, 4, 8, 4, 6

内存及控制信息

输入串

指针移动情况及帧替换信息

是否缺页?

内存

访问位

指针

3

内存中没有3,需要找到一个帧放入3,
指针所指的位置恰好有访问位为0的,
于是就淘汰这个帧,指针下移

 

0

 

0

 

 

0

 

内存

访问位

指针

4

内存中没有4,需要找到一个帧放入4,
指针所指的位置恰好有访问位为0的,
于是就淘汰这个帧,指针下移

3

1

 

 

0

 

0

 

内存

访问位

指针

2

内存中没有2,需要找到一个帧放入2,
指针所指的位置恰好有访问位为0的,
于是就淘汰这个帧,指针下移

3

1

 

4

1

 

 

0

内存

访问位

指针

6

内存中没有6,需要找到一个帧放入6,
指针所指的位置的访问位为1,
将其变成0,再下移

3

1

4

1

 

2

1

 

内存

访问位

指针

指针所指的位置的访问位仍为1,
将其变成0,再下移

3

0

 

4

1

2

1

 

内存

访问位

指针

指针所指的位置的访问位仍为1,
将其变成0,再下移(回到开头)

3

0

 

4

0

 

2

1

内存

访问位

指针

指针所指的位置恰好有访问位为0的,
于是就淘汰这个帧,指针下移

3

0

4

0

 

2

0

 

内存

访问位

指针

4

内存中有4,于是4所在帧的访问位变为1,
指针下移

×

6

1

 

4

0

2

0

 

内存

访问位

指针

3

内存中没有3,需要找到一个帧放入3,
指针所指的位置恰好有访问位为0的,
于是就淘汰这个帧,指针下移

6

1

 

4

1

 

2

0

内存

访问位

指针

7

内存中没有7,需要找到一个帧放入7,
指针所指的位置的访问位为1,
将其变成0,再下移

6

1

4

1

 

3

1

 

内存

访问位

指针

指针所指的位置的访问位仍为1,
将其变成0,再下移

6

0

 

4

1

3

1

 

内存

访问位

指针

指针所指的位置的访问位仍为1,
将其变成0,再下移(回到开头)

6

0

 

4

0

 

3

1

内存

访问位

指针

指针所指的位置恰好有访问位为0的,
于是就淘汰这个帧,指针下移

6

0

4

0

 

3

0

 

内存

访问位

指针

4

内存中有4,于是4所在帧的访问位变为1,
指针下移

×

7

1

 

4

0

3

0

 

内存

访问位

指针

3

内存中有3,于是3所在帧的访问位变为1,
指针下移(回到开头)

×

7

1

 

4

1

 

3

0

内存

访问位

指针

6

内存中没有6,需要找到一个帧放入6,
指针所指的位置的访问位为1,
将其变成0,再下移

7

1

4

1

 

3

1

 

内存

访问位

指针

指针所指的位置的访问位仍为1,
将其变成0,再下移

7

0

 

4

1

3

1

 

内存

访问位

指针

指针所指的位置的访问位仍为1,
将其变成0,再下移(回到开头)

7

0

 

4

0

 

3

1

内存

访问位

指针

指针所指的位置恰好有访问位为0的,
于是就淘汰这个帧,指针下移

7

0

4

0

 

3

0

 

内存

访问位

指针

3

内存中有3,于是3所在帧的访问位变为1,
指针下移

×

6

1

 

4

0

3

0

 

内存

访问位

指针

4

内存中有4,于是4所在帧的访问位变为1,
指针下移

×

6

1

4

0

 

3

1

 

内存

访问位

指针

8

内存中没有8,需要找到一个帧放入8,
指针所指的位置的访问位为1,
将其变成0,再下移(回到开头)

6

1

 

4

1

 

3

1

内存

访问位

指针

指针所指的位置的访问位仍为1,
将其变成0,再下移

6

1

4

1

 

3

0

 

内存

访问位

指针

指针所指的位置的访问位仍为1,
将其变成0,再下移

6

0

 

4

1

3

0

 

内存

访问位

指针

指针所指的位置恰好有访问位为0的,
于是就淘汰这个帧,指针下移(回到开头)

6

0

 

4

0

 

3

0

内存

访问位

指针

4

内存中有4,于是4所在帧的访问位变为1,
指针下移

×

6

0

4

0

 

8

1

 

内存

访问位

指针

6

内存中有6,于是6所在帧的访问位变为1,
指针下移

×

6

0

 

4

1

 

8

1

内存

访问位

指针

结束

完成

缺页8次

6

1

 

4

1

8

1

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值