当前位置: 首页 > 科技观察

深入了解Linux上的虚拟内存

时间:2023-03-17 17:08:31 科技观察

虚拟内存可帮助操作系统不间断地执行其进程。虚拟内存是现代操作系统的基础之一,但通常情况下,除非遇到问题,否则您可能不会真正考虑它。Linux发行版要求您在安装时设置一个虚拟内存空间(交换分区),但大多数初学者并不知道这有多大用处。以下是您需要了解的有关Linux虚拟内存的所有信息。什么是虚拟内存?虚拟内存是一种表示从机器的物理内存中提取的内存的方式。它利用您的RAM和存储空间,无论是在传统硬盘驱动器还是SSD上。在Linux中,这是在内核和硬件级别完成的。CPU有一个称为内存管理单元(MMU)的硬件,它将物理内存地址转换为虚拟内存地址。这些地址与它们在机器上的物理位置无关。这些地址空间称为“页面”,它们可能在RAM中,或者在您的硬盘驱动器或SSD中。操作系统将这些地址视为一个大型内存池,称为“地址空间”。虚拟内存利用了这样一个事实,即理论上并非所有正在使用的内存都一直在使用。内存中的程序被分成页面,内核认为不需要的部分被“换出”或移动到硬盘驱动器。它们可以在需要时“换入”或带回RAM。驱动器上用于虚拟内存的空间称为“后备存储”或“交换空间”。在Windows世界中,它通常作为文件实现,称为“交换文件”。也可以在Linux中执行此操作,但更常见的是使用专用磁盘分区。Linux上的交换文件通常保留给最小系统或嵌入式系统,这些系统通常根本没有虚拟内存运行,因为嵌入式操作系统必须很小。由于虚拟内存,大型程序可以通过使用比机器中的物理RAM更多的内存来运行,类似于信用卡如何允许您用比银行帐户中更多的钱进行大笔购买。就像信用卡一样,虚拟内存在您需要时很有用,但您不想过度使用它。虚拟内存还允许开发人员在不知道计算机内存是如何组织的情况下创建应用程序。从历史上看,虚拟内存的主要缺点是硬盘驱动器比RAM慢。如果机器没有足够的RAM,系统会无休止地交换页面,这个过程称为“抖动”。在具有更多RAM和更快的SSD取代机械硬盘驱动器的现代PC上,这不是问题,但仍然需要注意。LinuxSwap分区如前所述,在Linux上设置虚拟内存的常用方法是使用专用磁盘分区。安装实用程序将检查您的硬件并提出包括交换分区的分区方案。您还可以在安装后添加交换分区。如果要向现有驱动器添加新分区,则必须使用非破坏性分区工具,例如GParted。确保您已选择“Linuxswap”作为分区的文件系统。在重新分区驱动器之前备份重要数据。创建分区后,使用mkswap命令格式化分区:sudomkswap/dev/sdX现在您必须以root身份编辑/etc/fstab以添加交换分区。将此行添加到文件将设置一个交换分区以在启动时挂载:/dev/sdXnoneswapdefaults00现在使用swapon命令激活新的交换空间,其中sdX是交换分区的名称:sudoswapon/dev/sdX在Linux上使用交换文件使用命令行在Linux中设置交换文件很容易。如果您不想为驱动器重新分区而烦恼,则可能需要编辑/etc/fstab。一种方法是使用fallocate:例如,要创建一个2GB的交换文件:sudofallocate-l2G/path/to/swapfile作为替代方法,您可以使用dd命令创建一个交换文件:sudoddif=/dev/zeroof=/path/to/swapfilebs=1024count=2048一定要正确使用dd命令,因为错误的输入输出文件会导致数据丢失。因此,fallocate是首选方法。/dev/zero设备是一个输出“0”的特殊设备。此dd命令的作用是创建一个2GB的空白块文件,其中包含适合用作交换空间的1024KB块。然后,您可以像使用交换分区一样在交换文件上使用mkswap和swapon命令:sudomkswap/path/to/swapfilesudoswapon/path/to/swapfile您可能想知道什么时候应该使用交换文件或专用于你的交换空间分区。选择很简单:在大多数情况下,您应该使用分区。这是Linux桌面或服务器的最佳选择。安装程序建议的分区方案通常适用于单用户Linux桌面。如果您在虚拟机、小型嵌入式系统上运行Linux,或者您只是不想对现有的Linux系统重新分区,您可能需要使用交换文件。多少交换空间?多年来,关于需要多少交换空间的标准建议是物理RAM量的两倍。即使是最便宜的PC也配备大容量驱动器和大量内存,这条规则可能会受到质疑。在许多系统上,如果您检查top或htop,您甚至可能会注意到,如果您以这种方式设置系统,您的交换空间甚至根本没有被使用。尽管如此,如果您有更高的内存要求,两倍的物理内存是一个很好的起点和保险单。您可以根据需要对系统进行更改。如果您的系统正在使用所有RAM,则您的计算机在使用虚拟内存时可能会遇到性能问题。如今,这已不再是问题,因为即使是最便宜的PC上的RAM容量也绰绰有余,而且SSD比旧硬盘驱动器快得多。这仍然是您应该注意的事情。解决此问题的最简单方法是向计算机添加更多RAM。如果那不可能,您可以尝试调整Linux内核的“swappiness”。swappiness数决定了内核在虚拟内存中花费了多少。它的范围从0到100。设置为0意味着Linux根本不会交换,而在100时它会随时交换。大多数系统的默认值是60。要临时更改swappiness,请使用sysctl命令:sudosysctlvm.swappiness=20此命令中的“20”将是交换编号,直到您重新启动。要永久更改它,请以root身份编辑/etc/sysctl.conf文件并放置行“vm.swappiness=[swappinessnumber]”,其中“[swappinessnumber]”是您想要的swappiness编号。在您可以安装更多RAM之前,这将是权宜之计。虚拟内存使您的Linux系统保持平稳运行虚拟内存是现代操作系统(包括Linux)的一个组件,它使您的计算机保持平稳运行。您可以使用交换文件,但通常的方法是使用专用分区。您不必考虑太多,但Linux交换分区和交换文件很容易设置和排除故障。大部分建议也适用于其他系统,包括Windows,尽管设置虚拟内存的方法不同。