80386的分页寻址机制中,cr3寄存器中保存的是当前活动进程的页目录地址,请问这个地址是线性地址还是物理地址?

时间:2021-06-19 01:06:15
80386的分页寻址机制中,cr3寄存器中保存的是当前活动进程的页目录地址,请问这个地址是线性地址还是物理地址?页目录的每个成员中保存的页表的地址是线性地址还是物理地址?我设想了一下:如果他们都是物理地址还可以理解,但如果是线性地址,那么为了寻找该线性地址又得使用80386的分页寻址的方式,这样不就陷入了死循环中了吗?所以我认为cr3寄存器和页目录的每个成员中使用的是物理地址,但为什么书上说是线性地址呢?大家呢明白我的意思吗?请前辈们不吝答疑,赐教,谢谢!

7 个解决方案

#1


摘自《Undocumented Windows NT》,看了半天,更晕了:
当页表范围中的线性地址被转换成物理地址时,处理器会做一系列有趣的动作。 我们假设 CR3 寄存器指向页 X。地址转换的第一步,处理器将页 X 作为页表目录并找到所给线性地址的页表。而页表恰巧又在页 X 内,处理器又将页 X 当作所需的页表并从中找到物理地址。 当操作系统自己访问页表目录时,会发生一种更有趣的情况,此时物理地址也在页 X 里!
——请前辈们给解释解释呀!谢谢!

#2


你的理解是对的,不要迷信书本。

要看书的话最好看Intel Microprocessors, 或者Intel官方提供下载的三本书。你会在那里面找到答案。

#3


Cybergate() 能不能确切的指出“Intel官方提供下载的三本书”是哪三本书?最好能给各下载连接,谢谢!

#4


http://developer.intel.com/design/pentium4/manuals/index_new.htm#sdm_vol3

把相应的pdf下下来就行了

#5


建议不要只看一本书,如果发现问题,就去找其他资料查证。
按照你的说法,等于说是 INTEL 的设计失误,而不是 WINDOWS 的错误。
但是你觉得 INTEL 的错误会一直这么存在着么?

#6


不是一直存在,而是这个错误应该从来就没存在过,也绝对不允许存在。

老实说那段引用我根本就看不懂,不知道是不是翻译问题。能否给出原文链接?

#7


感谢 Cybergate和 W32API() 摘自《Undocumented Windows NT》的原文我还没有找到,这本书的英文版我一直没有找到下载,我再找一下。

#1


摘自《Undocumented Windows NT》,看了半天,更晕了:
当页表范围中的线性地址被转换成物理地址时,处理器会做一系列有趣的动作。 我们假设 CR3 寄存器指向页 X。地址转换的第一步,处理器将页 X 作为页表目录并找到所给线性地址的页表。而页表恰巧又在页 X 内,处理器又将页 X 当作所需的页表并从中找到物理地址。 当操作系统自己访问页表目录时,会发生一种更有趣的情况,此时物理地址也在页 X 里!
——请前辈们给解释解释呀!谢谢!

#2


你的理解是对的,不要迷信书本。

要看书的话最好看Intel Microprocessors, 或者Intel官方提供下载的三本书。你会在那里面找到答案。

#3


Cybergate() 能不能确切的指出“Intel官方提供下载的三本书”是哪三本书?最好能给各下载连接,谢谢!

#4


http://developer.intel.com/design/pentium4/manuals/index_new.htm#sdm_vol3

把相应的pdf下下来就行了

#5


建议不要只看一本书,如果发现问题,就去找其他资料查证。
按照你的说法,等于说是 INTEL 的设计失误,而不是 WINDOWS 的错误。
但是你觉得 INTEL 的错误会一直这么存在着么?

#6


不是一直存在,而是这个错误应该从来就没存在过,也绝对不允许存在。

老实说那段引用我根本就看不懂,不知道是不是翻译问题。能否给出原文链接?

#7


感谢 Cybergate和 W32API() 摘自《Undocumented Windows NT》的原文我还没有找到,这本书的英文版我一直没有找到下载,我再找一下。