是否需要始终在商店中设置(TLB 的)脏位?

Does dirty bit (of TLB) need to be setted always on a store?

假设这段愚蠢的 C 代码:

int n = 2;

int main(){
    n = 5;
}

当我的教授向我们讲解 TLB 和页面 table 条目如何工作时,他告诉我们,如果脏位 == 1,则在将该页面从内存逐出到磁盘时,该页面需要复制到磁盘。

但我的问题是:在这个例子中我们有一个存储,那么 TLB(和页面 table)的脏位是否会被设置? 从教授那里我知道是的,但我的常识告诉我不是,因为当我明天执行同一个程序时,我会想(在开始时)找到 n = 2 而不是 5。

可执行文件的数据部分映射到内存,相当于 MAP_PRIVATE,而不是 MAP_SHARED

写入不会更新 文件,但它们确实会使该页面与磁盘上的内容不同步,因此不能将其删除或从磁盘重新加载。可以删除干净的私有页面,但私有映射中的脏页面基本上变成匿名的,由交换 space 而不是磁盘文件支持。

所有这就是为什么存储有必要在页面上设置脏位,所以 OS 知道该 RAM 页面具有当前进程状态的该页面的唯一副本。