获取内存量很小(总页数只有几个)的系统的页表大小

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

我被要求在这些条件下制作一个页表内部内存

  1. 我们有 16 位虚拟地址
  2. 内存大小为512字
  3. 页面大小为128字节

所以我尝试这样做:

  1. 2^16 / 2^7 = 2^9 页
  2. 2^9 * 4 = 2^11 字节 = 2KB 页表大小,假设每个条目为 4 字节。

所以问题就在这里:主内存是512字= 2048字节= 2KB,这意味着整个内存都是页表,我对吗?如果没有,你能告诉我我在这里做错了什么吗?

memory-management cpu-architecture paging page-tables
2个回答
1
投票

该系统有 8 或 16 页,具体取决于单词的定义。  通常,在 16 位系统上,字 = 2 个字节,而不是 4 个字节,所以我假设情况是这样,但是 YMMV。  这意味着主内存是 1KB(不是 2KB)。

然而,因为只有 8 个页面,这意味着一个普通的页表条目只需要几个位(物理页号是 0-7,所以是 3 位),因此每个虚拟页可能至多一个字节 —甚至可能小到一个半字节(半字节),这意味着您需要 512 个半字节,例如256 字节。

但是,即使存在很小的 TLB,这也会对有限的物理内存造成巨大浪费。  我会反向重新设计页表数组(这称为反向页表,就像软件中TLB的扩展)。

通常,页表通过虚拟页号进行索引,每个索引处的元素保存该索引的物理页号。  这意味着理论上 O(1) 访问给定虚拟地址的页表条目。

反过来就意味着该表是按物理页号索引的,这使得整个表总共只有 8 个条目长!  这样的表不能通过虚拟页号进行索引,但可以搜索,并且由于只有 8 个条目需要搜索,所以这不是一个大搜索 - 所以平均我们有 O(4),这实际上与 O( 1)。  可能每个条目有两个字节大,包含一个虚拟页号(9 位)和一些状态位(2 个字节中还剩下 7 位用于状态)。

正如我所提到的,如果 TLB 很小,这种安排将实现紧凑的页表存储,同时在 TLB 未命中时产生较小的搜索成本。

理想情况下,如果 TLB 有 8 个条目,则足以映射具有物理页的所有地址的虚拟地址,并且有效虚拟内存访问上的 TLB 未命中也将指示页未命中/错误。


0
投票

这是指 TLS 会话吗?它可以刷新多少次并生成新页面?会话或对象以获得更好的词语

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.