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

Operating system 如何计算系统中虚拟页面的大小?,operating-system,computer-science,cpu-architecture,virtual-memory,Operating System,Computer Science,Cpu Architecture,Virtual Memory,给定一个使用32位虚拟地址的虚拟内存系统。 每个进程占用1 MiB内存的页表。 每个PTE(页)表条目需要4个字节。 系统总共有256 MB的可用内存 我知道页表本质上是一个条目列表(PTE),它提供了虚拟地址到物理地址的映射 我需要计算每个虚拟页面的大小,但我不知道如何计算。 到目前为止,我只得到了2^20(页表大小)/2^2(PTE大小)=2^18这给了我一个页表中可以包含的条目总数。我甚至不确定这对查找每个虚拟页的大小是否有用 有人能给我指出正确的方向吗?也许我误解了这些指标与虚拟页面大小

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

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

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

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

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


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

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


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

您描述的问题未指定。您需要知道虚拟地址中页面偏移字段的宽度(或VM系统使用的间接寻址级别)。例如,(与x86系统使用的其中一种模式相同),如果有两级间接寻址,则将有10x2位用于间接寻址,其余12位用于页面内的偏移量。这将使页面大小(=帧大小)为4KB

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

您可以在上面看到,相同的32位虚拟地址可以采用不同的间接寻址级别进行分页,并最终得到不同的页面大小


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

我已确定讲师确认的答案为2^14。请查看我的编辑。我已确定讲师确认的答案为2^14。请查看我的编辑。问题是您没有给出页面表条目数。您的讲师正在向您提供抱歉,有些学术上的胡说八道是不现实的。页表的大小不一定是“2^20(页表大小)/2^2(PTE大小)=2^18个条目。”