CSDN=>FAQ=>FAQ 展示
  • 问题内容:修改页表项的问题,虚拟地址计算问题,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)
相关FAQ
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo