虚拟内存是什么?有什么用?

系统 Linux
良许就和大家来讨论下计算机的内存如果不够用了, 虚拟内存技术的应用,虚拟内存的出现,让机器内存不够的情况得到部分解决,大家需要注意的是有些资料也将虚拟内存称之为交换内存。

大家好,我是良许。

熟悉计算机的小伙伴都知道,我们常说的主机三大件分别是主板,CPU,内存,可见内存在计算机主机中的角色也非同一般,喜欢 DIY 主机的小伙伴对这三大件的了解更是精益求精。

编写过程序的小伙伴对于程序的执行过程,也是耳熟能详了,先从硬盘加载到内存,然后 CPU 与内存进行数据交换与处理,完成相应的操作(真实执行细节相当复杂),从而实现相应的功能。

但是内存的容量非常有限,由于内存的造价较高(目前常用的内存为双倍速 SDRAM ),计算机用户升级内存容量也是一笔不小的开支。

那么良许就和大家来讨论下计算机的内存如果不够用了, 虚拟内存技术的应用,虚拟内存的出现,让机器内存不够的情况得到部分解决,大家需要注意的是有些资料也将虚拟内存称之为交换内存。

[[336852]]

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,有时可以越过系统性能瓶颈,节省系统升级费用。

本文授权转载自公众号「良许Linux」。良许,世界500强外企Linux开发工程师,公众号里分享大量Linux干货,欢迎关注!

 

责任编辑:赵宁宁 来源: 良许Linux
相关推荐

2024-10-18 10:00:00

云计算虚拟

2020-04-14 16:03:31

Linux虚拟内存操作系统

2021-07-13 09:08:19

磁盘阵列系统

2020-10-20 09:57:04

量子计算人工智能技术

2024-01-25 10:23:22

对象存储存储数据

2017-11-22 15:50:58

Netty微服务RPC

2009-06-17 15:51:55

java有什么用

2022-05-05 07:38:32

volatilJava并发

2017-09-19 15:22:44

2022-11-07 12:45:30

ripgrep命令Linux

2020-11-02 07:05:54

虚拟内存Go

2021-02-21 23:49:45

比特币货币人民币

2024-02-19 00:00:00

Python​starmap函数

2021-09-10 07:59:31

中断锁Java多线编程

2022-12-05 13:58:36

2020-06-04 18:21:34

CPU缓存Intel

2023-12-13 15:28:32

Python工具数据

2010-06-10 17:12:23

Linux 内存监控

2021-02-18 07:55:27

数据湖存储数据

2022-02-16 22:37:00

流式SQLSQL数据库
点赞
收藏

51CTO技术栈公众号