免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4438 | 回复: 5

[内存管理] gdb 调试内核时,打印出来变量的地址,究竟是什么地址 [复制链接]

论坛徽章:
0
发表于 2013-04-11 17:31 |显示全部楼层
最近在用gdb 和 bochs调试 0.11,打印用户态变量的地址和内核里变量的地址

搞不懂打印出来的究竟是 线性地址 还是 物理地址 亦或是逻辑地址?

求教了

论坛徽章:
0
发表于 2013-04-11 19:28 |显示全部楼层
虚拟地址 虚拟地址 虚拟地址 虚拟地址

论坛徽章:
0
发表于 2013-04-11 21:02 |显示全部楼层
怎么解释呢这个?完全被这几个地址弄糊涂了。。。

论坛徽章:
0
发表于 2013-04-11 21:26 |显示全部楼层
这种问题自己看书好了。发到论坛上会被人笑话的。

论坛徽章:
0
发表于 2013-05-07 23:25 |显示全部楼层
本帖最后由 l4rmbr 于 2013-05-08 00:10 编辑
a_jige 发表于 2013-04-11 17:31
最近在用gdb 和 bochs调试 0.11,打印用户态变量的地址和内核里变量的地址

搞不懂打印出来的究竟是 线性 ...


Hi, a_jige,

(首先说点话, 建议你先读读<提问的智慧>这篇文章, 只有明确自己的问题, 并做过自己的努力, 
你才会明白有什么问题适合这个地方,你的问题确切的是什么. 
甚至你能为他人提供你已知道的信息, 这样有助他人帮你解决问题, 也能让你的问题免受冷遇或
被人斥责)

对于你的问题, 

*** 短答案 ***
gdb调试打印出来的是线性地址.

*** 长答案 ***
需要讲的东西太多,不适合在一个帖子里说, 建议你google下这几个名词, 这些概念都有很好的文章在说明.
这里简要说一点.

1.物理地址
  就是直观理解的内存条(或其它可寻址主存)的地址,这是一个顺序编码的数组, 可以随机访问某一个地址值

2.逻辑地址
 是物理段机制催生的东西, 简言之, (这里举x86的cpu来说, )
  - 在80286前的Intel CPU, 所谓的逻辑地址就是著名的
        段 : 段内偏移  
  它的计算方法是     段 左移4位 + 段内偏移 = 实际物理地址

  - 在80286 及以后的CPU中, 由于引入了分页的概念, 段其实已经可以退出历史舞台了, 但出于向后兼容性, 还一直保留
  此时的逻辑地址还是以
     段 : 段内偏移  
  的形式, 但是, 它的内含已经变了,
       段不再直接参与最终物理地址的计算. 实际上, 它是一个下标, 指向一个叫_全局描述符表_(GDT)的某一项, 而后从这个
       表中取出基址, 加上段内偏移获得最终的物理地址

3.线性地址,
 顾名思义, 它是寻址模式上的一次"回归", 它摒弃了之前复杂的段+偏移的非线性地址模式, 而表示一个平坦的地址空间中
 的地址. 这个地址空间, 就是内核和物理内存管理单元一同呈现的进程的虚拟地址空间,比如在X86平台上, 就是典型的4G
 空间. 所以, 你问题中的地址就是指这个虚拟地址空间中的线性地址.

 

论坛徽章:
0
发表于 2013-05-08 10:49 |显示全部楼层
多谢了
回复 5# l4rmbr


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP