页表的总内存和页数来自电影 The Social Network

问题描述

在看完电影社交网络 (2010) 后,我正在研究似乎启发了编剧的哈佛示例问题。我只是想刷新我对计算机体系结构的记忆。

一个示例问题:假设我们有一台具有 16 位 虚拟地址,页面大小为 256 字节。该系统采用 一级页表,从地址 0x0400 开始。 (前几 页是为硬件标志等保留的。也许你想拥有 16 位系统上的 DMA,谁知道?)假设页表条目有 8 个状态位:1 个有效位、1 个修改位、1 个参考位和 5 个 权限位(这是一个非常安全的系统)。 有多少页?页表需要多少内存?

遗憾的是,我发现自己对自己的答案并不完全有信心。我认为物理内存空间是 2^16 - 2^10(当你排除内存空间高达 0x0400 时),所以页数应该是 252 (=(2^16 - 2^10) / 256)。给定每个物理内存条目的大小有两个字节(PPN 为 8 位 + 页偏移为 8 位),页表应占用 504 字节(252 个条目 x 2 字节)。

我还遗漏了什么吗?

解决方法

考虑到周围的文字,我认为“保留”意味着不可用于常规用户空间,即保留用于 MMIO 地址。不是那个软件根本不能碰它。

因此,您希望能够将任何物理页面地址映射到虚拟地址(以便您的操作系统可以读取/写入这些硬件标志)。

因此您实际上想要所有 256 个 PTE,而不是通过从虚拟页码中减去 3 来偏置页表索引。

但是是的,2 字节 PTE(页表条目)由 8 个标志位和 8 个页框(物理页)页号位组成,您需要其中的 256 个。 (虚拟地址的高 8 位,即虚拟页码,可以有 256 个值)。