操作系统会将不同进程的虚拟地址和不同内存的物理地址映射起来。程序访问虚拟地址时,由操作系统转换为不同的物理地址,当运行不同的进程时写入不同的物理地址。
虚拟内存:程序使用的内存;
物理内存:硬件的地址空间;
操作系统通过内存分段和内存分页来管理虚拟地址和物理地址之间的关系。
虚拟地址通过段表和物理地址映射。
不足之处:
(1)内存碎片
(2)内存交换率低
当产生内存碎片时,可以通过内存交换解决,但是内存交换需要把一大段连续的内存数据写到硬盘上,硬盘访问速度低,会出现卡顿。为了解决这个问题,出现了内存分页。
分页是把虚拟内存和物理内存切成一段段固定尺寸的大小,这样连续且尺寸固定的内存空间叫做页。Linux下每页大小为4KB。
虚拟地址和物理地址之间通过页表映射。页表存储在内存里,内存管理单元(MMU)将虚拟地址转换成物理地址。当内存空间不够时,操作系统会根据页面置换算法分配足够的空间。
分页的方式不是一次性把程序加载到物理内存,当用到对应的内存时再加载到内存中。
1.页面置换定义
程序要访问的物理内存不存在时,需要将页面载入内存,如果内存中没有空闲空间,则需要一定的算法来选择内存中需要被置换的页面。
2.常见的页面置换算法
(1)最佳页面置换算法:置换在未来最长时间不访问的页面。
(2)先进先出置换算法:置换最先进入内存的页面,选择在内存中存在最久的页面进行置换。
(3)最近最久未使用置换算法:置换最长时间没有使用的页面。
(4)最不常用置换算法:置换访问次数最少的页面。