目录
0 引言
对操作系统的虚拟内存、进程空间、页面置换算法进行了知识点总结,文中的图片均来自小林coding
1 虚拟内存
1.1 为什么引入虚拟内存
虚拟内存是我们操作系统用来做内存管理的,我们应用进程看到的就是虚拟内存,而不是物理内存。不直接使用物理内存的原因也很简单,倘若我们的应用进程直接操作物理内存,则在多线程并发的场景下就很有可能出现一个进程的数据覆盖掉另外一个进程数据的情况,所以引入一层虚拟内存来帮助我们进行内存管理,进程直接操作的是虚拟内存地址,然后通过CPU中的MMU单元帮助我们将虚拟内存地址转换为物理内存地址。
1.2 虚拟地址和物理地址如何实现转换
-
内存分段
程序是有若干个逻辑分段组成,可由代码段,数据段,堆段和栈段组成,不同的段有不同的属性,所以可以用分段的方式把这些段分离出来
即通过段表实现虚拟地址与物理地址之间的映射
存在的问题:
-
内存碎片(外部与内部)
-
内存交换效率低(由于内存碎片导致要进行内存交换)
-
-
内存分页
内存分段会导致内存碎片和内存交换效率低的问题,为了解决这些问题,引入了内存分页,这样我们的内存碎片就会更小,内存交换的区域也就更小,内存交换的效率也就提升了(页表是进程独有的)