首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算三级页表的大小

计算三级页表的大小
EN

Stack Overflow用户
提问于 2015-01-11 07:25:15
回答 1查看 2.8K关注 0票数 1

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

我的答案是:-1项用于第一级页表(1*2)+ 2^4项用于第二级页表(2^4*2)+ 2^6项用于第三级页表(2^4*2^6*2)= 2082字节

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

EN

回答 1

Stack Overflow用户

发布于 2015-01-11 17:17:05

我从来没有上过任何OS课程,所以我一直想做这样一个愚蠢的练习。开始吧。我将假设它的工作原理大致类似于x86。

一页是2^10 = 1024 B。

您的任务有256 256=256页内存。

页表项可以映射2^6=64页。所以我们需要256/64=4个全页表格。

我们可以在一个页面dir中安装四个页面表条目(我们可以适应256),我们可以在一个页面dir指针表中安装一个页面dir条目(我当然希望如此)。

因此,我们需要4个完整的‘t,一个PD和一个PDPT,即4*128 + 256 + 256 = 1024字节,假设您可以重用未完全使用的部分页面,并且不希望分页结构将垃圾映射到给定地址之上(这是个坏主意)。喔,回答错了。真奇怪。

让我们看看,如果您保持所有页面对齐,并且假设您不能重用这些页面中浪费的空间,那么会发生什么情况。是4*1024 + 1024 + 1024 = 6144字节。妈的,还是错的答案。

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

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

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

如果我们在任何需要的边界上对齐PD,而不对齐PDPT,则PD和PDPT接受2*(2*2^8)=2*512=1024字节,现在我们有了每个页面表都需要(4608-1024)/4=896字节。也不可能。

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

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

我在这上面浪费了半个小时:)!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27884921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档