摘要:在这里将缺页中断进行简单的描述和页面置换算法的题目进行分析和记录,以供参考。
缺页中断
在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内存中。每当所要访问的页面不在内存时,会产生一次缺页中断,此时操作系统会根据页表中的外存地址在外存中找到所缺的一页,将其调入内存。
缺页本身是一种中断,与一般的中断一样,需要经过4个处理步骤:
保护CPU现场
分析中断原因
转入缺页中断处理程序进行处理
恢复CPU现场,继续执行
但是缺页中断时由于所要访问的页面不存在与内存时,有硬件所产生的一种特殊的中断,因此,
在指令执行期间产生和处理缺页中断信号
一条指令在执行期间,可能产生多次缺页中断
缺页中断返回时,执行产生中断的那一条指令,而一般的中断返回时,执行下一条指令
页面置换算法
最佳置换算法(Optimal,OPT)
基本思想
置换以后不再访问,或者在将来最迟才会被访问的页面,缺页中断率最低。但是该算法需要依据以后各页的使用情况,而当一个进程还未完成的时候,很难估计哪个页面是以后不再使用或者最长时间以后才会用到的页面。所以该算法是不能实现的。但还算法任然具有意义,作为衡量其他算法优劣的一个标准。
算例
采用固定分配局部置换的策略,嘉定系统为某进程在内存中分配了3个物理块,页面访问顺序为2、3、2、1、5、2、4、5、3、2、5、2。假定系统未采用预调页策略,即未事先调入任何页面。进程运行时,一次将2、3、1三个页面调入内存,发生3次缺页中断。当第一次访问页面5时,产生第4次缺页中断,根据OPT算法,淘汰页面1,因为它在以后不会在使用了;第5次缺页中断时,淘汰页面2,因为它在5、3、2三个页面中,是在将来最迟才会被页面访问的页面。以此类推:
注意:第4次中断时将最后不会访问的1剔除,将最后才访问的3放入最下面的内存块中,以后的调度过程中,最后不会访问或最后才被访问的页面总是放在最下面的内存块中。内存块从上到下依次存放最先访问的页面。
中断次数为6,缺页中断率为6/12*100% = 50%。
P: | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
M=3 | 2 | 2 | 2 | 2 | 2 | 2 | 4 | 4 | 4 | 4 | 4 | 4 |
3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 2 | 2 | 2 | ||
1 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | ||||
F=6 | Y | Y | Y | Y | Y | Y |
先进先出置换算法(First In First Out, FIFO)
基本思想
置换最先调入内存的页面,即置换在内存中驻留时间最久的页面。按照进入内存的先后次序排列成队列,从队尾进入,从队首删除。但是该算法会淘汰经常访问的页面,不适应进程实际运行的规律,目前已经很少使用。
算例
中断次数为6,缺页中断率为9/12*100% = 75%。
P: 2 3 2 1 5 2 4 5 3 2 5 2 M=3 2 2 2 2 5 5 5 5 3 3 3 3 3 3 3 3 2 2 2 2 2 5 5 1 1 1 4 4 4 4 4 2 F=9 Y Y Y Y Y Y Y Y Y Belady异常
一般来说,分配给进程的物理块越多,运行时的缺页次数应该越少,使用FIFO时,可能存在相反情况,分配4个物理块的缺页竟然比3个物理块的缺页次数还多!
例如:进程访问顺序为0、2、1、3、0、2、4、0、2、1、3、4。M=3时,缺页中断9次。缺页中断率9/12*100% = 75%。
P: | 0 | 2 | 1 | 3 | 0 | 2 | 4 | 0 | 2 | 1 | 3 | 4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
M=3 | 0 | 0 | 0 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 4 | 4 |
2 | 2 | 2 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | ||
1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | |||
F=9 | Y | Y | Y | Y | Y | Y | Y | Y | Y |
M=4时,缺页中断10次。缺页中断率10/12*100% = 83.3%。
P: | 0 | 2 | 1 | 3 | 0 | 2 | 4 | 0 | 2 | 1 | 3 | 4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
M=4 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 4 | 4 | 4 | 3 | 3 |
2 | 2 | 2 | 2 | 2 | 2 | 0 | 0 | 0 | 0 | 4 | ||
1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | |||
3 | 3 | 3 | 3 | 3 | 3 | 1 | 1 | 1 | ||||
F=10 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
最近最久未使用置换算法(Least Recently Used, LRU)
基本思想
置换最近一段时间以来最长时间未访问过的页面。根据程序局部性原理,刚被访问的页面,可能马上又要被访问;而较长时间内没有被访问的页面,可能最近不会被访问。
LRU算法普偏地适用于各种类型的程序,但是系统要时时刻刻对各页的访问历史情况加以记录和更新,开销太大,因此LRU算法必须要有硬件的支持。算例
仍然以OPT算例为例子。
中断次数为6,缺页中断率为7/12*100% = 58.3%。P: 2 3 2 1 5 2 4 5 3 2 5 2 M=3 2 2 2 2 5 5 5 5 5 5 5 5 3 3 3 2 2 2 2 3 3 3 3 1 1 1 4 4 4 2 2 2 F=7 Y Y Y Y Y Y Y