操作系统 交换空间管理

操作系统 交换空间管理

计算机具有足够的物理内存,但我们需要更多,因此大部分时间我们将一些内存交换到磁盘上。

交换空间 是硬盘上的一块空间,它是物理内存的替代品。它被用作虚拟内存,其中包含进程的内存映像。每当我们的计算机的物理内存不足时,它就会使用虚拟内存,并将信息存储在磁盘上的内存中。

虚拟内存与实际内存之间的这种数据互换被称为 交换 ,并且将磁盘上的空间称为交换空间。交换空间帮助计算机的操作系统假装它具有比实际更多的内存。它也被称为 交换文件

虚拟内存是运行中的进程可以使用的RAM和磁盘空间的组合。交换空间是硬盘上的一部分 虚拟内存 ,在RAM满时使用。交换空间可以以多种方式对计算机有用,例如:

  • 它可以用作单个连续内存,从而减少读写文件的I/O操作。
  • 不常使用的应用程序可以保存在交换文件中。
  • 具有足够的交换文件可以使系统始终保持一些空闲的物理内存。
  • 由于交换空间而释放的物理内存中的空间可供操作系统用于其他重要任务。

像Windows、Linux等操作系统默认提供一定数量的交换空间,用户可以根据需要进行更改。如果您不想使用虚拟内存,可以轻松禁用它。然而,如果内存不足,内核会杀死一些进程以释放足够的物理内存空间,因此完全取决于用户是否想使用交换空间。

什么是交换空间管理

交换空间管理是操作系统的另一个低级任务。虚拟内存将磁盘空间用作主内存的扩展。由于磁盘访问比内存访问要慢得多,使用交换空间会显著降低系统性能。设计和实现交换空间的主要目标是为虚拟内存系统提供最佳吞吐量。

不同操作系统以不同的方式使用交换空间,这取决于所使用的内存管理算法。例如,实施交换的系统可能使用交换空间来保存整个进程映像,包括代码和数据段。

分页 系统可能只存储被推出主内存的页面。系统所需的交换空间量可能因物理内存的量、它支持的虚拟内存的量以及如何使用而有所不同。它可能在几兆字节的磁盘空间到几GB之间。

请注意,过估计所需的交换空间量可能比低估更安全,因为如果系统的交换空间不足,可能会被迫终止进程或完全崩溃。过估计会浪费可以用于文件的磁盘空间,但不会造成其他损害。一些系统建议为交换空间留出一定的量。例如,Solaris建议将交换空间设置为虚拟内存超过可分页物理内存的量。以前,Linux建议将交换空间设置为物理内存的两倍,尽管现在大多数Linux系统使用的交换空间要少得多。目前,Linux社区正就是否完全设置交换空间进行激烈辩论。

一些操作系统,包括Linux,允许使用多个交换空间。通常把这些交换空间放在不同的磁盘上,以便将页面和交换所带来的负载分布到系统的I/O设备上。

交换空间的用途

不同的操作系统以不同的方式使用交换空间。实施交换的系统可能使用交换空间来保存整个进程,包括映像、代码和数据段。

  • 换入换出 是多道程序设计中使用的一种内存管理技术,用于增加共享CPU的进程数量。它是一种将进程从主内存中移出,存储到辅助存储器中,然后将其带回主内存继续执行的技术。将进程从主内存移出到辅助存储器的操作称为 换出 。从辅助存储器中将进程带回主内存的操作称为 换入
  • 分页 系统可能只存储已经从主内存中推出的页面。系统所需的交换空间量可以从兆字节到千兆字节不等,它还取决于物理内存的数量、它所支持的虚拟内存以及如何使用虚拟内存。

过估计所需的交换空间量比低估更安全,因为如果系统的交换空间不足,可能会被迫中断进程或完全崩溃。过估计会浪费可用于文件的磁盘空间,但不会对其他方面造成伤害。下表展示了不同系统使用的交换空间量:

编号 系统 交换空间
1. Solaris 交换空间等于物理内存的数量。
2. Linux 交换空间是物理内存的两倍。

Solaris 将交换空间设置为虚拟内存超过可分页物理内存的数量。以前, Linux 建议将交换空间设置为物理内存量的两倍。如今,这个限制不存在了,大多数Linux系统使用的交换空间要少得多。

包括Linux在内,一些操作系统允许使用多个交换空间,包括文件和专用交换分区。这些交换空间被放置在磁盘上,因此分页和交换引起的I/O负载会在系统的带宽上分散。

交换空间位于哪里

交换空间可以位于这两个地方之一:正常的文件系统或单独的磁盘分区。

操作系统 交换空间管理

如果交换空间只是文件系统中的一个大文件,则可以使用普通的文件系统例程来创建、命名和分配它的空间。这种方法虽然易于实现,但效率低下。在读取或写入进程镜像时,导航目录结构和磁盘分配数据结构需要额外的磁盘访问。

  • 外部碎片 可能会通过在读取或写入进程镜像时强制进行多次寻道来大大增加交换时间。我们可以通过将块位置信息缓存在物理内存中,并使用特殊工具为交换文件分配物理连续的块来提高性能。然而,遍历文件系统数据结构的成本仍然存在。
  • 或者,交换空间可以在一个独立的 原始分区 中创建,因为该空间中不放置文件系统或目录结构。相反,使用单独的交换空间存储管理器来分配和释放来自原始分区的块。该管理器使用针对速度而非存储效率进行优化的算法,因为交换空间的访问频率比文件系统更高。
  • 内部碎片 可能会增加,但这种折衷是可以接受的,因为交换空间中的数据的寿命通常比文件系统中的文件的寿命要短得多。交换空间在引导时重新初始化,因此任何碎片化都是暂时的。此方法在磁盘分区期间创建一定量的交换空间。增加更多的交换空间需要重新分区磁盘或在其他地方添加另一个交换空间。

某些操作系统具有灵活性,可以同时在原始分区和文件系统空间中进行交换,例如Linux。策略和实现是分开的,允许机器管理员决定使用哪种类型的交换。折衷是在文件系统中的分配和管理的便利性与原始分区中的交换性能之间。

交换空间的分配

管理设备根据设备的内存大小来分配特定数量的交换空间,并受可用磁盘空间的限制。

虚拟机所需的交换空间量是其RAM大小的两倍。这个量提供了足够的空间,用于将RAM不再需要的数据放入交换空间。此外,还有足够的空间用于紧急情况,当RAM需要被清除以满足hypervisor需求时。

管理设备不能将所有的空间都从数据磁盘分配给交换空间,因为数据库需要空间。管理设备在分配交换空间时遵循一组特定条件。这些条件如下:

  1. 可用于交换空间的工作进行分区的最大比例为25%。
  2. 当管理设备增加交换空间大小时,交换大小不会在单个实例中增加超过20%。20%的最大增加使Informix和分析能够在启动过程中分配其磁盘空间。
  3. 您可以通过向管理设备添加新的数据磁盘来分配更多的数据磁盘空间。
  4. 您可以按照扩展设备代码磁盘大小的过程来增加代码磁盘大小。

交换空间管理示例

传统的UNIX内核开始时采用了在连续的磁盘区域和内存之间复制整个进程的交换。随着分页硬件的可用性,UNIX后来演变为交换和分页的组合。

在Solaris 1中,设计师改变了标准的UNIX方法以提高效率。

  • 当进程执行时,包含代码的文本段页从文件系统中调入,访问主存储器,并在选择页面剔除时被丢弃。
  • 从文件系统中重新读取一页的效率比将它写入交换空间再重新读取要高。
  • 交换空间仅用作匿名内存页的后备存储,包括为栈、堆和未初始化进程数据分配的内存。

后续版本的Solaris进行了更多修改。最大的变化是Solaris仅在将页面从物理内存强制剔除时才分配交换空间,而不是在虚拟内存页面最初创建时分配。这种方案在现代计算机上的性能更好,因为现代计算机的物理内存比旧系统更大。

LinuxSolaris 系统几乎相似。这两个系统中,交换空间仅用于匿名内存或被多个进程共享的内存区域。在Linux系统中,可以设置一个或多个交换区域。

操作系统 交换空间管理

  • 一个交换区可以位于常规文件系统上的交换文件中,也可以位于专用的文件分区中。
  • 每个交换区由4KB的 页面插槽 组成,用于存放交换的页面。
  • 与每个交换区相关联的整数计数器数组是一个与交换区中页面插槽对应的 交换映射
  • 如果计数器的值为0,则表示对应的页面插槽可用。
  • 如果值大于0,则表示一个交换的页面占据了页面插槽。
  • 计数器的值表示交换页面的映射数。例如,值为3表示交换页面被映射到3个不同的进程。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程