缺页中断

什么是缺页中断:算法

       在计算机系统中,为了提升主存利用率,每每把辅助存储器(如磁盘)做为主存储器的扩充,使多道运行的做业的所有逻辑地址空间总和能够超出主存的绝对地址空间。用这种办法扩充的主存储器称为虚拟存储器。数组

       模拟分页式存储管理中硬件的地址转换和产生缺页中断。分页式虚拟存储系统是把做业信息的副本存放在磁盘上,看成业
被选中时,可把做业的开始几页先装入主存且启动执行。为此,在为做业创建页表时,应说明哪些页已在主存,哪些页还没有装入主存。       操作系统

       做业执行时,指令中的逻辑地址指出了参加运算的操做存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式“绝对地址=块号×块长+单元号”计算出欲访问的主存单元地址。若是块长为2 的幂次,则可把块号做为高地址部分,把单元号做为低地址部分,二者拼接而成绝对地址。若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操做系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再从新执行这条指令。设计一个“地址转换”程序来模拟硬件的地址转换工做。当访问的页在主存时,则造成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。
       进程线性地址空间里的页面没必要常驻内存,在执行一条指令时,若是发现他要访问的页没有在内存中(存在位为0),那么中止该指令的执行,并产生一个页不存在异常,对应的故障处理程序可经过从外存加载加载该页到内存的方法来排除故障,以后,原先引发的异常的指令就能够继续执行,而再也不产生异常。设计

页面调度算法:进程

       页式虚拟存储器实现的一个难点是设计页面调度(置换)算法,即将新页面调入内存时,若是内存中全部的物理页都已经分配出去,就要按某种策略来废弃某个页面,将其所占据的物理页释放出来,好的算法,让缺页率下降。常见的有先进先出调度算法(FIFO),最近最少调度算法,最近最不经常使用调度算法。内存

缺页中断的计算:效率

         程序编制的方法不一样,对缺页中断的次数有很大影响。硬件

例如:有一个程序要将128×128的数组置初值“0”。现假定分给这个程序的主存块数只有一块,页面的尺寸为每页128个字,数组中的元素每一行存放在一页中,开始时第一页在主存。若程序以下编制:分页

    Var A: array[1..128] of array [1..128] of integer;            程序

                for j := 1 to 128

                    do for i := 1 to128

                         do A[i][j]:=0

则每执行一次A[i][j] :=0就要产生一次缺页中断,因而总共要产生(128×128-1)次缺页中断。

若是从新编制这个程序以下:

    Var A: array[1..128] of array[1..128] of integer;

                    for i := 1 to128

                            do for j := 1 to128

                                do A[i][j] := 0

那么总共只产生(128-1)次缺页中断。

显然,虚拟存储器的效率与程序的局部化程度密切相关。程序的局部化有两种:时间局部化和空间局部化。

相关文章
相关标签/搜索