“...如果一个页面已被修改并因此变脏,则必须将其写回磁盘以驱逐它,这很昂贵。” (在OSTEP 的第 22 章中)
我不知道为什么。为了将其从内存中逐出,脏页将被移动到交换空间,然后将其移回。是否需要再次写入磁盘?这意味着当我们驱逐一个脏页时,我们需要两个磁盘 I/O。
“...如果一个页面已被修改并因此变脏,则必须将其写回磁盘以驱逐它,这很昂贵。” (在OSTEP 的第 22 章中)
我不知道为什么。为了将其从内存中逐出,脏页将被移动到交换空间,然后将其移回。是否需要再次写入磁盘?这意味着当我们驱逐一个脏页时,我们需要两个磁盘 I/O。
我认为你正在结合两个不同的东西。交换空间(它是磁盘上的一个内存区域)充当匿名页面(没有后备文件的页面)的后备存储。您引用的语句可能是指文件支持的脏页。这意味着页面来自磁盘中的文件;此页面无需转到交换空间,只需将其写回磁盘上的文件位置即可。尽管如此,它必须被写回以保留新数据。
如果文件支持的页面被逐出交换空间,正如您的帖子所暗示的那样,您是正确的:首先将脏页面写回磁盘上的文件然后再写入它会浪费磁盘 I/O到磁盘上的交换空间。但是,文件支持的页面不会被驱逐到交换空间,因此这是不正确的。
交换空间使处理文件支持的页面和匿名页面变得容易,因为现在这两种类型的页面都可以被驱逐到磁盘,只是匿名页面将被驱逐以交换,而文件支持的页面将回到它们在磁盘中的正常位置.
此外,干净的页面永远不需要写回磁盘,因为它们已经以其当前状态存在于磁盘上。即使对于干净的匿名页面也是如此。这是因为干净的匿名页面只是虚拟分配的页面,它们都映射到相同的共享零页面。所以没有必要交换这个内存。但是当它们被写入时,这会触发 COW 页面错误,它们会收到自己的内存,被标记为脏,如果被驱逐,现在必须移动到交换。
如果以后不需要这些内容,则在驱逐时不需要将其内容写入磁盘(或某些其他类型的媒体)。
类似地,如果以后需要这些内容,那么这些内容必须在被驱逐时写入磁盘(或其他类型的媒体),以便以后可以在没有这些内容的情况下将它们加载回内存内容已更改。如果它们被更改,那将类似于内存损坏。
(我应该补充一点,内存内容是指整个内存页面的内容。)