请求页面调度 读操作系统概念第六版

时间:2022-08-27 08:18:54

       请求页面调度系统类似于分页系统加上交换。进程驻留在次级存储器上(通常为磁盘)。当需要执行进程时,将它换入内存。不过,不是将整个进程换入内存,而是使用lazy swapper。lazy swapper只有在需要页时,才将它调入内存。由于将进程看做一系列的页,而不是一个大的连续空间,因此使用“交换”从技术上来讲并不正确。交换程序对整个进程进行操作,而调页程序只是对进程的单个页进行操作。因此,在讨论有关请求页面调度时,需要使用调页程序而不是交换程序。

请求页面调度 读操作系统概念第六版

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

       对这种方案,需要一定形式的硬件支持来区分那些页在内存里,那些页在磁盘上。有效-无效位可以用于这一目的。不过,现在当该位设置为“有效”时,该值表示相关的页既合法且也在内存中。当该位设置为“无效”时,该值表示相关的页为无效或者有效但是在磁盘上。对于调入内存的页,其页表条目的设置与平常一样;但是对于不在内存的页,其页表条目设置为无效,或包含该页在磁盘上的地址。

请求页面调度 读操作系统概念第六版

       注意如果进程从不试图访问标记为无效的页,那么并没有什么影响。因此,如果推测正确并且值调入所有真正需要的页,那么进程就可如同所有页都已调入一样正常运行。当进程执行和访问那些驻留在内存中的页时,执行会正常进行。

      但是当进程试图访问那些尚未调入到内存的页时,情况又如何呢?对标记为无效的访问会产生页错误陷阱。分页硬件,在通过页表转换地址时,会发现已设置了无效位,会陷入操作系统。这种陷阱是由于操作系统未能将所需的页调入内存(以试图减少磁盘传输开销和内存需求),而不是由于试图使用非法内存地址而引起的无效地址错误。必须纠正这一疏忽。

1:检查进程的页表(通常与PCB一起保存),以确定引用是合法还是非法的地址访问。

2:如果饮用非法,那么终止进程。如果引用有效但是尚未调入页面,那么现在应调入。

3:找到一个空闲帧。

4:调入一个磁盘操作,以便将所需要的页调入刚分配的帧。

5:当磁盘读操作完成后,修改进程的内部表和页表,以表示该页已在内存中。

6:重新开始因非法地址陷阱而中断的指令。进程现在能访问所需的页,就好像它似乎总在内存中。

      要注意由于出现错误时,保存了中断进程的状态(寄存器、条件代码、指令计数),因此能按完全相同的位置和地址重新开始执行进程,只不过现在所需要的页已在内存中且可以访问。

请求页面调度 读操作系统概念第六版