美文网首页OS
请求分页管理方式

请求分页管理方式

作者: HRADPX | 来源:发表于2019-07-28 18:44 被阅读0次

    前言

      本文接着上文虚拟内存技术的实现,虚拟内存技术的三种实现:请求分页管理方式、请求分段方式、请求段页管理方式。这三种方式只介绍请求分页管理方式。
      本文内容

    1页表机制

      回顾请求分页存储管理与基本分页存储管理的主要区别:
      (1) 在程序执行过程中,当所访问的信息不在内存中时,由操作系统负责将所需的信息从外存调入内存,然后继续执行程序。
      (2) 若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。
      所以,和基本分页管理相比,请求分页管理中,为了实现“请求调页”,操作系统需要知道每个页面是否已经调入内存;如果没有调入,需要知道该页面在外存中的哪个地方。
      另一方面,当内存空间不够时,要实现“页面置换”,操作系统需要通过某些指标来决定到底换出哪些页面;有的页面没有被修改过,就不用再浪费时间写回外存。有的页面修改过,就需要将外存中的旧数据覆盖。因此,操作系统也需要记录各个页面是否被修改的信息。
      请求分页管理方式的页表信息如下:


      所以相对于基本分页存储的页表,请求分页存储的页表新增了状态位、访问字段、修改位、外存地址四个字段。各个字段的作用见上图。
      基本分页存储管理的页表称为页表基本页表,请求分页存储管理的页表通常称为请求页表。

    2 缺页中断机构

      假设在一个请求分页存储系统中,页表和内存以及外存信息如下:


    从请求页表中可以看出,此时1号页和2号页在内存中,而0号页不在内存。以及各个页面在外存中存放的位置。

      如果此时要访问一个逻辑地址 = (页号:页面号) = (0,1024),为了访问这个地址,需要查询请求页表,缺页中断机构就会根据这个查询结果作出是否发出缺页中断指令。如果当前要访问的页不在内存中,缺页中断机构会发出一个缺页中断信号,然后由操作系统的缺页中断程序处理中断
      由于缺页中断处理过程需要I/O操作,把页面从内存调入内存,在等待I/O操作完成的过程中,缺页的进程需要被阻塞,放入阻塞队列,调页完成后再将其唤醒,放入就绪队列。

       2.1 存在空闲块

      如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表相应的页表项。
      下图表示调入0号页之后的状态:

       2.2 不存在空闲块

      如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页在内存期间被修改过,则要将其写回外存。未修改过的页面不需要写回外存。
      对于上例,如果选择淘汰2号页,由于2号页被修改过,所以需要将其写回外存,之后2号的内存空间就可以给0号块使用。

      缺页中断是因为当前执行的指令想要访问的目标页面未调入内存而产生的,因此属于内中断。
      一条指令在执行期间,可能产生多次缺页中断。(如copy A to B,即将逻辑地址A中的数据复制到逻辑地址B,而A和B属于不同的页面,则有可能产生两次中断)。


    3 地址变换

      和基本分页存储管理的地址变换相比,区别在于:

    (1) 查到页表项时需要进行判断,判断页面是否在内存中。
    (2) 当需要调入页面时,但有没有空闲内存时,需要进行页面置换。
    (3) 当页面需要调入或调出,需要修改请求页表中新增的表项。

      (1) 根据逻辑地址得到页号和页内偏移量。
      (2) 对页号进行越界判断。
      (3) 访问页表判断页是否在内存中,如果在继续执行程序。
      (4) 如果访问的页不在内存中,产生缺页中断请求,当前进程阻塞,缺页中断程序从根据页表从外存找到缺失的页。
      (5) 判断内存空间是否已满,未满,将缺页调入内存,修改页表。如果已满,从内存中选择一个页面置换,如果页面发生修改,需要将修改写回外存,然后再将缺页调入内存,并修改页表。
      (6) 页面调入后,阻塞的进程会处于就绪态等待处理机调度。

      几个细节问题

    (1) 只有“写指令”页表才需要修改“修改位”。并且如果有快表机构,一般来说只需要修改快表中的数据,只有要将快表项删除时才需要写回内存中的慢表。这样可以减少访问内存次数。
      这也就是说,如果存在快表机构,当修改了一个页面时,只需要修改快表中的相应的页表项,而不需要修改内存中的页表,一方面快表操作更快,另一方面还减少了访问内存次数,否则一次修改要修改两个表。
    (2) 和普通中断一样,缺页中断也需要保留CPU现场,以便进程再次运行时能从中断的状态继续运行。
    (3) 这里换成那个页面是通过页面置换算法决定的,页面置换算法见下一节页面置换算法
    (4) 换入/换成页面都需要启动慢速的I/O操作,可见,如果换入/换成过于频繁,会有很大的开销。
    (5) 页表调入内存后需要修改慢表和快表两个表,但是这和(1) 并不冲突。

    ps:请求分页系统中的页表应该称请求页表,由于麻烦,后面的部分我没有进行区分了,都叫成了页表,读者明白就可以了。

    4 小结

      本文完

    相关文章

      网友评论

        本文标题:请求分页管理方式

        本文链接:https://www.haomeiwen.com/subject/fpcprctx.html