NOTE

3.3 虚拟内存

1. 为什么需要虚拟内存 为了解决物理内存不够用的问题。 比如我们有一个16GB游戏,但是物理内存只有4GB,这个怎么运行起来 传统的存储管理有两个问题: - 作业必须一次性全部调入内存 - 作业在运行期间必须常驻内存 说白了就是内存利用率不高,很多用不到的数据也会长期占用内存 2. 什么是虚拟内存

Operating System / Linux创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 为什么需要虚拟内存

为了解决物理内存不够用的问题。 比如我们有一个16GB游戏,但是物理内存只有4GB,这个怎么运行起来

传统的存储管理有两个问题:

  • 作业必须一次性全部调入内存
  • 作业在运行期间必须常驻内存

说白了就是内存利用率不高,很多用不到的数据也会长期占用内存

2. 什么是虚拟内存

段页式存储+局部性原理+缺页中断+页面置换

  • 把内存+磁盘的空间编址形成进程的逻辑地址空间,把内存编址形成物理地址空间。进程逻辑地址按段拆分,段内则按页拆分,物理地址按页拆分,以页面为单位把进程的页面装进物理内存中的页面中
  • 根据局部性原理,操作系统只把程序的部分指令和数据(当前执行的指令和数据以及周围的指令和数据)加载到内存中,其他依旧存放在辅存中;
  • 当访问的指令和数据不在内存中时,由操作系统执行缺页中断,把这部分指令和数据加载到内存中来;
  • 当内存不够用的时候,由操作系统执行页面置换,把内存中用不到的指令和数据放回辅存

2.1. 虚拟内存的底层原理

2.1.1. 段页式存储管理

段页式存储.md

2.1.2. 局部性原理

  • 时间局部性:被引用过的存储器位置可能会被再次引用
  • 空间局部性:被引用过的存储器位置附近的数据很有可能将被引用

根据这个原理,程序运行时无需全部装入内存,装载部分(当前运行的指令及其周围的指令)即可

2.1.3. 缺页中断

当访问的指令和数据不在内存中时,由操作系统执行缺页中断,把这部分指令和数据加载到内存中来

2.1.4. 页面置换

页面置换.md

3. Linux swap

4. Windows

5. 参考