LRU 和 FIFO 页面置换算法

来源:互联网 发布:淘宝网已买到的宝贝 编辑:程序博客网 时间:2024/06/04 17:49

转自http://blog.csdn.net/u013575812/article/details/50976482

内存里边没有该最新访问的页面就叫做缺页,如果有就叫做命中
内存满的时候之前的页面被挤出去的现象叫一次缺页中断
在一个采用页式虚拟存储管理的系统中,有一用户作业,它依次要访问的序列是1,2,3,4,1,2,5,1,2,3,4,5.假定分配给该作业的页数为3且作业初始时未装载页面,那么采用FIFO调度算法产生的缺页中断数为多少,采用LRU调度算法产生的缺页中断数为多少?
答案是:9次和10次。条件:初始未装载页面 队列容量是3

FIFO算法

先进先出算法
访问1 缺页 1加入队列 【1】

访问2 缺页 2加入队列 【1 2】

访问3 缺页 3加入队列 【1 2 3】

访问4 缺页 1出队 4加入队列 【2 3 4】

访问1 缺页 2出队 1加入队列 【3 4 1】

访问2 缺页 3出队 2加入队列 【4 1 2】

访问5 缺页 4出队 5加入队列 【1 2 5】

访问1 不缺页 【1 2 5】 命中。

访问2 不缺页 【1 2 5】 命中。

访问3 缺页 1出队 3加入队列 【2 5 3】

访问4 缺页 5出队 4加入队列 【5 3 4】

访问5 不缺页【5 3 4】

因此 缺页次数为9次。

LRU算法

最近最少使用算法
特殊的栈实现栈顶始终是最新访问的页面,内存不够时将栈底页面移除。下面”【】”之间从从左到右 对应:栈底 -> 栈顶
访问1 缺页 【1】

访问2 缺页 【1 2】

访问3 缺页 【1 2 3】

访问4 缺页 【2 3 4】

访问1 缺页 【3 4 1】

访问2 缺页 【4 1 2】

访问5 缺页 【1 2 5】

访问1 【2 5 1】

访问2 【5 1 2】

访问3 缺页 【1 2 3】

访问4 缺页 【2 3 4】

访问5 缺页 【3 4 5】

因此 缺页次数为10次。

另一个例题:

http://www.cnblogs.com/freeyiyi1993/archive/2013/05/18/3084956.html

输入缺页次数页面流:

0 1 2 3 2 1 3 2 5 2 3 6 2 1 4 2
FIFO

分析:
012發別調入內存, 則內存:012(3次缺頁)
調入3逃汰最先進入的0, 則內存:123(4次缺頁)
調入2來命中, 則內存:123(內存中有2不缺頁)
調入1來命中, 則內存:123(內存中有1不缺頁)
調入3來命中, 則內存:123(內存中有3不缺頁)
調入5逃汰最先進入的1, 則內存:235(5次缺頁)
2,3分別命中,則內存:235
調入6逃汰最先進入的, 則內存:356(6次缺頁)
調入2逃汰最先進入的, 則內存:562(7次缺頁)
調入1逃汰最先進入的, 則內存:621(8次缺頁)
最后2命中,
所以缺页8次

=============================

在LRU算法中,最近最少使用的页面被先换出

输入:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0
写出LRU算法实现页面更换,并给出缺页次数.(设在内存中占四个页架)
分析:
1题目给了访问串7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0
2题目给了内存中占四个页架
3题目给了用LRU算法来实现。
要求:画出算法实现。
LRU
给出行 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0

头—–> 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0
1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7
0 1 2 2 3 0 4 2 2 0 3 3 1 2 0 1
底—–> 7 7 1 1 2 3 0 4 4 4 0 0 3 3 2 2

淘汰出内存的页面: 7 1 4 3

整个的表格是怎么来的呢?请注意:
题目给了7, 写7;
题目给了0,写0, 7下一格;
题目给了1, 写1,0下一格;
题目给了2, 写2,1下一格;
注意:已经四个了从上到下是:2107
达到了2的要求:内存中占四个页架。
至此与FIFO没有什么两样。接着:

题目给了0, 寻找 有0,FIFO的不写不变,变成了0调到最上面
题目给了3, 寻找没有3,写3,最底7的淘汰,现在是3021,发生了一次缺页中断,记下7;一样。
题目给了0, 寻找 有0,0调到最上面,0321
题目给了4, 寻找没有4,写4,最底1的淘汰,发生了一次缺页中断,记下1;4032
题目给了2, 寻找 有2,2调到最上面,2403
题目给了3, 寻找 有3,3调到最上面;3240
题目给了0, 寻找 有0,0调到最上面;0324
题目给了3, 寻找 有3,3调到最上面;3024
题目给了2, 寻找 有2,2调到最上面 2304
题目给了1, 寻找没有1,写1,最底4的淘汰,发生了一次缺页中断,记下4;1230
题目给了2, 寻找 有2,2调到最上面 2130
题目给了0, 寻找 有0,0调到最上面 0213
题目给了1, 寻找 有1,1调到最上面 1023
题目给了7, 寻找没有7,写7,最底3的淘汰,发生了一次缺页中断,记下3;7102
题目给了0,寻找 有0,0调到最上面 0712
至此整个表格都做好了。详尽吧。再不会的要打屁屁了。

计算 缺页中断率
缺页中断次数(先填空的+淘汰的次数)除以页面引用次数。(就是人家给你的数的总数)*100%
(4+4)/19*100%=42.3%
好了。都完成了。

三句话总结:
lru算法是也从上往下放数字,
有的调到最上面,(就这点与FIFO不同)
没有的就把最下面的挤出去(淘汰,发生缺页中断)

第三个例题

LRU算法,缺页是什么概念?怎么计算缺页次数?
有一个虚拟存储系统,分配给某个进程3 页内存(假设开始时内存为空),页面访问序列是:2,3,2,1,5,2,4,5,3,2,5,2.若采用LRU 页面淘汰算法,缺页次数为( ).

首先2,3,2这三页进入内存(进程只分配到3个页面,切顺序为由内到外,第二个2进入时不缺页,所以共缺页2次

1进入时,内存不满且内存中没有1这个页面即第1个进入内存,所以顺序是2,3,1(共缺页3次)

下一个进入的是5,替换3(共缺页4次),得到2,1,5;

下一个进入的是2,内存中有2号页面进行下一个页面;

下一个进入4,4替换1,得到2,5,4(共缺页5次);

下一个进入5,内存中有5号页面,进行下一个页面;

下一个进入3,3替换2,得到3,5,4(共缺页6次);

下一次进入2,2替换4,得到3,5,2(共缺页7次);

后面2号和5号内存中均存在,则不需要替换.所以一共发生了7次缺页.

原创粉丝点击