Binding及其時期

  • Def: 決定程式執行的起始位址

  • 即: 程式要在記憶體的哪個地方開始執行
    • ∵ 所有程式與 Data 均須在 MM 中方可為 CPU 使用
    • 連帶地將程式內所宣告的資料與變數位在 MM 的什麼地方也一併確定了

Binding 的時期

  • 可能的 Binding 時期有三個:
    1. Compiling Time
    2. Loading Time
    3. Execution Time

Compiling Time

Compiler 決定

  • 將來程式執行的起始位址是固定的,不得變更
    • Compile 出來的目的碼為 Absolute Obj. Code若所決定的位址內有其它的程式在執行,則須 Re-compiling
    • 彈性太小
  • 不支援 Relocation (重定位)
  • 若要變更程式執行的起始位址,須對程式再 Re-compiling

Loading Time

Linking Loader 決定

  • Linking Loader 通常會做四件事
    1. Linking
    2. Allocation
    3. Loading
    4. Relocation
  • 程式不一定都由固定位址開始執行 ∴ 每一次程式重執行時,只須再重新 Linking Load 一次即可
  • 支援 Relocation (重定位)

缺點:

  • Execution Time 沒有被呼叫到的模組仍需事先 Linking, Allocation, Loading浪費時間,也浪費記憶體
  • 副程式很多,每次重新執行皆須再作 4 項工作耗時
  • 程式執行期間,仍不可以改變起始位址

    • AB 這兩個模組不可能同時執行到,但仍需要事先 Linking LoadMM
    • OS 中問題更大條! 因為 OS 有很多錯誤處理程序

Execution Time

OS 動態 決定

  • 又稱為 Dynamic Binding
  • Def: 在程式執行期間 (Execution Time) 才決定程式執行的起始位址。表示程式執行期間,可任意變更其起始位址
  • 所需要的額外硬體支援
    • OS 會利用一個 Base Register,記錄目前程式的起始位址
    • 每次 CPU 所送出的 Local Address 皆須與 Base Register 相加,才會得出 Physical Address,再到 MM 中進行存取
  • 缺點: 程式執行較慢,Performance 差
  • 優點: 彈性高