虚拟内存一般在内存的 1.5到2倍,最小值要比内存大。因为虚拟内存需要有备份内存中所有地址数据的能力。
可以让执行进程不必完全放在内存中。允许程序比物理内存还要大。
可以实现:只有在堆和栈申请内存时,程序才会动态的申请需要内存。这样可以节省空间。
按需调页(demand paging)
需要硬件具有两个功能:
页表,支持有效位和无效位
次级存储器:保护不在内存中的页。存储虚拟内存的磁盘。 用于交换的磁盘称为交换空间(swap space)
按需调页:不在程序开始运行的时候把整个程序调入内存,而在需要时才调入相应的页。
懒惰交换:只在需要的时候,才载入页到内存。
使用调页程序而不是交换程序,交换程序是对整个进程操作,调页程序是对进程的单个页操作。
有效-无效位:可以实现区分某一页是否在内存还是磁盘上的需求。
如果进程访问无效页,
1.检查内部页表,确定引用是合法的还是非法的,
2.非法就终止进程,如果合法但是尚未调入页面,那么现在调入。
3.从空闲帧链表中选取一个。
4.将所需要的页调入刚分配的帧
5.当磁盘读操作完成后,修改进程的内部表和页表,表示该页已在内存中。
重新开始因内存访问无效而中断的指令,进程现在能访问所需的页,就好像它似乎一直在内存中一样。
纯粹按需调页:所有的页都不在内存中就开始执行进程,操作系统每访问一个页都会发生缺页中断而进行调入操作。