Memory Management
- 重點一 : Binding
- 重點二 : Contiguous Memory Allocation
- 重點三 : Fragmentation
- 重點四 : Paging
- 重點五 : Page Table 的製作
- 重點六 : Paging 之相關計算
- 重點七 : Structure of Page Table
- 重點八 : Segment Memory Management (Segmentation)
- 重點九 : Paged Segment Memory Management (分頁式分段)
- 重點十 : 小結
重點一
Binding
- Binding : 決定程式在記憶體執行之起始位址
- Stactic Binding ( logical address = physical address )
-
Compiling Time (Compiler) → 如果編譯時,程式所在的記憶體位置已知,那麼可產生absolute code,將來程式執行的起始位址不得變更 ; 如果起始位置變化,必須重新編譯代碼。
- 缺點:若所決定的位址內有其它的程式在執行,或之後要變更程式執行的起始位址,則須 recompile。
-
Loading Time (linking loader) → 如果編譯時不能確定程式所在的記憶體位置,則必須生成relocatable code
- 優點 : 更程式執行的起始位址不須 recompile。
- 缺點
- execution time 沒有被呼叫到的模組仍需事先 linking, Allocation, Loading,浪費時間也浪費記憶體。 (e.g. if-else 的程序、OS 錯誤處理程序。)
- 程式執行期間仍不可以改變起始位址。
-
- Dynamic Binding ( logical address ≠ physical address )
- Execution Time (O.S) → 在程式執行期間才決定程式執行的起始位址。需要的額外硬體支援(Memory-Management Unit, MMU)。
- 優點
- [1]:Process在執行期間可以任意更動其起始位址,仍能正確執行
- [2]:有利於O.S彈性地管理Memory Space之配置(彈性高)
- 缺點
- [1]:需要Hardware額外支持 → 不是O.S(∵要用O.S需interrupt,而此操作太頻繁不適合)
- [2]:Process Exec.Time 變長 ,Performance 較差
- Paging是用Dynamic binding,雖然Paging也可以用Compiling Time 或 linking Time,但沒什麼意義
- 優點
- Execution Time (O.S) → 在程式執行期間才決定程式執行的起始位址。需要的額外硬體支援(Memory-Management Unit, MMU)。
- Logical address : CPU → Logical address (Virtual addr.) → Logical address space
Physical address : Memory → Physical address (Hareware site e.g RAM) → Physical address space
- Static link → Compile 時 library 就加入程式碼(好幾個程式都#include <stdio.h>,就會有好幾份程式碼分布在記憶體當中,很冗)
- Dynamic linking → call module 後 ,load + link(好幾個程式都#include <stdio.h>,只load一份,大家共用(Share library)
- Def : module 間的 External symbol reference (外部符號參考)之工作,延到 execution time 才做,即不事先
linking,而是在 execution time 時等某個 module 被 call 時,才 loa
- Def : module 間的 External symbol reference (外部符號參考)之工作,延到 execution time 才做,即不事先