面试题答案
一键面试页面置换算法与部分装入策略协同工作
- FIFO(先进先出)置换算法:
- 协同方式:在部分装入策略下,当内存空间不足需要置换页面时,FIFO算法选择装入内存时间最久的页面进行置换。操作系统维护一个页面装入时间的队列,每次置换时,从队列头部选择页面移除。
- 举例:若系统中有页面A、B、C先后装入内存,当需要置换页面时,优先置换页面A。
- LRU(最近最少使用)置换算法:
- 协同方式:LRU算法记录每个页面最后一次被访问的时间。在部分装入策略导致内存不足需置换页面时,选择最长时间未被访问的页面置换。它通过一个链表或者计数器机制来跟踪页面访问情况。
- 举例:若页面A、B、C依次被访问,之后一段时间内仅访问了B和C,当内存不足时,由于A最长时间未被访问,会置换A。
- LFU(最不经常使用)置换算法:
- 协同方式:LFU算法统计每个页面的访问频率。在部分装入策略下内存不足时,优先置换访问频率最低的页面。可以通过为每个页面维护一个访问次数计数器来实现。
- 举例:若页面A访问了1次,页面B访问了3次,页面C访问了5次,当需要置换页面时,优先置换A。
不同置换算法在特定工作负载下对部分装入策略性能的影响
- FIFO算法:
- 顺序访问工作负载:性能较好。例如,当程序按顺序依次访问一组页面,FIFO置换算法能够按照页面装入顺序合理置换,不会频繁产生缺页。
- 循环访问工作负载:性能较差。比如,程序循环访问少量页面,FIFO会不断置换刚刚装入又即将被访问的页面,产生Belady现象(在分页系统中,分配给进程的物理块数增多,缺页次数反而增加的现象),导致缺页率上升。
- LRU算法:
- 局部性原理明显的工作负载:性能很好。如果程序在一段时间内集中访问某些页面,LRU能很好地保留这些页面,减少缺页次数。例如,在执行一个包含局部循环的程序时,LRU能有效缓存循环中使用的页面。
- 访问模式随机的工作负载:性能一般。由于无法利用访问的局部性,LRU可能会频繁置换页面,导致缺页率较高。
- LFU算法:
- 访问频率稳定的工作负载:性能较好。若页面的访问频率在一段时间内相对稳定,LFU能准确置换访问频率低的页面,减少不必要的页面调入调出。
- 突发访问工作负载:性能较差。例如,某个页面原本访问频率低,但突然有大量访问请求,LFU可能会过早置换该页面,导致缺页率升高。