【问题标题】:Does dirty bit (of TLB) need to be setted always on a store?是否需要始终在商店中设置(TLB 的)脏位?
【发布时间】:2020-10-12 10:39:25
【问题描述】:

假设这个愚蠢的 C 代码:

int n = 2;

int main(){
    n = 5;
}

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

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

【问题讨论】:

    标签: x86 cpu processor tlb page-tables


    【解决方案1】:

    可执行文件的数据部分使用MAP_PRIVATE而不是MAP_SHARED的等效项映射到内存中。

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

    这就是为什么存储需要在页面上设置脏位的原因,因此操作系统知道这个 RAM 页面具有当前进程状态的这个页面的唯一副本。

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      相关资源
      最近更新 更多