【问题标题】:How do I calculate the size of a virtual page in a system?如何计算系统中虚拟页面的大小?
【发布时间】:2019-03-25 00:38:23
【问题描述】:

给定一个使用 32 位虚拟地址的虚拟内存系统。 每个进程占用 1 MiB 内存的页表。 每个 PTE(页表条目需要 4 个字节。 系统共有 256 MB 可用内存。

我了解页表本质上是一个条目列表 (PTE),它提供虚拟地址到物理地址的映射。

我需要计算每个虚拟页面的大小。但我不知道如何。 到目前为止,我得到的只是 2^20(page-table size)/2^2(PTE size)=2^18 这给了我可以在页表中拥有的条目总数。我什至不确定这对于查找每个虚拟页面的大小是否有用。

谁能指出我正确的方向?也许我误解了这些指标与虚拟页面大小的关系。

编辑:我发现页面的大小由以下决定。 虚拟地址由页指针位和偏移量组成。 虚拟地址的最后一位称为偏移量,它是您想要的字节地址与页面开始之间的位置差异。您需要足够的偏移位才能访问页面中的任何字节。对于 4K 页面,您需要 (4K == (4 * 1024) == 4096 == 212 ==) 12 位偏移量。

页指针可以由表中的条目数确定。这只是我在 2^20(page-table size)/2^2(PTE size)=2^18 个条目之前的公式。这意味着我的页面指针的虚拟地址中使用了 18 位。我可以通过 2^32(虚拟地址大小)/2^18 来确定偏移量,这给了我 2^14。因此,我的虚拟地址的页面大小为 2^14 或 16KiB。

【问题讨论】:

    标签: operating-system computer-science cpu-architecture virtual-memory


    【解决方案1】:

    您描述的问题未得到充分说明。您需要知道虚拟地址中页偏移字段的宽度(或者,VM 系统使用了多少级间接)。例如,(如 x86 系统使用的一种模式),如果您有两个间接级别,那么您将有 10x2 位用于间接级别,其余 12 位用于页面内的偏移量。这为您提供了 4KB 的页面大小(= 帧大小)。

    如果您改为使用一级间接(因为允许使用另一种 x86 模式,但不太常见),那么您可以将 10 位除以用于唯一的间接级别,其余 22 位作为页面内的偏移量。页面大小为 4MB。

    您在上面看到,相同的 32 位虚拟地址可以遵循不同的分页间接级别,并最终得到不同的页面大小。

    虚拟地址中的页面偏移大小决定了页面大小。

    【讨论】:

    • 我已经确定答案是 2^14,正如我的讲师所确认的那样。请查看我的编辑。
    【解决方案2】:

    在这些事实下没有答案。您的页表条目是 32 位的。这将页面大小的理论上限设为 2^32。但是,一些位将用于控制,因此大小会更小。

    页表的 1MB 大小和 32 位虚拟地址事实与页大小无关。

    【讨论】:

    • 我已经确定答案是 2^14,正如我的讲师所确认的那样。请查看我的编辑。
    • 问题是你没有给出页表条目的数量。你的讲师给你灌输了一些没有现实的学术废话,对不起。页表的大小不是[必然]“2^20(页表大小)/2^2(PTE 大小)=2^18 个条目。”
    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 2014-03-14
    • 2016-09-26
    • 1970-01-01
    • 2011-09-09
    • 2016-09-10
    • 2013-07-29
    相关资源
    最近更新 更多