gpt4 book ai didi

linux - 当 CPU 第一次接触匿名文件 (CSAPP) 时,数据是否真的在磁盘和内存之间传输

转载 作者:太空宇宙 更新时间:2023-11-04 10:50:32 25 4
gpt4 key购买 nike

CSAPP 第 2 章第 9 章第 8 节(第 807 页)

Anonymous file: An area can also be mapped to an anonymous file, created by the kernel, that contains all binary zeros. The first time the CPU touches a virtual page in such an area, the kernel finds an appropriate victim page in physical memory, swaps out the victim page if it is dirty, overwrites the victim page with binary zeros, and updates the page table to mark the page as resident. Notice that no data is actually transferred between disk and memory. For this reason, pages in areas that are mapped to anonymous files are sometimes called demand-zero pages.

当受害页面变脏时。我认为应该将其写回磁盘。为什么“请注意,磁盘和内存之间实际上没有传输任何数据。”?

最佳答案

不幸的是,这是 Unix 方面的糟糕术语。部分问题是历史上缺少硬文件系统(在某些 Unix 变体中得到纠正)。在理想化的分页模型中,用户创建的文件可以用作页面文件。静态数据(包括代码)可以直接从可执行文件中分页。读/写数据从页面文件分页。从这个意义上说,映射是匿名的,因为实际上不是文件而是页面文件的一部分。

在大多数 Unix 变体中,没有页面文件,而是交换分区。这是因为已经存在了几十年的原始 Unix 文件系统设计不佳。传统的 Unix 文件系统没有连续文件的概念。这使得无法对页面文件进行逻辑 I/O。因此,传统的 Unix 使用交换分区。

即使您映射到命名文件,在许多 Unix 变体中映射也仅用于第一次读取。在匿名映射的情况下,第一次读取创建一个需求零页。在这两种情况下,将其写回磁盘都会转到交换分区。从 Unix 的角度来看,将其称为“匿名”映射类型是有道理的,但从概念的角度来看(人们期望内存到文件的映射是双向的)它根本没有意义。

关于linux - 当 CPU 第一次接触匿名文件 (CSAPP) 时,数据是否真的在磁盘和内存之间传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31211841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com