计算三级页表的大小

时间:2015-01-11 07:25:15

标签: operating-system paging

在32位机器中,我们将虚拟地址细分为4个段,如下所示:                            8位8位6位10位 我们使用3级页表,这样前8位用于第一级,依此类推。在以下问题中,大小以字节为单位。 从地址0开始具有256K内存的进程的页表大小是多少? 假设每个页表条目是2个字节。

我的回答是: - 第一级页面表的1个条目(1 * 2)                                 二级页面表的+ 2 ^ 4个条目(2 ^ 4 * 2)                                 第三级页表+ 2 ^ 6个条目(2 ^ 4 * 2 ^ 6 * 2)                                = 2082字节

但实际答案是4608字节。我不知道我哪里出错了。请帮我?

1 个答案:

答案 0 :(得分:0)

我从未参加任何操作系统课程,所以我一直想做一些愚蠢的练习。开始。我将假设这个工作大致类似于x86。

页面是2 ^ 10 = 1024 B。

你的任务有256KiB = 256页内存。

页表条目可以映射2 ^ 6 = 64页。所以我们需要256/64 = 4个整页表。

我们可以在页面目录中放入四个页面表条目(我们可以容纳256个),并且我们可以在页面目录指针表中填入页面目录条目(我当然希望)。

所以我们需要4个完整的PT,一个PD和一个PDPT,它是4 * 128 + 256 + 256 = 1024字节,假设您可以重用未完全使用的部分页面,并且您不需要分页结构将垃圾映射到给定地址之上(这是错误的想法)。哎呀,错误的答案。怪异。

让我们看看如果您保持所有页面对齐并假设您无法重复使用这些页面中的浪费空间会发生什么。那是4 * 1024 + 1024 + 1024 = 6144字节。该死的,仍然是错误的答案。

让我们看看是否有一个解决方案,即使它涉及我们的分页结构的奇怪对齐。毕竟,如果你想要解决具有2个字节条目的分页结构,那么你的分页结构必须在第一个65KiB,或者它们必须是65KiB对齐,或两者的奇怪混合。让我们看看这是否是两者的奇怪组合:

现在,如果我们假设PD和PDPT需要页面对齐,则PD和PDPT需要2 * 1024 = 2048字节。

为了达到解决方案,页面表在对齐后必须采用(4608-2048)/ 4 = 640字节,这是一个虚假对齐(不是2的幂),所以这是不可能的。

如果我们在所需的边界上对齐PD,并且不对齐PDPT,PD和PDPT需要2 *(2 * 2 ^ 8)= 2 * 512 = 1024字节,我们现在有每个页表需要采取(4608-1024)/ 4 = 896字节。也是不可能的。

现在,如果我们真的希望在满足这些要求的任何价格下达到该解决方案,您可以让您的4个PT占用4 * 1024个字节,将510个字节的页面目标与您想要的任何内容对齐,并且只有一个条目PDPT位于PD结束后,即4096 + 512 = 4608字节,即解决方案。但访问16MiB-65KiB = 0xFF0000以上的任何内容都会产生完全不可预测的结果,包括破坏随机内存(因此可能会破坏您的计算机)。但至少会为您的任务映射第一个256KiB!

TL; DR:问题的陈述是错误的,或者您提供的解决方案是错误的。 我还要指出,对于具有1KiB页面的32位地址空间中的分页结构条目,2B是非常愚蠢的。

我只是浪费了半个小时:)!

相关问题