FIFO算法和LRU算法以及缺页
-
缺页:
缺页是引入了虚拟内存后的一个概念。操作系统启动后,在内存中维护着一个虚拟地址表,进程需要的虚拟地址在虚拟地址表中记录。一个程序被加载运行时,只是加载了很少的一部分到内存,另外一部分在需要时再从磁盘载入。被加载到内存的部分标识为“驻留”,而未被加载到内存的部分标为“未驻留”。操作系统根据需要读取虚拟地址表,如果读到虚拟地址表中记录的地址被标为“未驻留”,表示这部分地址记录的程序代码未被加载到内存,需要从磁盘读入,则这种情况就表示"缺页"。这个时候,操作系统触发一个“缺页”的硬件陷阱,系统从磁盘换入这部分未“驻留”的代码。
简单来说:下一个页面访问需要新写入内存就是缺页,下一个页面已经存在,不需要重新写入内存就是不缺页。
-
先进先出FIFO算法:
- 原理:优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。
- 缺点:FIFO算法还会产生当所分配的物理块数增大而页故障数不减反增的异常现象
-
最近最久未使用LRU算法:
- 原理:根据前面页面的情况,将最久没访问的页面移除
题目:
在页式虚拟存储管理系统中,若某进程依次访问的页面的页号为4,3,2,1,4,3,5,4,3,2,1,5。分配3块主存块,请分别填写下表,并计算缺页次数和缺页率。
FIFO:
物理块从上向下依次写入页面
访问页面 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
物理块1 | 4 | 4 | 4 | 1 | 1 | 1 | 5 | 5 | 5 | 5 | 5 | 5 |
物理块2 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 4 | 2 | 2 | 2 | |
物理块3 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 1 | 1 | ||
是否缺页 | Y | Y | Y | Y | Y | Y | Y | N | N | Y | Y | N |
缺页次数:9 缺页率:9/12
LRU:
访问页面 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
物理块1 | 4 | 4 | 4 | 1 | 1 | 1 | 5 | 5 | 5 | 2 | 2 | 2 |
物理块2 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 4 | 4 | 1 | 1 | |
物理块3 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 5 | ||
是否缺页 | Y | Y | Y | Y | Y | Y | Y | N | N | Y | Y | Y |
缺页次数:10 缺页率:10/12
顺便说下最佳算法:
原理:通过对后面还没有访问的页面的情况进行判断,将后面最近的不会用上的页面移除
访问页面 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
物理块1 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 2 | 2 | 2 |
物理块2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 1 | 1 | |
物理块3 | 2 | 1 | 1 | 1 | 5 | 5 | 5 | 5 | 5 | 5 | ||
是否缺页 | Y | Y | Y | Y | N | N | Y | N | N | Y | Y | N |
缺页次数:7 缺页率:7/12