Binding及其時期
Def: 決定程式執行的起始位址
- 即: 程式要在記憶體的哪個地方開始執行
- ∵ 所有程式與 Data 均須在 MM 中方可為 CPU 使用
- 連帶地將程式內所宣告的資料與變數位在 MM 的什麼地方也一併確定了
Binding 的時期
- 可能的 Binding 時期有三個:
Compiling Time
Loading Time
Execution Time
Compiling Time
由 Compiler
決定
- 將來程式執行的起始位址是
固定
的,不得變更- 所 Compile 出來的目的碼為
Absolute Obj. Code
。若所決定的位址內有其它的程式在執行,則須Re-compiling
- 彈性太小
- 所 Compile 出來的目的碼為
- 不支援 Relocation (重定位)
- 若要變更程式執行的起始位址,須對程式再 Re-compiling
Loading Time
由 Linking Loader
決定
- Linking Loader 通常會做四件事:
Linking
Allocation
Loading
Relocation
- 程式不一定都由固定位址開始執行 ∴ 每一次程式重執行時,只須再重新 Linking Load 一次即可
- 支援 Relocation (重定位)
缺點:
- 在 Execution Time 沒有被呼叫到的模組仍需事先 Linking, Allocation, Loading,浪費時間,也浪費記憶體
- 若副程式很多,每次重新執行皆須再作 4 項工作,耗時
- 程式執行期間,仍不可以改變起始位址
- A 和 B 這兩個模組不可能同時執行到,但仍需要事先 Linking Load 到 MM 中
- 在 OS 中問題更大條! 因為 OS 有很多錯誤處理程序
Execution Time
由 OS 動態
決定
- 又稱為 Dynamic Binding
- Def: 在程式執行期間 (Execution Time) 才決定程式執行的起始位址。表示程式執行期間,可任意變更其起始位址
- 所需要的額外硬體支援:
- OS 會利用一個
Base Register
,記錄目前程式的起始位址 - 每次 CPU 所送出的 Local Address 皆須與 Base Register
相加
,才會得出 Physical Address,再到 MM 中進行存取
- OS 會利用一個
- 缺點: 程式執行較慢,
Performance 差
- 優點:
彈性高