缺页中断过程详解

缺页中断是操作系统管理内存时的一种机制,用于处理虚拟地址到物理地址映射未找到的情况。当发生缺页中断时,进程会被阻塞,然后操作系统会检查内存是否有空闲页框。如果有,就调入页面并更新页表;如果没有,会通过页面置换算法淘汰一页。淘汰页如果被修改过,需先写回磁盘。这个过程涉及用户态到内核态的切换、虚拟地址到物理地址的转换,以及可能的上下文切换。页面内容从磁盘读取后,更新页表并恢复进程执行。
摘要由CSDN通过智能技术生成

缺页中断机构

总而言之:

对于我们的缺页的访问,会发生一个缺页中断。(缺页中断由当前指令发出,所以属于内中断

中断后该程序就阻塞了,然后等待中断程序结束,再执行。

中断程序判断,内存中是否有空闲内存块:

  • 如果有,就调入该内存块,并且修改页表项。
  • 如果没有,则启动调度算法选择一个页面淘汰。调入该页面。

如果这个淘汰的页面有被修改过,那么就要把它重新写进外存。没有修改就直接淘汰。(所以说,我们从外存调入内存,是进行的复制。

产生缺页中断的几种情况

1、当内存管理单元(MMU)中确实没有创建虚拟物理页映射关系,并且在该虚拟地址之后再没有当前进程的线性区(vma)的时候,可以肯定这是一个编码错误,这将杀掉该进程;

2、当MMU中确实没有创建虚拟页物理页映射关系,并且在该虚拟地址之后存在当前进程的线性区vma的时候,这很可能是缺页中断,并且可能是栈溢出导致的缺页中断;

3、当使用malloc/mmap等希望访问物理空间的库函数/系统调用后,由于linux并未真正给新创建的vma映射物理页,此时若先进行写操作,将和2产生缺页中断的情况一样;若先进行读操作虽然也会产生缺页异常,将被映射给默认的零页,等再进行写操作时,仍会产生缺页中断,这次必须分配1物理页了,进入写时复制的流程;

4、当使用fork等系统调用创建子进程时,子进程不论有无自己的vma,它的vma都有对于物理页的映射,但它们共同映射的这些物理页属性为只读,即linux并未给子进程真正分配物理页,当父子进程任何一方要写相应物理页时,导致缺页中断的写时复制;

步骤

当进程执行过程中发生缺页中断时,需要进行页面换入,步骤如下:

  1. 首先硬件会陷入内核,在堆栈中保存程序计数器。大多数机器将当前指令的各种状态信息保存在CPU中特殊的寄存器中。

  2. 启动一个汇编代码例程保存通用寄存器及其它易失性信息,以免被操作系统破坏。这个例程将操作系统作为一个函数来调用。

    1. (在页面换入换出的过程中可能会发生上下文换行,导致破坏当前程序计数器及通用寄存器中本进程的信息)
  3. 当操作系统发现是一个页面中断时,查找出来发生页面中断的虚拟页面(进程地址空间中的页面)。这个虚拟页面的信息通常会保存在一个硬件寄存器中,如果没有的话,操作系统必须检索程序计数器,取出这条指令,用软件分析该指令,通过分析找出发生页面中断的虚拟页面。

  4. 检查虚拟地址的有效性及安全保护位。如果发生保护错误,则杀死该进程。

  5. 页面调度(也就是算法过程,看算法整理笔记

    1. 操作系统查找一个空闲的页框(物理内存中的页面),如果没有空闲页框则需要通过页面置换算法找到一个需要换出的页框。

    2. 如果找的页框中的内容被修改了,则需要将修改的内容保存到磁盘上,此时会引起一个写磁盘调用,发生上下文切换(在等待磁盘写的过程中让其它进程运行)。

      1. (注:此时需要将页框置为忙状态,以防页框被其它进程抢占掉)
    3. 页框干净后,操作系统根据虚拟地址对应磁盘上的位置,将保持在磁盘上的页面内容复制到“干净”的页框中,此时会引起一个读磁盘调用,发生上下文切换。

  6. 当磁盘中的页面内容全部装入页框后,向操作系统发送一个中断。操作系统更新内存中的页表项,将虚拟页面映射的页框号更新为写入的页框,并将页框标记为正常状态。

  7. 恢复缺页中断发生前的状态,将程序指令器重新指向引起缺页中断的指令。

  8. 调度引起页面中断的进程,操作系统返回汇编代码例程。

  9. 汇编代码例程恢复现场,将之前保存在通用寄存器中的信息恢复。

  10. 其实缺页中断的过程涉及了用户态和内核态之间的切换,虚拟地址和物理之间的转换(这个转换过程需要使用MMU和TLB),同时涉及了内核态到用户态的转换。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值