1. 程式人生 > >深入理解Linux內核 - 第二章 內存尋址 01

深入理解Linux內核 - 第二章 內存尋址 01

lin linu 地址 什麽 邏輯地址 問題 理解 整數 深入

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 <[email protected]
/* */>
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

深入理解Linux內核 - 第二章 內存尋址 01