缺页中断与页面置换算法

目录

缺页中断

 页面置换算法:

LRU算法


缺页中断

        缺页:如果进程被调度,该进程需要使用的外存页(数据)不存在于数据块中,这个现象就叫做缺页。如果这个数据此时不在,就会将这个数据从加入到数据块首部。缺页本身是一种中断,与一般的中断一样,需要经过4个处理步骤:

  1. 保护CPU现场
  2. 分析中断原因
  3. 转入缺页中断处理程序进行处理
  4. 恢复CPU现场,继续执行

        缺页中断:进程线性地址空间里的页面不必常驻内存,在执行一条指令时,如果发现他要访问的页没有在内存中(存在位为0),那么停止该指令的执行,并产生一个页不存在异常,对应的故障处理程序可通过从外存加载该页到内存的方法来排除故障,之后,原先引起的异常的指令就可以继续执行,而不再产生异常。 

缺页中断是由于所要访问的页面不存在于内存时,由硬件所产生的一种特殊的中断,因此,与一般的中断存在区别:

  • 在指令执行期间产生和处理缺页中断信号。
  • 一条指令在执行期间,可能产生多次缺页中断。
  • 缺页中断返回时,执行产生中断的那一条指令,而一般的中断返回时,执行下一条指令。

 页面置换算法:

        进程运行过程中,如果发生缺页中断,而此时内存中又没有空闲的数据块,为了能够把所缺的页面装入内存,系统必须从内存中选择一页调出到磁盘的对换区。此时把那个页面换出则需要根据一定的页面置换算法(PPA)来确定。

        将新页面调入内存时,如果内存中所有的物理页都已经分配出去,就要按某种算法(页面置换算法)来废弃某个页面,将其所占据的物理页释放出来,好的算法会让缺页率降低。常见的页面置换算法有:

  • 先进先出调度算法(FIFO)
  • 最近最不常用调度算法(LRU,根据使用频率判断)
  • 最佳置换算法(OPT)

LRU算法

一、概念:

  • LRU算法:最近最不常用调度算法(least recently used)  ,简单来说就是将数据块中,每次使用过的数据放在数据块的最前端,然后将存在的时间最长的,也就是数据块的末端的数据剔除掉,这就是LRU算法。
  • 数据块插入与剔除:每次有新数据到来时,会将其放入数据块首部,当数据每次被访问时,将这个数据插入数据块的首部;如果数据块满了,每次新进的数据都会将数据块尾部的数据挤出数据块。

二、基本思想:

        选择在最近一段时间内最久未被使用的页面进行淘汰。

三、特点:

  • 优点:由于考虑程序访问的时间局部性,一般能有较好的性能;实际应用多。
  • 缺点:实现需要较多的硬件支持,会增加硬件成本。

四、缺页次数计算:

        例:假如现在有一组进程:进程编号为1,2,3,4,5 
                虚拟页式存储管理的数据块大小为3(也就是这个页式存储区的大小,能放置3个页面)。 
                假如进程被调度顺序为3.4.2.1.4.5.3.4.5.1.2。 
       问:在该访问中发生的缺页次数是多少? 


       解: 进程将要被调度的顺序:

               

             

           

  • step1:开始时数据块为空,第一个进程(进程3)被调度时,未命中数据块缓存,缺页并将进程对应数据放入数据块中
  • step2:接着调用进程4,此时数据块中也没有4的数据,未命中数据块缓存,缺页并将进程对应数据放入数据块中
  • step3:同step1、step2,完成后数据块已存满数据,缺页
  • step4:接着调用进程1,由于数据块没有1的数据且数据块已满,故剔掉队尾的数据3,放入数据1,缺页。
  • step5:接着调用进程4,此时进程4的数据在数据块缓存中,故并未缺页,然后将数据4重新插入到数据块首部。

   以此类推得到最后的结果:缺页次数为8次。
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章