0

如何将十六进制地址转换为物理地址来回答这个问题?我完全糊涂了,由于语言障碍,我的老师没有帮助。

假设逻辑地址空间为 1KB,页面大小为 16 字节。假设最初此进程的主内存中没有页面,并且使用纯需求分页。当前的空闲帧列表是{2,5,8,1,...}。空闲帧列表中的第一帧将在需要时使用。假设 TLB 有两个条目。TLB 和页表最初都是空的。FIFO用作TLB替换算法。假设按顺序访问以下逻辑地址:0x3d, 0x30, 0xe5, 0x7d, 0x33, 0xef。对于以下每个地址访问:

  1. 指定映射到它的物理地址。
  2. 假设访问TLB需要10ns,访问内存需要100ns,处理缺页需要8ms。访问这个地址需要多长时间?
4

1 回答 1

1

进程启动时,cpu需要访问地址。因此cpu在TLB条目中查找地址,如果找不到该条目,则为TLB未命中,否则为TLB命中。如果它是 TLB 未命中,则它在主存储器中查找地址并使用该地址的 TLB 条目更新 TLB。为了记录操作系统的每个虚拟页面在物理内存中的位置,操作系统保留了一个称为页表的每个进程的数据结构。

主存储器被分成大小为 16 字节的页面。内存总大小 = 1KB。所以页数是 1KB/16 = 2^10/2^4 = 2^6 = 64 页。要将逻辑地址转换为物理地址,您必须将其拆分为 VPN(虚拟页码)和偏移量两部分。由于地址空间为 1KB,因此虚拟地址总共需要 10 位。由于页面大小为 16 字节,您可以像这样进一步划分虚拟地址,高 6 位用于 VPN,低 4 位用于偏移。

最初,主存储器中没有页面。为了访问 0x3d 。它查找TLB。由于缓存最初是空的。这是一个 TLB 未命中,转到主存储器。0x3d 的二进制形式是 0000111101。offset(4bits) = 1101 和 VPN = 000011。所以偏移量是第 3 页的 13 字节。因为页表是空的。所以它是一个页面错误。将物理页带入空闲帧 2 并尝试再次访问该内存并更新页表。现在将虚拟地址转换为物理地址。物理地址是第 2 页的第 13 个字节(因为虚拟页 3 映射到物理帧 2)即 0010(帧号)和 1101(偏移),0x2d(十六进制)。第二次尝试访问时,请按照相同的步骤进行操作,并且尽可能地不会出现 0x30 页面错误。

于 2013-07-08T06:55:36.693 回答