虚拟内存
为什么要有虚拟内存
- 有些进程实际需要的内存很大,超过物理内存的容量,比如一个几十G的游戏,要运行在内存为8G的计算机上
- 由于多道程序设计,主存是同时可以存放多个进程的逻辑及数据的,这就使得每个进程可用的物理内存更加稀缺
- 不可能无限增加物理内存,物理内存总会有不够的时候
虚拟内存是什么
- 虚拟内存是操作系统内存管理的关键技术
- 使得多道程序运行和大程序运行成为现实
- 把程序使用内存划分,将部分暂时不使用的内存放置在辅存,这和局部性原理室友关系的,因为程序所使用的内存并不是一次性所有的数据都去读写,所以先将暂时不使用的内存放置在辅存中。
所以虚拟内存的本质就是通过一些软件的逻辑的设计来解决物理内存不足的问题。
(局部性原理:指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。)
逻辑地址空间
- 逻辑地址空间是指进程可以使用的内存空间
- 逻辑地址空间的大小仅受CPU地址长度限制
- 32位地址最大逻辑空间为4G
- 逻辑地址空间是一个进程运行时程序指令与程序数据可以用的相对地址空间,假设一个32位的操作系统,那么每个进程最多都可以使用到4G的内存
物理地址空间
- 物理地址即指向物理内存的存储空间
- 物理地址空间是指程序运行过程在物理内存分配和使用的地址空间
逻辑地址空间是需要通过一定的转换才能转换到物理地址空间,才可以对物理地址空间中的数据进行操作。
程序在编写的时候是保存在磁盘中的,而在其编译之后,就会有自己的逻辑地址空间,而这个逻辑地址空间的数据在实际运行的时候是要加载到物理内存中的,由于逻辑地址空间和物理内存不一样,所以需要有映射的关系。
所以
- 程序运行时,由于有虚拟内存,就不需要全部装入内存,装在部分即可。
- 如果访问页不在内存,则发出缺页中断,发起页面置换。
- 从用户层面看,程序拥有很大的空间,即是虚拟内存
所以虚拟内存实际是对物理内存的补充,速度接近于内存,成本接近于辅存。
综上
- 替换策略发生在Cache-主存层次、主存-辅存层次
- Cache-主存层次的替换策略主要是为了解决速度问题
- 主存-辅存层次主要是为了解决容量问题