Chinaunix
标题:
弱问一下
[打印本页]
作者:
youshuang
时间:
2009-05-07 14:33
标题:
弱问一下
程序计数器PC中放的是逻辑地址,还是物理地址
作者:
zx_wing
时间:
2009-05-07 14:40
原帖由
youshuang
于 2009-5-7 14:33 发表
程序计数器PC中放的是逻辑地址,还是物理地址
取决于当前CPU的工作模式
x86在进入保护模式后是虚拟地址
作者:
youshuang
时间:
2009-05-07 14:46
标题:
回复 #2 zx_wing 的帖子
那是不是说在保护模式下,程序要执行内存中的下一条指令是根据PC中的虚拟地址经转换成物理地址获得?
还有,按你的意思,在实模式下PC中应该是物理地址?欢句话说,实模式下ld86链接的程序就是按照物理地址来分布的,对吗?
谢谢赐教!
作者:
accessory
时间:
2009-05-07 22:14
那是不是说在保护模式下,程序要执行内存中的下一条指令是根据PC中的虚拟地址经转换成物理地址获得?
基本上是.
还有,按你的意思,在实模式下PC中应该是物理地址?
是的. 后面那个问题不清楚.
另外,在保护模式下,程序里用的应该叫逻辑地址(LOGICAL ADDRESS), 它经过 SEGMENTATION UNIT转换为虚拟地址(VIRTUAL ADDRESS), 又叫线性地址 (LINEAR ADDRESS). 然后再经过PAGING UNIT 转换为物理地址(PHYSICAL ADDRESS).
参见 :UNDERSTANDING THE LINUX KERNEL 3RD EDITION. CH 2.1
作者:
youshuang
时间:
2009-05-08 10:57
标题:
回复 #4 accessory 的帖子
你是说虚拟地址是线性地址?但是赵炯的书上说虚拟地址是逻辑地址。
作者:
converse
时间:
2009-05-08 11:10
标题:
回复 #5 youshuang 的帖子
"虚拟地址是逻辑地址"的说法不正确,应该说Linux下面虚拟地址=逻辑地址
作者:
converse
时间:
2009-05-08 11:11
一般而言,PC中存放的应该是虚拟地址(在进入保护模式之后),然后呢,真实的物理地址需要根据分页机制去转换成为物理地址.
作者:
youshuang
时间:
2009-05-08 11:36
我想了一下,PC中因该一直存放的就是虚拟地址,也就是程序的逻辑地址,即使在实模式下也是这样。
只不过实模式下没有开启分段和分页机制,所以虚拟地址=物理地址。
所以就不必担心是用ld还是ld86来链接程序。至少在最新的内核里面,无论用什么方式链接,
最终得到的程序代码,或者说虚拟地址是从0开始,一直排到4G。
作者:
youshuang
时间:
2009-05-08 11:43
我之所以想问这个问题是由于:
既然内核也像普通程序一样被编译链接,那么其中的逻辑地址空间和普通程序没什么不一样。
但是内核加载后,应该会有一部分代码(开头的那些初始化代码)运行在实模式下(这点不像普通应用程序),
这时候PC中的逻辑地址没有经过分段和分页机制转换到物理地址。
现在有点明白了:实模式下根本不需要转换!
呵呵。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2