聊聊虚拟内存

大家好,我是良许 。
熟悉计算机的小伙伴都知道,我们常说的主机三大件分别是主板,CPU,内存,可见内存在计算机主机中的角色也非同一般,喜欢 diy 主机的小伙伴对这三大件的了解更是精益求精 。
编写过程序的小伙伴对于程序的执行过程,也是耳熟能详了,先从硬盘加载到内存,然后 CPU 与内存进行数据交换与处理,完成相应的操作(真实执行细节相当复杂),从而实现相应的功能 。
但是内存的容量非常有限,由于内存的造价较高(目前常用的内存为双倍速 SDRAM ),计算机用户升级内存容量也是一笔不小的开支 。
那么良许就和大家来讨论下计算机的内存如果不够用了, 虚拟内存技术的应用,虚拟内存的出现,让机器内存不够的情况得到部分解决,大家需要注意的是有些资料也将虚拟内存称之为交换内存 。
1. 讨论虚拟内存前的热身我们需要知道的是计算机对内存分为物理内存与虚拟内存(注意虚拟内存和虚拟地址空间的区别) 。物理内存就是计算机的实际内存大小,由 RAM 芯片组成的 。虚拟内存则是虚拟出来的、使用磁盘代替内存 。
2. 虚拟内存的工作原理【聊聊虚拟内存】正如前面所描述的,当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用 。
那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到交换空间中,等到那些程序要运行时,再从交换空间中恢复保存的数据到内存中 。
3. linux 虚拟内存的实现方式Linux 系统实现虚拟内存有两种方法,分别是交换分区( swap 分区)和交换文件 。
##### 交换分区
交换分区其实就是新建一个分区,然后将该分区挂载作为交换空间,方法步骤与传统的新建分区一样 。只不过格式化分区和挂载分区分别采用 mkswap 和 swapon 命令 。
交换文件硬盘驱动器中没有足够的空间来创建交换分区,我们就会手动创建一个交换文件以将 RAM 的非活动内容交换到其中 。
4. 理想的交换权重Linux 允许我们自行设置交换的权重,也就是说我们可以设置交换过程发生的频率 。小伙伴们可以根据需要在0到100之间设置交换的权重 。值越小则代表会让内核尽量少用交换,值越大会使内核更多的去使用交换空间 。
交换权重的默认值和建议值为60,有兴趣的小伙伴可以具体去学习 swAppiness ,这个 Linux 内核参数,这里不做过多的描述了 。
5.使用虚拟内存的好处

  • 它可以轻松地保存那些几乎不使用而又被占用的 RAM 块 。然后可以将释放的 RAM 用于容纳更多具有更高优先级的程序 。
  • 防止 RAM 空间用完,无法执行其他程序的局面 。
  • 虚拟内存充当了 RAM 的备份,从而增大了 RAM 的实际空间 。
  • 在休眠过程中,RAM 的所有内容均写入交换空间 。因此,成功进行休眠,虚拟内存是必需的 。
  • 它提高了系统的整体性能 。(在内核参数 swappiness 设置合理的情况下)
6. 结论在本文中,我们学习了交换内存以及它的许多好处,RAM 空间不足时,它将作为 RAM 的扩充进行使用,避免我们的应用程序因内存不足而崩溃 。
其实,Swap 的调整对 Linux 服务器,特别是 Web 服务器的性能至关重要 。通过调整 Swap,有时可以越过系统性能瓶颈,节省系统升级费用 。




    推荐阅读