【问题标题】:Virtual Address to Physical address虚拟地址到物理地址
【发布时间】:2015-05-04 21:41:33
【问题描述】:

我正在为我的操作系统类编写地址转换器。我知道我正在正确读取虚拟地址,并且我得到的页码是正确的(我访问了正确的数据)但是当我试图弄清楚物理地址是什么时,我得到了错误的物理地址。

规格:

  • 页表中有 2^8 个条目
  • 页面大小 = 2^8 字节
  • 帧大小 = 2^8 字节
  • 256 帧
  • 物理内存 = 65,536 字节(256 帧 × 256 字节帧大小)

这是一个正确的输出:

虚拟地址:12107 物理地址:2635 值:-46

这是我得到的:

虚拟地址:12107 物理地址:12107 值:-46

据我了解,物理地址等于 (pageNumber * pageSize + pageOffset) 我读过的所有内容都这么说。

当我从 12107 获取页码时,我得到 47(最左边 8 位) 当我得到 12107 的偏移量时,我得到 75(最右边的 8 位) (47 * 256 + 75) 得到 12107。

要获得正确的输出(物理地址),页码需要为 10 (10 * 256 + 75) 得到正确的输出 2635。

我已经把我的书倒过来了,过去几天一直在试图找出我到底哪里出错了,但我似乎无法弄清楚。

【问题讨论】:

    标签: operating-system virtual-address-space


    【解决方案1】:

    我弄清楚发生了什么,我对页表的实现有误解。我有一个页表,但没有它指向的帧表,页表实际上完全绕过了该步骤,所以实际上我的物理地址和逻辑地址是相同的。

    一旦我实现了一个帧表,并使用了一种适当的方法来填充帧表,我就开始正确地生成物理地址。

    【讨论】:

      猜你喜欢
      • 2013-05-05
      • 2017-07-07
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多