为什么计算机需要交换文件?

为什么计算机需要交换文件?

我搜索了“为什么我需要交换文件?”和“为什么计算机需要交换文件/”,第一页结果没有告诉我任何技术信息。而是告诉我如何关闭它,或者在高 RAM 情况下不要使用它,或者如何真正打开它。

有人曾经告诉我,对于 Windows 计算机,程序占用大量内存,并且随着进程的增多,计算机需要交换文件,因为所有或许多进程都要求系统提供大内存,但最终却用得不多。例如,浏览器的整个网页都在 RAM 中,并且打开了 100 个选项卡。

但我感觉有些内容不正确,甚至不真实。

有人能向我解释为什么计算机 — — 我希望是 Windows 或 Linux 计算机 — — 需要交换文件吗?

我的系统刚刚又降到了 125MB,然后变慢了,现在我打开了交换分区,系统又恢复了?怎么可能?检查top显示我现在有 8GB 交换分区(分区),我需要在killall浏览器(很多很多标签页)中启用交换分区并打开交换分区,重启浏览器,再次打开所有标签页,但速度没有变慢?除此之外,top(进程)显示计算机使用 0KB 交换分区?

答案1

事实并非如此。但是,您读到的内容实际上是准确的:程序可能会保留比它们需要的更多的内存。它们使用的内存量(如果有的话)差异很大。页面文件(在 Windows 上)是一种从 HDD/SSD 空间中备份这些预留空间的机制,而不是为它们浪费物理 RAM。

Windows 和 Linux 对待虚拟内存的方式不同。在 Linux 上,可以“过度使用”:预留比可用内存更多的内存。在 Windows 上,这是不可能的。一旦所有物理 RAM 和页面文件空间都被预留,就不可能再进行预留。

在 Windows 上,如果您没有页面文件,则所有预留都必须由物理 RAM 支持。特别是如果您没有很多 RAM(今天有 16 GiB 以上),您很快就会遇到内存不足的情况。我 2 小时前刚刚启动,浏览了一下并看了一部电影,软件已经在我的 PC 上预留了超过 8 GiB 的内存。(实际上只有超过 5 GiB 处于活动状态。)

我无法准确评论您的浏览器情况,但有一件事是肯定的:通过重新启动浏览器,您基本上可以确保所有剩余的保留都被删除,并且内存使用量被最小化。随着您继续使用它,它会再次增长。

如果您想进一步研究这个主题,您必须了解虚拟内存的工作原理。(要记住的一件事是,虚拟内存是现代计算不可或缺的一部分,在高级操作系统上无法禁用。您经常会发现一些基本内容,例如“禁用页面文件就是禁用虚拟内存”。这完全是错误的。)

答案2

现代 CPU 有一种称为分页

可以进行分页的 CPU 有一个称为 MMU 的组件,它可以重新映射 RAM 并且还具有“页面错误”。

分页机制将 RAM 划分为称为页面(通常为 4K 字节)。与页面错误相结合,可以实现以下功能:

  • 这允许操作将页面分配给进程并安排页面,以便进程认为它具有连续的内存部分(而实际上它可能遍布各处)。

  • 它还允许页面错误由于各种原因访问页面时会发生这种情况。页面错误是一种“CPU 异常”,会立即将控制权转回操作系统。一个非常常见的原因是控制进程可以使用的 RAM 量。如果进程试图访问“高于”操作系统为其提供的内存的页面,就会发生页面错误,然后操作系统可以终止该进程,因为它试图访问不属于它的内存。

因此第三件可能的事情是——操作系统可以执行以下操作:

  • 将可能属于未被使用的进程的页面保存到磁盘,并将其标记为磁盘上。

  • 当进程因某种原因被调用时,就会发生页面错误,CPU 可以从磁盘中取回已保存的内容。然后控制权返回给进程,进程甚至不知道它已被“调出”到磁盘。

这就是为什么会有交换文件(或称分页文件)的存在。

它可以将您的一段时间未使用的进程移出 RAM,从而为您的实际正在使用的程序提供更多的 RAM,从而使您的操作系统更加高效。

如果您有更多进程 + 内存请求处于活动状态,而实际拥有的 RAM 却少于此数量,那么它还可以提供一些缓冲(您的计算机将会变慢,而不是程序拒绝启动)。

如果您确实知道您要使用所有程序执行的所有操作都可以放入 RAM 中,那么您实际上并不需要交换文件/页面文件,但很难确定这一点。

答案3

你可能不会将数据“交换”到交换文件中,但它为你提供了额外的后备存储,当你可能

问题在于,程序通常会过度分配 RAM,因为你有一个交换文件。Windows 的一个特性/问题是,如果允许程序分配比它们实际使用的更多的内存,它们的实际(工作)内存量可能会与系统承诺提供的内存量不同。

您的所有程序可能都有 4GB 的工作空间,但由于所有进程都过度分配内存,因此实​​际提交的费用可能是 8 甚至 16GB。读取大文件时,通常的做法是告诉操作系统将整个文件简单地“映射”到您自己的地址空间中(请参阅内存映射 I/O),这实际上出现在您的进程内存空间中。该空间需要在虚拟内存系统中进行“承诺”,并且该承诺需要由系统中的存储支持,以防您开始写入该内存而不是文件本身。

很大一部分已分配的 RAM 可能处于“空”状态,但 Windows 想要知道它可以履行承诺。结果,您达到了看不见的内存限制,但仍然有“空闲”内存。无法分配更多虚拟内存(不同于 RAM)是导致您收到错误的原因。

交换文件允许 Windows 说“好吧,如果程序想要更多内存,那么我可以将一些内存推送到磁盘”,并允许更多程序过度分配 RAM,从而更好地利用您实际拥有的内存。

当工作集仍低于总 RAM 时,Windows 或 Linux 可能会不是将数据推送到页面文件,但它知道如果需要,那么它可以

通过关闭页面文件,您会导致机器的内存受到限制,即使实际上并没有限制。

Linux显然应该允许内存过量使用,但 Windows 不太愿意允许这样做。

相关内容