【问题标题】:Translating from logical address to physical address. Logical addresses are hex从逻辑地址转换为物理地址。逻辑地址是十六进制
【发布时间】:2013-07-05 06:36:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: memory memory-management operating-system tlb


    【解决方案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 页面错误。

    【讨论】:

      猜你喜欢
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2015-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多