缺页中断: 要访问的页不在主存,需要 *** 作系统将其调入主存后再进行访问。
缺页率: 在进行内存访问时,若所访问的页已在主存,则称此次访问成功;若所访问的页不在主存,则称此次访问失败,并产生缺页中断。若程序P在运行过程中访问页面的总次数为S,其中产生缺页中断的访问次数为F,则其缺页率为:F/s.
解:根据所给页面走向,采用FIFO淘汰算法的页面置换情况如下:这里的页面走向颤拿,即为系统要调用的页号。
在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内存中。
每当所要访问的页面不宴肢在内存时,会产生一次缺页中断,此时 *** 作系统会根据页表中的外存地址在外存中找到所缺的一页,将其调入内存。
缺页本身是一种中断,与一般的中断一样,需要经过4个处理步骤:
1. 保护CPU现场
2. 分析中断原因
3. 转入缺页中断处理程序进行处理
4. 恢复CPU现场,继续执行
缺页中断 时由于所要访问的页面不存在与内存时,有硬件所产生的一种特殊的中断,因此,与一般的中断存在区别:
1. 在指令执行期间产生和处理缺页中断信号
2. 一条指令在执行期间,可能产生多次缺页中断
3. 缺页中断返回时,执行产生中断的那一条指令,而一般的中断返回时,执行下一条指令
页面置换算法
进程运行过程中,如果发生缺页中断,而此时内存中有没有空闲的物理块是,为了能够把所缺的页面装入内存,系统必须从内存中选择一页调出到磁盘的对换区。
但此时应该把那个页面换出,则需要根据一定的 页面置换算法 来确定。
①先进先出置换算法(First In First Out, FIFO)
置换最先调入内存的页面,即置换在内存中驻留时间最久的页面。按照进入内存的先后次序排列成队列,从队尾进入,从队首删除。但是该算法会淘汰经常访问的页面,不适应进程实际运行晌洞世的规律,目前已经很少使用。
②最近最久未使用置换算法(Least Recently Used, LRU)
置换最近一段时间以来最长时间未访问过的页面。根据程序局部性原理,刚被访问的页面,可能马上又要被访问;而较长时间内没有被访问的页面,可能最近不会被访问。
LRU算法普偏地适用于各种类型的程序,但是系统要时时刻刻对各页的访问历史情况加以记录和更新,开销太大,因此LRU算法必须要有硬件的支持。
缺页中断率:缺页中断次数(先填空的+淘汰的次数)除以页面引用次数。(就是人家给你的数的总数)*100%
总结:LRU算法是也从上往下放数字,有相同的进程数就要调到最上面,其他的全部往下移,甚至被淘汰(就这点与FIFO不同)没有的就把最下面的挤出去(淘汰,发生缺页中断)
缺页中断次数越少越好,不浪费空间资源,进程能够最优进行。
缺页中断处理的详细过程1) 硬件陷入内核,在内核堆栈中保存程序计让含档数器。大多数机器将当前指令的各种状态信息保存在特殊的CPU寄存器中。
2) 启动一个汇编代码例程保存通用寄存器和其他易失的信息,以免被 *** 作系统破坏。这个例程将 *** 作系统作为一个函数来调用。
3) 当 *** 作系统发现一个缺页中断时,尝试发现需要哪个虚拟页面。通常一个硬件寄存器包含了这一信息,如果没有的话, *** 作系统必须检索程序计数器,取出这条指令,用软件分析这条指令,看看它在缺页中断时正在做什么。
4) 一旦知道了发生缺页中断的虚拟地址, *** 作系统检查这个地址是否有效,并检查存取与保护是否一致。如果不一致,向进程发出一个信号或杀掉该进程。如果地址有效且没有保护错误发生,系统则检查是否有空闲页框。如果没有空闲页框,执行页面置换算法寻找一个页面来淘汰。
5) 如果选择的页框“脏”了,安排该页写回磁盘,并发生一次上下文切换,挂起产生缺页中断的进程,让其他进程运行直至磁盘传输结束。无论如何,该页框被标记为忙,以免因为其他原因而被其他进程占用。
6) 一旦页框“干净”后(无论是立刻还是在写回磁盘后), *** 作系统查找所需页面在磁盘上的地址,通过磁盘 *** 作将其装入。该页面老旦被装入后,产生缺页中断的进程仍然被挂起,并且如果有其他可运行的用户进程,则选择另一个用户进程运行。
7) 当磁盘中断发生时,表明该页已经被装入,页表已经更新可以反映它的位置,页框也被标记为正常状态。
8) 恢复发生缺页中断指令以前的状态,程序计数器重新指向这条指令。
9) 调度引发缺页中断的进程, *** 作系统返回调用它的汇编语言例程。
10) 该例程恢复寄存器和其他状态信坦乱息
1、范围不同
一般中断只需要保护现场,然后就直接跳到需及时处理的地方。
缺页中断除了保护现场之外,还要判断内存中是否有足够的空间存储所需的页或段,然后再把所需页调进来再使用。
2、结果不同
一般中断在处理完之后返回时,执行下一条指令。
缺页中断返回时,执行产生中断的那一条指令。
3、次数不同
在扒困码指令执行期间产生和处理缺页中断信号,一条指令在执行期间,可能产生多次缺页中断。
一般中断只产生一尺誉次,发生中断指令后转入相应处理程序进行处理,恢复被中断程序现场。
扩展资料
产生缺页中断的几种情况
1、当内存管理单元(MMU)中确实没有创建虚拟物理页映射关系,并且在该虚拟地址之后再没有当前进程的线性区(vma)的时候,这将杀掉该进程。
2、当MMU中确实没有创建虚拟页物理页映射关系,并且在该虚拟地址之后存在当前进程的线性区vma的时候,这很可能是缺页中断,并且可能是栈溢出导致的缺页中断。
3、当使用malloc/mmap等希望访问物理空间的库函数/系统调用后,由于linux并未真正给新创建的vma映射物理页,此时若先进行写 *** 作,将和2产生缺页中断的情况一样;若先进行读 *** 作虽然也会产生缺页异常,将被映射给默认的零页,等再进行写 *** 作时,仍会产生缺页中断,这次必须分配1物理页了,进入写时复制的流程。
4、当使用fork等系统调用创建子进程时,子进程春哪不论有无自己的vma,它的vma都有对于物理页的映射,但它们共同映射的这些物理页属性为只读,即linux并未给子进程真正分配物理页,当父子进程任何一方要写相应物理页时,导致缺页中断的写时复制。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)