我正在为我的操作系统类编写地址转换器。我知道我正在正确读取虚拟地址,并且我得到的页码是正确的(我访问了正确的数据)但是当我试图弄清楚物理地址是什么时,我得到了错误的物理地址。
眼镜:
- 页表中有 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。
我已经把我的书倒过来了,过去几天一直在试图找出我到底哪里出错了,但我似乎无法弄清楚。