深入理解Linux内核 - 第二章 内存寻址 01

1,三个地址

逻辑地址,机器语言指令中用来指定一个操作数或一条指令的地址。

线性地址:32位无符号整数,高达4GB。64位的cpu就是64位的线性地址

物理地址:内存芯片级内存单元寻址。老式x86由32位或36位无符号整数表示。 

2,MMU内存控制单元

存在一个分段单元的硬件电路将一个逻辑地址转换为线性地址

存在一个分页单元的硬件电路将线性地址转换成一个物理地址。

问题:

1,为什么物理地址能够用36位的地址来表示?

2,为什么是逻辑地址转换成线性地址,再由线性地址转换为物理地址,这3个地址是什么关系?

3,一个程序被objdump后的地址是什么地址?如下片段

0000000000400526 <main>:
400526: 55 push %rbp
400527: 48 89 e5 mov %rsp,%rbp
40052a: 48 83 ec 10 sub $0x10,%rsp
40052e: 89 7d fc mov %edi,-0x4(%rbp)
400531: 48 89 75 f0 mov %rsi,-0x10(%rbp)
400535: bf d4 05 40 00 mov $0x4005d4,%edi
40053a: e8 c1 fe ff ff callq 400400 <puts@plt>
40053f: b8 00 00 00 00 mov $0x0,%eax
400544: c9 leaveq 
400545: c3 retq 
400546: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
40054d: 00 00 00

 

posted @ 2017-08-21 22:31  欲望的鱼  阅读(182)  评论(0)    收藏  举报