在操作系统中,“swap”和“page”这两个术语有何区别?
在操作系统中,“swap”和“page”这两个术语有何区别?
每个程序都由操作系统提供的环境支持,并由现代硬件支持,使得程序的内存占用看起来像一个非常大的内存连续块;这被称为逻辑地址空间。
然而,这个连续块的每一页可能在内存中,也可能在后备存储器中。操作系统通过查询称为“页表”的东西来确定每一页的位置。如果它发现程序请求的页面在内存中的某个地方,它将简单地转到该内存页面并获取所请求的数据。
如果它发现页面不在内存中,则会导致“页面错误”。操作系统将暂停进程,同时从后备存储器中加载所请求的页面,并根据某些替换算法将另一个页面从内存移动到后备存储器中以腾出空间。后备存储器可以称为页面文件,也可以仍然称为交换文件或交换分区,这会导致对使用哪个系统感到困惑。它是一个单独的分区还是一个文件,取决于操作系统。
有一些内存部分不受分页影响。其中之一是分页代码本身,以及处理诸如页面错误之类的内核部分。一些操作系统,如MacOS,将此内存称为“已连接”。
现代硬件有多个设备可以更有效地支持分页操作系统。其中最常见的是转换后向缓存器,简称TLB。它存储了一种硬件页表缓存,因此每当程序需要进行逻辑地址到物理地址的转换时,它不必每次都询问操作系统。交换和分页是两个不同的概念。在分页中,(物理)内存被划分为小块,称为“帧”,而每个程序的(逻辑)内存被划分为称为“页”的块。页面和帧具有相同的大小;然后将每个页面映射到一个帧上。此映射通过页表执行。分页解决了以前的内存管理方案中存在的碎片问题。
通过交换,未使用的内存部分被写入磁盘;这使得可以运行多个总内存消耗量大于物理内存量的程序。当程序请求访问已写入磁盘的内存部分时,该部分必须加载到内存中。为腾出空间,另一部分必须被写入磁盘(实际上两个部分交换位置-因此得名)。这种物理内存的“扩展”通常称为“虚拟内存”。
现代系统同时使用分页和交换,并且页面是被交换进出内存的内容。
在Linux中,交换分区是用于虚拟内存的分区。它包含页面,这些页面是可以在真实内存中进出交换的内存块。
页面是由操作系统管理的一块内存。在Linux上,您可以通过输入以下命令找到您的操作系统版本的内核分配:
$ getconf PAGESIZE 4096
4KB是一个相当常见的分配大小。
虽然页面是指一种大小分配,但交换则是指“将其移动”。如果您想了解更多细节,请查看All about Linux swap space。
这两个术语基本上是指相同的东西,只是用词不同。它们都指的是通常存储在硬盘上的虚拟内存区域。
*nix等操作系统称其为“swap”,Windows则称其为“pagefile”。
在Linux等操作系统中,交换空间通常是一个单独的分区。而在Windows中,它通常是存储在操作系统文件系统中的一个文件。