Skip to content

Latest commit

 

History

History
60 lines (32 loc) · 1.81 KB

Address binding 2d3ca3778974459786140e698e8c6382.md

File metadata and controls

60 lines (32 loc) · 1.81 KB

Address binding

Address binding

根據在什麼時間點指定 address 分為三種:

法一:在 compile time 做 (Absolute code)

把參數綁到 硬體的實體位置。當 load 到 memory時,位置也都要相同,看到什麼位置就去那裡讀。例如早期的DOS。

好處:簡單,快

缺點:不能搬動程式,除非 recompile, kill掉重來一次

適用:要常駐的程式。

法二: 在 load time 做

在 compile 時,先 assign 一個 base register( BS),並且算相對位置。

在 load時,在看看現在哪裡哪裡有空間,把有空的位置寫進 base register。

好處:可以搬移。load的時候再找位置。

缺點: runtime時要換位置,還是kill 再reload。

適用:管理比較單純

法三: 在 execution time 做(runtime)

Address%20binding%202d3ca3778974459786140e698e8c6382/_2020-05-17_12.28.14.png

compile 跟 load time 都是相對位置。

memory 位置跟實際位置不一樣: virtual-address

CPU要讀 memory content時,在把 0x18送到 memory之前,會有一個 MMU 介入做 address轉換,變成實體位置。

MMU真的在實作時,是用 hardware 做的,所以才夠快。

MMU(memory-managment Unit)

負責 address translation。

Base register 會送到 MMU。

假設在 runtime 要移動程式,那就在 MMU 更新Base register,更改成新的位置。

Logical address: 由 CPU 生的,也就是virtual-address

Physical address: 由 memory 生的,是真的實體位置。

小整理

compile-time & load-time address binding: logical addr = physical addr Execution-time address binding: logical addr ≠ physical addr

User 只會看到local address,不會也不需要看到 physical address。