在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字节。我不知道我哪里弄错了。请帮帮我?
发布于 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是非常愚蠢的。
我在这上面浪费了半个小时:)!
https://stackoverflow.com/questions/27884921
复制相似问题