根據在什麼時間點指定 address 分為三種:
把參數綁到 硬體的實體位置。當 load 到 memory時,位置也都要相同,看到什麼位置就去那裡讀。例如早期的DOS。
好處:簡單,快
缺點:不能搬動程式,除非 recompile, kill掉重來一次
適用:要常駐的程式。
在 compile 時,先 assign 一個 base register( BS
),並且算相對位置。
在 load時,在看看現在哪裡哪裡有空間,把有空的位置寫進 base register。
好處:可以搬移。load的時候再找位置。
缺點: runtime時要換位置,還是kill 再reload。
適用:管理比較單純
compile 跟 load time 都是相對位置。
memory 位置跟實際位置不一樣: virtual-address
CPU要讀 memory content時,在把 0x18送到 memory之前,會有一個 MMU
介入做 address轉換,變成實體位置。
MMU真的在實作時,是用 hardware 做的,所以才夠快。
負責 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。