按需调页,使用懒惰交换->只有在需要页时,才调入内存,
交换程序(swapper)对整个进程进行操作
调页程序(pager)只是对进程的单个页进行操作
对标记为无效的访问会产生页错误陷阱
纯粹按需调页(pure demand paging)
一条指令可能访问多个页的内存(一页用于指令,其它页用于数据)则一页可能产生多个页错误, 不好的系统性能。 局部引用(locality of reference)
页表:有效无效位
次级存储器 :用来保存不在内存中的页, 快速磁盘,交换设备, 用于交换的这部分磁盘称为交换空间(swap space)
请求调页的关键要求 :能够在页错误后重新执行指令, 在出现页错误时,保存中断进程的状态(寄存器, 条件代码, 指令计数器)
若页错误出现在指令获取时, 可以再次获取指令
若出现在获取操作数时, 那么可以再次获取指令, 再次译码指令,然后再次获取操作数。
9.2.2 按需调页的性能
p为页错误的概率, p接近于0, 页错误越少, 那么有效访问时间为 :
有效访问时间 = (1-p) * ma + p * 页错误时间
按需调页的另一个重要方面 : 交换空间 的处理和使用
磁盘I/O到交换空间通常比到文件系统要快。 因为 交换空间 按大块来分配的, 并不使用文件查找和间接分配方法
如果在进程开始时将整个文件镜像复制到交换空间, 并从交换空间执行按页调度, 那么有可能获得更好的调页效果,另一选择是开始时从文件系