缺页中断处理过程

原创 2015年07月09日 17:56:36
 缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。

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

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

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

(在页面换入换出的过程中可能会发生上下文换行,导致破坏当前程序计数器及通用寄存器中本进程的信息)

<3>当操作系统发现是一个页面中断时,查找出来发生页面中断的虚拟页面(进程地址空间中的页面)。这个虚拟页面的信息通常会保存在一个硬件寄存器中,如果没有的话,操作系统必须检索程序计数器,取出这条指令,用软件分析该指令,通过分析找出发生页面中断的虚拟页面。

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

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

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

(注:此时需要将页框置为忙状态,以防页框被其它进程抢占掉)

<7>页框干净后,操作系统根据虚拟地址对应磁盘上的位置,将保持在磁盘上的页面内容复制到“干净”的页框中,此时会引起一个读磁盘调用,发生上下文切换。

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

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

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

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

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


缺页中断处理过程详解

当进程执行过程中发生缺页中断时,需要进行页面换入,步骤如下: 首先硬件会陷入内核,在堆栈中保存程序计数器。大多数机器将当前指令的各种状态信息保存在CPU中特殊的寄存器中。 启动一个汇编代码例程保...
  • pxz_002
  • pxz_002
  • 2012年03月06日 12:03
  • 2758

linux内核分析之缺页中断

linux缺页异常程序必须能够区分由编程引起的异常以及由引用属于进程地址空间但还尚未分配物理页框的页所引起的异常。在x86-ia32体系上由do_page_fault函数处理,每个版本有所差异,现分析...
  • bullbat
  • bullbat
  • 2011年12月28日 11:39
  • 5738

缺页中断——FIFO、LRU、OPT这三种置换算法

FIFO、LRU、OPT这三种置换算法的缺页次数2缺页中断  在请求分页系统中,可以通过查询页表中的状态位类确定所要访问的页面是否存在于内存中。每当所要访问的压面不在内存时,会产生一次缺页中断,此时操...
  • u011080472
  • u011080472
  • 2016年04月21日 10:07
  • 15127

缺页中断处理

缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。...
  • fengkuangshixisheng
  • fengkuangshixisheng
  • 2014年05月21日 14:48
  • 3765

几种缺页中断算法(FIFO,LRU与LFU)的实现过程

几种缺页中断算法(FIFO,LRU与LFU)的实现过程 2015-09-05 20:34:02 分类: LINUX   最近在做笔试题,其中虚拟存储管理中几种缺页中断算...
  • jfkidear
  • jfkidear
  • 2016年10月13日 22:36
  • 2632

虚拟内存缺页中断

虚拟内存缺页中断在做了09年408的一道关于求虚存访存时间的os题,发现了一些问题:跟书上讲的流程不太一样。具体在,缺页中断流程和求EAT的部分。思考后,发现课本上的地址转换有点问题。...
  • scylhy
  • scylhy
  • 2017年07月17日 23:27
  • 940

linux在x86上的中断处理过程(详细)

Linux在x86上的中断处理过程 一:引言 在Intel的文档中,把中断分为两种。一种是异常,也叫同步同断。一种称之为中断,也叫异常中断。同步中断指的是由CPU控制单元产生,之所以称之为同步,是...
  • douyuhua0918
  • douyuhua0918
  • 2012年04月04日 21:17
  • 708

内存常识之缺页中断

什么是缺页中断:        进程线性地址空间里的页面不必常驻内存,在执行一条指令时,如果发现他要访问的页没有在内存中(存在位为0),那么停止该指令的执行,并产生一个页不存在异常,对应的故障处理...
  • CJL5678
  • CJL5678
  • 2013年06月03日 09:18
  • 15868

Linux学习总结—缺页中断和交换技术

三、Linux缺页中断处理1.请求调页中断:进程线性地址空间里的页面不必常驻内存,例如进程的分配请求被理解满足,空间仅仅保留vm_area_struct的空间,页面可能被交换到后援存储器,或者写一个只...
  • cxylaf
  • cxylaf
  • 2007年05月26日 10:30
  • 7644

Linux内核-内存管理-内存访问与缺页中断

简单描述了x86 32位体系结构下Linux内核的用户进程和内核线程的线性地址空间和物理内存的联系,分析了高端内存的引入与缺页中断的具体处理流程。先介绍了用户态进程的执行流程,然后对比了内核线程,引入...
  • feilengcui008
  • feilengcui008
  • 2015年10月16日 18:12
  • 566
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:缺页中断处理过程
举报原因:
原因补充:

(最多只允许输入30个字)