免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1792 | 回复: 8
打印 上一主题 下一主题

弱问一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-07 14:33 |只看该作者 |倒序浏览
程序计数器PC中放的是逻辑地址,还是物理地址

论坛徽章:
0
2 [报告]
发表于 2009-05-07 14:40 |只看该作者
原帖由 youshuang 于 2009-5-7 14:33 发表
程序计数器PC中放的是逻辑地址,还是物理地址

取决于当前CPU的工作模式
x86在进入保护模式后是虚拟地址

论坛徽章:
0
3 [报告]
发表于 2009-05-07 14:46 |只看该作者

回复 #2 zx_wing 的帖子

那是不是说在保护模式下,程序要执行内存中的下一条指令是根据PC中的虚拟地址经转换成物理地址获得?
还有,按你的意思,在实模式下PC中应该是物理地址?欢句话说,实模式下ld86链接的程序就是按照物理地址来分布的,对吗?
谢谢赐教!

论坛徽章:
0
4 [报告]
发表于 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

论坛徽章:
0
5 [报告]
发表于 2009-05-08 10:57 |只看该作者

回复 #4 accessory 的帖子

你是说虚拟地址是线性地址?但是赵炯的书上说虚拟地址是逻辑地址。

论坛徽章:
0
6 [报告]
发表于 2009-05-08 11:10 |只看该作者

回复 #5 youshuang 的帖子

"虚拟地址是逻辑地址"的说法不正确,应该说Linux下面虚拟地址=逻辑地址

论坛徽章:
0
7 [报告]
发表于 2009-05-08 11:11 |只看该作者
一般而言,PC中存放的应该是虚拟地址(在进入保护模式之后),然后呢,真实的物理地址需要根据分页机制去转换成为物理地址.

论坛徽章:
0
8 [报告]
发表于 2009-05-08 11:36 |只看该作者
我想了一下,PC中因该一直存放的就是虚拟地址,也就是程序的逻辑地址,即使在实模式下也是这样。
只不过实模式下没有开启分段和分页机制,所以虚拟地址=物理地址。

所以就不必担心是用ld还是ld86来链接程序。至少在最新的内核里面,无论用什么方式链接,
最终得到的程序代码,或者说虚拟地址是从0开始,一直排到4G。

论坛徽章:
0
9 [报告]
发表于 2009-05-08 11:43 |只看该作者
我之所以想问这个问题是由于:
既然内核也像普通程序一样被编译链接,那么其中的逻辑地址空间和普通程序没什么不一样。
但是内核加载后,应该会有一部分代码(开头的那些初始化代码)运行在实模式下(这点不像普通应用程序),
这时候PC中的逻辑地址没有经过分段和分页机制转换到物理地址。

现在有点明白了:实模式下根本不需要转换!
呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP