1

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

眼镜:

  • 页表中有 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。

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

4

1 回答 1

0

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

一旦我实现了一个帧表,以及填充帧表的正确方法,我就开始正确地生成物理地址。

于 2015-03-18T00:52:32.927 回答