如何计算单个进程的页表内存大小?

问题描述 投票:0回答:1

在具有 32 位地址空间和 4KB 页面大小的给定系统中,主存储器为 16MB。页表是单级页表,总是分配在主存中。页表中的每个条目包含一个帧号和 4 个控制位。

存储单个进程的页表所需的内存大小(以兆字节 (MB) 为单位)是多少?

我通过使用给定的大小和位数尝试了几种计算。但他们都没有帮助。

memory operating-system computer-science paging virtual-memory
1个回答
0
投票

计算页表大小的一种方法是将虚拟地址拆分为“页表索引+偏移量”格式;使用“页表索引”来确定需要有多少个页表项,然后将其乘以一个页表项的大小。

“4 KiB 页”意味着 12 位用于页内的偏移量(因为

1 << 12 = 4096 = 4 KiB). If we assume (see note) that virtual addresses are 32 bits, then the size of a page table index must be 
32 - 12 = 20 位
and a page table must have
1 << 20 = 1048576 entries`.

如果我们假设(见注释)物理地址也是 32 位,那么页表条目的大小也必须至少为

32 - 12 = 20 bits
。然而,页表条目中总是有更多位用于其他目的(表示该页是否存在,可能确定该页是否可写或可执行,可能标记表明该页是否已被访问)。访问或修改等);如果页表项不是方便的“2 的幂”个完整字节(或字?),那就很尴尬了。因此,我预计页表条目的大小将四舍五入为 32 位(每个条目 4 字节),或者可能为 64 位(每个条目 8 字节),即使添加未使用的填充来实现这一点;但不可能从问题中的(缺乏)信息判断页表条目中有多少其他位。

所有这些加起来意味着整个页表的大小很可能是

1048576 entries * 4 bytes per entry = 4194304 bytes = 4 MiB
,但无法确定,因为问题缺乏信息。

注意:“在具有 32 位地址空间的给定系统中”这句话有 2 个问题。第一个问题是您无法判断它是在谈论物理地址空间还是虚拟地址空间(这些空间可以而且通常是不同的大小)。另一个问题是(如果从字面上理解的话)32 位非常小。这会导致您依赖假设 - 例如也许物理地址空间和虚拟地址空间大小相同,并且物理地址和虚拟地址可能是 32 位,因此地址空间是 4 GiB(或 1099511627776 位而不是 32 位),但也许这些假设都错了。

© www.soinside.com 2019 - 2024. All rights reserved.