Operating system 虚拟地址到物理地址

Operating system 虚拟地址到物理地址,operating-system,virtual-address-space,Operating System,Virtual Address Space,我正在为我的操作系统类编写一个地址转换器。我知道我读的虚拟地址是正确的,我得到的页码是正确的(我访问了正确的数据),但当我试图找出物理地址时,我得到了错误的物理地址 规格: 页面表中的2^8个条目 页面大小=2^8字节 帧大小=2^8字节 256帧 物理内存=65536字节(256帧×256字节帧大小) 以下是正确的输出: 虚拟地址:12107物理地址:2635值:-46 以下是我得到的: 虚拟地址:12107物理地址:12107值:-46 据我所知,物理地址等于(pageNumber*pa

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

规格:

  • 页面表中的2^8个条目
  • 页面大小=2^8字节
  • 帧大小=2^8字节
  • 256帧
  • 物理内存=65536字节(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


我倾注了我的书,在过去的几天里,我一直试图找出我到底哪里出了错,但我似乎不明白

我明白了发生了什么,我在实现页表时有一个误解。我有一个页表,但没有它所指向的帧表,页表实际上完全绕过了这一步,所以实际上我的物理地址和逻辑地址是相同的

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