-
问题内容:修改页表项的问题,虚拟地址计算问题,TLB控制
- 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=4827135
- 所属论坛:汇编语言
审核组:其他开发语言
- 提问者:WYlslrt
解决者:WYlslrt
- 感谢:mydo
- 关键字:其他开发语言 汇编语言 tlb 分页模式 快表 虚拟地址映射
- 答案:
我在bochs下
页目录第一项pte0 = pdt[0] = 0x1000(这里仅是物理页框号)
虚拟地址0x8000,应该占用pte[8]页表项。
pdt[2] = 0xa000
pte[8] = 0xa000,而pte[9] = 0x9000,
我本意让[0x8000] = 0xa001,其实0xa000也是个页表项,
只是想让它的第一项指向它自己,即它的虚拟地址为0x800000,
但是问题出现了,我在执行[0x8000] = 0xa001赋值操作时,
发现物理地址0xa000 的内存单元没有被改变,但是0x9000物理地址单元的内容被改为0xa001,
这是为什么?
我这样想有错误吗?
但是在vmware下运行,则没有问题,而且运行多少遍都没有问题,在bochs下,运行第一次没有出错,但是第二次就出现上述问题。
哪位大虾帮帮我啊,谢谢。
---------------------------------------------------------------
1 你说的pdt是页目录表,pde是页表对么?
2 0x8000 应该是线性地址而不是虚拟地址吧?
以下是根据你的理解:
如果你说的pdt 是页目录表,且 pdt[0]=0x1000 仅是物理页框号
则 &pde[0]=0x1000_000,所以 pde[8] 表示的线性地址范围为
0x0008_000-0x0008_fff,你现在 pte[8] = 0xa000 (省略后面12位吧?)故有
0x0008_000---0x0008_fff -> 物理地址 0xa000_000---0xa000_fff
0x0009_000---0x0009_fff -> 0x9000_000---0x9000_fff
你的意图是将线性地址 [0x8000] = 0xa001 对么?
这样的话实际会对 0xa000_000 的物理地址进行赋值。
你是这个意思么?
- 评价:
给朵鲜花(0)
扔个鸡蛋(0)