我被要求在这些条件下制作一个页表内部内存。
所以我尝试这样做:
所以问题就在这里:主内存是512字= 2048字节= 2KB,这意味着整个内存都是页表,我对吗?如果没有,你能告诉我我在这里做错了什么吗?
该系统有 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 未命中也将指示页未命中/错误。
这是指 TLS 会话吗?它可以刷新多少次并生成新页面?会话或对象以获得更好的词语