【发布时间】:2019-01-12 06:30:01
【问题描述】:
在 xv6 中,每个进程都有一个名为 proc 的结构,用于存储进程的状态。 它有一个名为 pgdir 的字段,指向它的页面目录。 我的问题是:它应该将最后一个元素的索引存储在其页面目录中。我的意思是,如果它想分配一个新的页表,它应该在 pgdir 中放置它的引用。 我的问题是它如何知道页面目录的下一个元素在哪里?
感谢您的帮助。
【问题讨论】:
标签: memory-management xv6 page-tables
在 xv6 中,每个进程都有一个名为 proc 的结构,用于存储进程的状态。 它有一个名为 pgdir 的字段,指向它的页面目录。 我的问题是:它应该将最后一个元素的索引存储在其页面目录中。我的意思是,如果它想分配一个新的页表,它应该在 pgdir 中放置它的引用。 我的问题是它如何知道页面目录的下一个元素在哪里?
感谢您的帮助。
【问题讨论】:
标签: memory-management xv6 page-tables
我问了现实世界的一些人,我了解到 p->sz 存储了进程页面目录中第一个空闲元素的索引
【讨论】:
该进程始终使用 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(第二个)。
【讨论】: