操作系统中的交换空间管理2025年4月29日 | 8 分钟阅读 一台计算机虽然有足够的物理内存,但我们需要更多内存,因此我们大部分时间会将部分内存交换到磁盘上。交换空间是硬盘上用于替代物理内存的空间。它用作虚拟内存,其中包含进程的内存映像。每当我们的计算机物理内存不足时,它就会使用其虚拟内存并将信息存储在磁盘上的内存中。 虚拟内存与实内存之间这种数据交换称为交换,而磁盘上的空间称为交换空间。交换空间有助于计算机的操作系统模拟出比实际拥有的内存更多的 RAM。它也称为交换文件。 虚拟内存是 RAM 和磁盘空间的总和,供正在运行的进程使用。交换空间是硬盘上虚拟内存的一部分,当 RAM 已满时使用。交换空间可以以以下几种方式帮助计算机:
Windows、Linux 等操作系统默认会提供一定量的交换空间,用户可以根据自己的需求进行更改。如果您不想使用虚拟内存,也可以轻松将其完全禁用。但是,如果您内存不足,内核将杀死一些进程以在物理内存中创建足够的空间,因此是否使用交换空间完全取决于用户。 什么是交换空间管理?交换空间管理是操作系统另一项低级任务。虚拟内存使用磁盘空间作为主内存的扩展。由于磁盘访问比内存访问慢得多,因此使用交换空间会显着降低系统性能。设计和实现交换空间的主要目标是为虚拟内存系统提供最佳吞吐量。 不同的操作系统根据所使用的内存管理算法,以不同的方式使用交换空间。例如,实现交换的系统可能会使用交换空间来容纳整个进程,包括代码和数据段。分页系统可能只会存储已被从主内存中换出的页面。系统所需的交换空间量可能因物理内存量、它所支持的虚拟内存量以及其使用方式而异。它可以从几兆字节的磁盘空间到千兆字节不等。 请注意,高估所需的交换空间量比低估更安全,因为如果系统交换空间不足,可能会被迫中止进程或完全崩溃。高估会浪费可以用于文件的磁盘空间,但不会造成其他任何损害。一些系统建议分配给交换空间的量。例如,Solaris 建议将交换空间设置为虚拟内存超过可分页物理内存的量。以前,Linux 建议将交换空间设置为物理内存量的两倍,尽管现在大多数 Linux 系统使用的交换空间要少得多。目前,Linux 社区中关于是否应该分配交换空间存在很多争论。 包括 Linux 在内的一些操作系统允许使用多个交换空间。这些交换空间通常放在单独的磁盘上,以便分页和交换对 I/O 系统的负载可以分布在系统的 I/O 设备上。 交换空间的使用不同的操作系统以各种方式使用交换空间。实现交换的系统可能会使用交换空间来容纳整个进程,包括映像、代码和数据段。
高估所需的交换空间量比低估更安全,因为如果系统交换空间不足,可能会被迫中止进程或完全崩溃。高估会浪费可以用于文件的磁盘空间,但不会造成其他任何损害。下表显示了不同系统使用交换空间量的情况。
Solaris 将交换空间设置为虚拟内存超过可分页物理内存的量。以前,Linux 建议将交换空间设置为物理内存量的两倍。如今,这一限制已消失,大多数 Linux 系统使用的交换空间要少得多。 包括 Linux 在内的一些操作系统允许使用多个交换空间,包括文件和专用交换分区。交换空间放置在磁盘上,因此分页和交换对 I/O 的负载将分布在系统的带宽上。 交换空间驻留在哪里?交换空间可以驻留在以下两个位置之一:普通文件系统或单独的磁盘分区。 ![]() 如果交换空间只是文件系统中的一个大文件,则可以使用普通文件系统例程来创建、命名和分配其空间。这种方法虽然易于实现,但效率不高。导航目录结构和磁盘分配数据结构需要额外的磁盘访问。
有些操作系统很灵活,可以在原始分区和文件系统空间中进行交换,例如 Linux。策略和实现是分开的,允许机器管理员决定使用哪种类型的交换。权衡在于文件系统分配和管理的便利性与原始分区中的交换性能。 交换空间分配管理设备根据设备的内存大小分配特定量的交换空间,并受可用磁盘空间的限制。 虚拟机所需的交换空间量是其 RAM 大小的两倍。此量提供了足够的空间来存放 RAM 不再需要的数据,并将其放置在交换空间中。此外,还有足够的空间用于 RAM 由于虚拟机监控程序的需求而需要清除的情况。 管理设备不能将数据磁盘的所有空间分配给交换空间,因为数据库需要空间。管理设备在分配交换空间时遵循一组特定条件。这些条件如下:
交换空间管理示例传统的 UNIX 内核从将整个进程复制到连续磁盘区域和内存的交换开始。随着分页硬件的可用,UNIX 后来发展为交换和分页的结合。 在Solaris 1 中,设计者更改了标准的 UNIX 方法以提高效率。
Solaris 的后续版本进行了更多更改。最大的变化是 Solaris 现在仅在页面被强制从物理内存中换出时才分配交换空间,而不是在首次创建虚拟内存页面时。这种方案在现代计算机上提供了更好的性能,这些计算机比旧系统拥有更多的物理内存。 Linux 与 Solaris 系统几乎相似。在两个系统中,交换空间仅用于匿名内存或供多个进程共享的内存区域。在 Linux 系统中,可以建立一个或多个交换区域。 ![]()
|
我们请求您订阅我们的新闻通讯以获取最新更新。