给出一个使用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。
答案 0 :(得分:0)
在这些事实下没有答案。您有页表项是32位。这将页面大小的理论上限设置为2 ^ 32。但是,一些位将用于控制,因此大小会更小。
页面表的1MB大小和32位虚拟地址事实与页面大小无关。
答案 1 :(得分:0)
您描述的问题未指定。您需要知道虚拟地址内页面偏移字段的宽度(或VM系统正在使用的间接寻址级别)。例如,(如在x86系统使用的一种模式中),如果您有两个间接级别,那么您将有10x2位用于间接级别,其余12位用于页面内的偏移量。这样您的页面大小(=框架大小)为4KB。
如果改用一种间接寻址级别(允许使用另一种x86模式,但是使用频率较低),则可以将10位除法用于唯一的间接寻址级别,并将剩余的22位除以页面内的偏移量。页面大小为4MB。
您在上方看到相同的32位虚拟地址可以遵循不同的间接寻址级别进行分页,并最终得到不同的页面大小。
虚拟地址中的页面偏移大小确定页面大小。