按需调页算法

在选择程序执行的时候,可以将整个程序载入到内存,有的程序是可以在开始执行的时候带有一组用户可选的选项,根据选项是否使用然后再去调入相应的页,这种技术就称为按需调页

按需调页常常为虚拟内存系统所采用,对于按需调页虚拟内存,只有程序执行需要时才会去载入页,那些从未访问的页是不会调入到物理内存中的,按需调页系统其实就是进程驻留在第二级存储器上,当需要执行进程的时候,就将它换入内存,这个技术采用的是懒惰交换,懒惰交换只有在需要页的时候,才会将它调入内存
这里写图片描述

在调入进程的时候,调页程序推测在该进程再次换出的之前会用到哪些页,然后调页程序不是调入整个进程,而是把那些必须的页给调入内存,这样的话,调页程序就避免了读入那些不使用的页,也就减少了交换时间和所需的物理内存空间

如果我们要使用这种方案的话,我们就需要一定形式的硬件支持来区分哪些页在程序当中,哪些页在磁盘当中,我们可以利用有效-无效位来进行描述,如果该位设置为有效时就表示相关的页既合法也在内存当中,当该位设置为无效的时候,也就是不在进程的逻辑地址空间当中,或者是有效的但是在磁盘上,对于不在内存当中的页其页表条目设置为无效,或者包含该页在磁盘上的地址

这里写图片描述

如果当进程试图去访问那些没有调入内存当中的页的时候,对标记为无效的访问会产生页错误陷阱,分页硬件在进行页表转换地址的时候,发现了已经设置了无效位的话就会引起中断,然后操作系统处理,这种陷阱就是由于操作系统未能将所需的页调入内存当中所引起的

处理这种页错误我们可以这么做

  • 1、检查进程的内部页表(通常和PCB一起保存),以确定该引用是合法还是非合法的地址访问
  • 2、如果引用非法,那么终止进程,如果引用有效但是尚未调入页面,那么现在就去调入
  • 3、找到一个空闲帧(比如从空闲镇链表当中可以去选取一个)
  • 4、调度磁盘操作,以便将所需要的页调入刚刚分配的帧
  • 5、当磁盘完成读操作之后,修改进程的内部表和页表,以表示该页在内存当中了
  • 6、重新开始因陷阱而中断的指令,进程现在能访问所需的页

按需调页需要有页表,该表保存有效-无效位或保护位的特定值,还有一个就是次级存储器,该次级存储器就是用来保存不在内存当中的页,次级存储器通常为快速磁盘,它通常称为交换设备,用于交换的这部分磁盘称为交换空间

猜你喜欢

转载自blog.csdn.net/zcmuczx/article/details/80424223