内存换入/换出
虚拟内存式实现分段和分页的关键,换入换出是虚拟内存的关键。
虚拟内存就是操作系统给进程提供的一个规整的、总长度为4GB(32位操作系统)的地址空间,用户可以随意访问这个空间中的任何一个地址。
实际物理内存可能比4GB要小,所以4GB的虚拟内存不可能全部映射到物理内存上。比如说物理内存只有1GB,如何用这1GB的物理内存提供给用户一个4GB的感觉呢?这就是换入换出问题。
用换入换出实现比较大的虚拟内存。
换入
实现换入的方法就是请求调页。
虚拟地址是0-4G随意的,当访问虚拟地址发现物理地址里没有,既缺页无法取指执行时,需要调页,MMU查页表发现缺页会产生一个缺页中断。这时候就要在中断里进行缺页处理,从磁盘里找到相应的内容,在内存里找个空闲页载入进去。然后可以继续执行前面的指令了。

从用户的角度来看,无非是执行某一条指令的时候稍稍慢了一点。通过换页,让用户使用到了完整的0-4G内存。
具体程序,要从缺页中断开始考虑,从中断开始看。
比如说缺页中断为14号,Page fault,在系统初始化要设置好中断处理函数
中断处理是一段汇编函数
换出
换出和换入实际上时合在一起工作的。换入换出的目的就是实现虚拟内存。
函数get_free_page()不一定总是有新的页,因此换出的主要问题时淘汰哪个页。
换出的代码也是在这个函数里的,有空闲的直接换入,没有空闲的,就要挑一个换出。
本质上又是算法的问题了。
最简单的方法就是FIFO。
最优置换OPT
最近最少使用原则LRU
LRU算法实现
clock算法
页框个数分配与全局置换
分配给一个进程的页框应该要合理。
换入换出(swap in, swap out),在安装Ubuntu的时候,会要求去配置swap分区,这是实现虚拟内存的一个分区,虚拟内存时实现段页的核心,进程。
最后更新于