虚拟地址到物理地址

时间:2015-03-04 01:48:06

标签: operating-system virtual-address-space

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

规格:

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

我已经倒了我的书,并且花了最后几天试图找出我出错的地方,但我似乎无法弄明白。

1 个答案:

答案 0 :(得分:0)

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

一旦我实现了一个框架表,并且填充框架表的正确方法,我开始正确地生成物理地址。