NOTE
3.3 虚拟内存
1. 为什么需要虚拟内存 为了解决物理内存不够用的问题。 比如我们有一个16GB游戏,但是物理内存只有4GB,这个怎么运行起来 传统的存储管理有两个问题: - 作业必须一次性全部调入内存 - 作业在运行期间必须常驻内存 说白了就是内存利用率不高,很多用不到的数据也会长期占用内存 2. 什么是虚拟内存
这是历史学习笔记,可能存在过时或不完整的理解。
1. 为什么需要虚拟内存
为了解决物理内存不够用的问题。 比如我们有一个16GB游戏,但是物理内存只有4GB,这个怎么运行起来
传统的存储管理有两个问题:
- 作业必须一次性全部调入内存
- 作业在运行期间必须常驻内存
说白了就是内存利用率不高,很多用不到的数据也会长期占用内存
2. 什么是虚拟内存
段页式存储+局部性原理+缺页中断+页面置换
- 把内存+磁盘的空间编址形成进程的逻辑地址空间,把内存编址形成物理地址空间。进程逻辑地址按段拆分,段内则按页拆分,物理地址按页拆分,以页面为单位把进程的页面装进物理内存中的页面中
- 根据局部性原理,操作系统只把程序的部分指令和数据(当前执行的指令和数据以及周围的指令和数据)加载到内存中,其他依旧存放在辅存中;
- 当访问的指令和数据不在内存中时,由操作系统执行缺页中断,把这部分指令和数据加载到内存中来;
- 当内存不够用的时候,由操作系统执行页面置换,把内存中用不到的指令和数据放回辅存
2.1. 虚拟内存的底层原理
2.1.1. 段页式存储管理
2.1.2. 局部性原理
- 时间局部性:被引用过的存储器位置可能会被再次引用
- 空间局部性:被引用过的存储器位置附近的数据很有可能将被引用
根据这个原理,程序运行时无需全部装入内存,装载部分(当前运行的指令及其周围的指令)即可
2.1.3. 缺页中断
当访问的指令和数据不在内存中时,由操作系统执行缺页中断,把这部分指令和数据加载到内存中来
2.1.4. 页面置换
3. Linux swap

4. Windows
