2019-09-12
页面置换算法
- 为保证进程的运行,系统从主存中调出一页程序或数据到磁盘的交换区,称为页面置换。
- 理论上,应该将以后不再访问,或较长时间内不访问的页面调出,但较难实现。
- 页面置换算法选择不当,或造成频繁的页面调入和淘汰,并导致系统效率急剧下降,此现象称为系统抖动。
缺页率 = 缺 页 次 数 内 存 访 问 次 数 \text{缺页率}=\frac{缺页次数}{内存访问次数} 缺页率=内存访问次数缺页次数
1. 最佳页面淘汰算法 (Optimal Replace Algorithm—OPT)
这是一种理论化的算法,选择永不使用的页,或随后很长时间内不使用的页。
但实现困难,因为需要了解“将来”要访问哪些内存页。
2. 先入先出法(FIFO)
选择在主存中停留时间最长的一页置换,即:先进入内存的页,先退出内存。
实现方式:
将装入内存的页面按照先后次序排成队列,每次总调出队首的页,新页装入队尾,
例如:用指针指向“最老的页面”。
缺点:
不一定合理,较早进入内存的可能是共享的代码或数据,调出后不久又会使用。
3. 最不经常使用算法 (Least frequently ued,LFU)
该算法在需要淘汰某一页时,首先淘汰到当前时间为止被访问次数最少的那一页。
实现方式:可通过在页表中给每一页增设一个访问计数器即可实现。每当该页被访问时,访问计数器加 1 ,而发生一次缺页中断时,则淘汰计数值最小的那一页,并将所有的计数器清零,但会增加系统开销,且周期不宜确定。
4. 最近最久未使用算法(least recently used,LRU)
基本思想:如果一个页面被访问了,那么它很可能马上又被访问,因此,可选择在最近一段时间里最久没有使用过的页面予以置换。
- 可在页表中增加“计时”标记,每被访问一次,都从0开始重新计时,选择计时值最大的调出;
- 也可以用堆栈实现。
5. 最近没有使用算法(NUR)
该算法淘汰在访问串中将来再也不出现的或是在离当前最远的位置上出现的页。这样,淘汰掉该页将不会造成因需要访问该页又立即把它调入的现象。遗憾的是,这种算法无法实现,因为它要求必须预先知道每一个进程的访问串。