按需调页
1. 原理
按需调页:只有程序执行需要时才载入页,那些从未访问的页不会调入到物理内存,也把这种页交换方式称为懒惰交换。
下图为按需调页的过程:
当进程要访问的页不在内存中时,会触发页错误陷阱中断,在中断处理函数中将要访问的也载入到物理内存中。
页错误陷阱的处理
- 检查进程的内部页表,确定引用是否合法;
- 若非法,终止进程;若合法,调入页面;
- 从空闲链表中找到一个空闲帧;
- 调度磁盘操作,将页调入刚分配的帧中;
- 修改内部表和页表,表示页已在内存中;
- 退出中断;
此时进程已经可以访问所需的页,就好像它的所有页都在内存中。
注意:在退出页错误陷阱后会重新执行上一条指令。
按需调页会出现两种极端情况:
- 所有页都不在内存中,进程每执行完一页就产生页错误;
- 一条指令可能会访问多个页,从而产生多个页错误;
在实际中这两种情况出现的较少,由于程序具有局部引用,这使得按需调页性能较为合理。
2. 性能分析
现定义有效访问时间如下:
有效的访问时间=(1-p) * ma + p * pf
其中p
为页错误概率,ma
为内存访问时间,pf
为也错误时间。
假定:ma=200us, pf=8ms
则有:有效访问时间=200+7999800 * p
可知:按需调页的性能与页错误概率相关。
此外另一个提升性能的方法是引入交换空间,磁盘I/O到交换空间要比到文件系统要快,因此在进程开始时将文件复制到交换空间,从交换空间进行按需调页,通过降低内存访问时间来提高性能。