操作系统中的“swap”和“page”有什么区别?

39

在操作系统中,“swap”和“page”这两个术语有何区别?


这可能属于ServerFault。 - joshperry
4
Server Fault更适合于实际系统管理员的内容,而不是操作系统术语。它可能更适合Super User网站。 - David Thornley
1
作为一个初学者SE用户,我并不清楚操作系统术语应该属于SU。现在我知道了,谢谢@DavidThornley。 - n611x007
6个回答

78
尽管这两个术语在历史上曾交替使用,但它们表示不同的事物。它们都是用于将移动数据在内存中管理到另一个存储设备(通常是硬盘)的方法,称为后备存储器,但它们使用不同的方法来实现。
交换涉及将进程的整个数据集在内存中移动到后备存储器上的一段空间,通常是交换文件或交换分区。该进程从内存中完全交换出去;没有中间状态。显然,进程需要完全空闲才能进行交换才有意义。其优点是相对简单易懂,程序的内存总是连续分配的,缺点是当系统陷入不断交换的状态时,机器的性能可能变得非常糟糕。该算法还涉及重复交换未来不会使用的数据。
页面尝试解决这些问题,通过将物理内存划分为一些称为“帧”的固定大小的东西。它还将每个正在运行的进程的内存空间划分为页面(与帧大小相同);由于需要使用物理地址来访问每个内存块,因此称为物理地址空间。

每个程序都由操作系统提供的环境支持,并由现代硬件支持,使得程序的内存占用看起来像一个非常大的内存连续块;这被称为逻辑地址空间。

然而,这个连续块的每一页可能在内存中,也可能在后备存储器中。操作系统通过查询称为“页表”的东西来确定每一页的位置。如果它发现程序请求的页面在内存中的某个地方,它将简单地转到该内存页面并获取所请求的数据。

如果它发现页面不在内存中,则会导致“页面错误”。操作系统将暂停进程,同时从后备存储器中加载所请求的页面,并根据某些替换算法将另一个页面从内存移动到后备存储器中以腾出空间。后备存储器可以称为页面文件,也可以仍然称为交换文件或交换分区,这会导致对使用哪个系统感到困惑。它是一个单独的分区还是一个文件,取决于操作系统。

有一些内存部分不受分页影响。其中之一是分页代码本身,以及处理诸如页面错误之类的内核部分。一些操作系统,如MacOS,将此内存称为“已连接”。

现代硬件有多个设备可以更有效地支持分页操作系统。其中最常见的是转换后向缓存器,简称TLB。它存储了一种硬件页表缓存,因此每当程序需要进行逻辑地址到物理地址的转换时,它不必每次都询问操作系统。
现代操作系统还通过惰性加载运行的进程的部分来利用分页。例如,如果启动Microsoft Word,操作系统将仅将程序需要的那些部分加载到内存中,并在需要时获取程序的其他部分。这也存在着内存占用、启动速度以及新部分需要加载时程序内部延迟之间的权衡。
总之,也许比你所期望的更详细,但希望能引起您的兴趣。

不错。我认为我们可以添加分页非常类似于处理器的缓存。 - Gordak
当页面因为在辅助磁盘中而发生页面错误时,系统如何知道辅助存储器中的位置?它是否在交换出页面时保存在某个地方? - Zaid Bin Irfan
哇,非常有用的答案,而且还附带了示例!有没有推荐的资源可以集中讨论相关主题?或者标准的操作系统教材是否都包含这些内容? - Honinbo Shusaku

24

交换和分页是两个不同的概念。在分页中,(物理)内存被划分为小块,称为“帧”,而每个程序的(逻辑)内存被划分为称为“页”的块。页面和帧具有相同的大小;然后将每个页面映射到一个帧上。此映射通过页表执行。分页解决了以前的内存管理方案中存在的碎片问题。

通过交换,未使用的内存部分被写入磁盘;这使得可以运行多个总内存消耗量大于物理内存量的程序。当程序请求访问已写入磁盘的内存部分时,该部分必须加载到内存中。为腾出空间,另一部分必须被写入磁盘(实际上两个部分交换位置-因此得名)。这种物理内存的“扩展”通常称为“虚拟内存”。

现代系统同时使用分页和交换,并且页面是被交换进出内存的内容。


2
正交 - 不是一个“容易”的词 :( 请参见https://dev59.com/JXI_5IYBdhLWcg3wF_F3 - n611x007
1
我认为这个答案在现代用法方面更好。被接受的答案侧重于术语“swap”的较旧历史用法。 - Tony
1
Windows 8和Windows 10都有swapfile.sys和pagefile.sys。页面文件pagefile.sys用于RAM中所有可执行映像的通用虚拟内存管理,而交换文件swapfile.sys用于交换当前未使用的Windows Metro组件。Pagefile.sys通常比swapfile.sys大得多(约2 GB),后者只有200 MB +。 - JDMorganArkansas

3
请参见:分页和交换 交换和分页的问题经常被误解。交换和分页是两个完全不同的东西。
交换是 Unix System V 中使用的第一个技术,当物理内存填满进程时会出现问题。当系统的 RAM 完全用尽时会发生什么?它会“停滞不前”!
正确管理 RAM 的保护非常重要,因为 CPU 只能在 RAM 中处理数据,而这些数据是由内核从硬盘加载的。当进程数量和大小超过物理内存时会发生什么?为了应对这种情况,并且因为只有一个进程可以在任何时间执行(在单处理器系统上),只有那个进程真正需要在 RAM 中。然而,组织这将是极其耗费资源的,因为多个正在运行的进程经常被安排在处理器上执行(请参见“调度程序”部分)。
为了解决这些问题,内核通过向应用程序广告虚拟地址空间来向应用程序提供抽象内存使用。应用程序可能只需请求更多内存,内核就可能授予它。
即使系统中只有 64mb 的 RAM,单个进程可能已分配了 100mb 的内存。该进程不需要同时访问整个 100mb,这就是虚拟内存的作用。 [...]

2

在Linux中,交换分区是用于虚拟内存的分区。它包含页面,这些页面是可以在真实内存中进出交换的内存块。


2

页面是由操作系统管理的一块内存。在Linux上,您可以通过输入以下命令找到您的操作系统版本的内核分配:

$ getconf PAGESIZE 4096

4KB是一个相当常见的分配大小。

虽然页面是指一种大小分配,但交换则是指“将其移动”。如果您想了解更多细节,请查看All about Linux swap space


这是“页面”的正确定义,但提问者指的是在Windows上找到的页面文件和分页。 - ZachB

0

这两个术语基本上是指相同的东西,只是用词不同。它们都指的是通常存储在硬盘上的虚拟内存区域。

*nix等操作系统称其为“swap”,Windows则称其为“pagefile”。

在Linux等操作系统中,交换空间通常是一个单独的分区。而在Windows中,它通常是存储在操作系统文件系统中的一个文件。


Linux在文件系统交换上没有问题。但是与直接访问分区相比,它会稍微慢一些。 - dmckee --- ex-moderator kitten
@dmckee---前版主小猫咪,抱歉吵醒你了,但是你能详细说明一下为什么吗? - Harsh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接