一、虚拟内存是什么?
虚拟内存类似一个桥梁,原来程序直接访问物理内存读取数据,现在程序直接访问虚拟内存
,由虚拟内存再访问物理内存。
使用虚拟内存的好处:
隔离进程、提高内存使用安全性
:每个进程直接访问虚拟内存,就像拥有了整个内存空间,实现了不同进程之间的相互隔离,无需担心因编程错误导致地址越界,影响其他进程。简化内存管理
:程序员可以使用连续的虚拟地址进行编程,而无需关注虚拟地址与物理地址的映射关系,简化了内存管理。提升了物理内存的利用率
:有了虚拟地址,操作系统只需要将进程正在使用的部分数据加载到物理内存。多个进程共享物理内存
:进程运行过程中,会加载一些动态库,这些动态库对于每个进程而言都是公用的。提供更大的可使用内存空间
:物理内存不够用时,可以将磁盘充当内存。
二、虚拟地址—>物理地址
虚拟地址到物理地址的映射
通过MMU
,即内存管理单元实现。
映射机制主要分为:分段机制
、分页机制
和段页机制
。
2.1 分段机制
段:一段连续的物理内存,不同段的内存大小可以不同。
虚拟地址:由段号+段内偏移量组成,通过段表
进行映射。
缺点:会存在内存外部碎片。
因为一个进程对应一个段,而段内部地址连续,就会出现多个段空间被回收后,由于内存小且相互不连续,而无法分配给需要大内存空间的进程。
2.2 分页机制
分页机制,把物理内存划分成连续等长的物理页,虚拟内存也划分成连续等长的虚拟页。通过页表进行映射。
虚拟地址:由页号+页内偏移量组成。
2.3 页缺失
- 硬性页缺失:物理内存中没有对应的物理页,需要从磁盘中加载到内存,而后由MMU建立虚拟页和物理页的映射关系。
- 软性页缺失:物理内存中有对应的物理页,但是虚拟页还未和物理页建立映射。
2.4 页面置换算法
当发生硬性页缺失时,如果物理内存中没有空闲的物理页面可用的话。操作系统就必须将物理内存中的一个物理页淘汰出去,这样就可以腾出空间来加载新的页面了。
- 最佳页面置换算法
- 先进先出页面置换算法
- 最近最久未使用页面置换算法
- 最少使用页面置换算法
- 时钟页面置换算法