【问题标题】:How does xv6 knows where last element of p->pgdir is?xv6 如何知道 p->pgdir 的最后一个元素在哪里?
【发布时间】:2019-01-12 06:30:01
【问题描述】:

在 xv6 中,每个进程都有一个名为 proc 的结构,用于存储进程的状态。 它有一个名为 pgdir 的字段,指向它的页面目录。 我的问题是:它应该将最后一个元素的索引存储在其页面目录中。我的意思是,如果它想分配一个新的页表,它应该在 pgdir 中放置它的引用。 我的问题是它如何知道页面目录的下一个元素在哪里?

这张图片更能解释我的问题:

感谢您的帮助。

【问题讨论】:

    标签: memory-management xv6 page-tables


    【解决方案1】:

    我问了现实世界的一些人,我了解到 p->sz 存储了进程页面目录中第一个空闲元素的索引

    【讨论】:

      【解决方案2】:

      该进程始终使用 proc 结构中的 sz 字段跟踪他的程序使用了多少字节。有了这些知识,就很容易计算出最后使用的页表项和页目录项是什么。

      例如,如果一个程序此刻使用了 8000 个字节(意思是 sz = 8000): 在 XV6 中,每个内存页为 4096 字节(PGSIZE),每个页目录项中有 1024 个页表项。因此,每个页目录条目可以指向 4096 * 1024 字节(4 MB),每个页表条目可以指向 4096 字节(4 KB)。

      表示进程最后一页目录项为:sz / 4 MB(向下取整)。 lasts page目录中的进程最后页表为:sz / 4 KB(向下取整)。在 sz = 8000 示例中,这意味着:页目录条目 0(第一个)和页表条目 1(第二个)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-13
        • 2012-04-18
        • 1970-01-01
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多