如何计算系统中虚拟页面的大小?

How do I calculate the size of a virtual page in a system?

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

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

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

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

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

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

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

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

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

如果您改为使用一级间接寻址(作为允许的另一种 x86 模式,但很少见),那么您可以将 10 位划分为唯一的间接寻址级别,并将剩余的 22 位作为偏移量页。这给出了 4MB 的页面大小。

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

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