段式存儲管理
段式儲存管理概述
-
在段式儲存管理中,程式是由若干個段組成的。每個段具有獨立且完整的邏輯意義,例如程式主程式、子程式、符號表、堆疊、資料等,都可以分割為不同的段。
-
每個段的長度可以不同,且每個段可以獨立編寫、載入和執行。段式儲存管理是基於程式的邏輯結構進行劃分和管理的,並且能夠更好地適應程式的需求。
-
段式儲存管理支援分段觀點,使得程式的記憶體結構更加清晰,並便於管理,具有較強的邏輯完整性。
基本原理
-
段的劃分:程式的位址空間以邏輯關係劃分為多個段,每個段通常包含一個功能模組(如一個函數)。各段在記憶體中的分佈與程式的邏輯結構相對應。
-
段的獨立性:每個段在記憶體中都有獨立的儲存空間,且段與段之間的儲存位址通常是不連續的,而每個段內的位址是連續的。每個段的地址空間從「0」開始編址。
- 其邏輯位址由段號和段內位址兩部分組成:
空間的分配與回收
- 當一個段落無法找到足夠大的空閒區時,系統可以透過移動技術合併分散的空閒區,方便裝入更大的作業。
- 當作業結束後,它佔用的主存空間會被回收,並登記在空閒分區表中,回收時也會檢查是否有相鄰的空閒分區,將其合併成一個新的空閒區進行管理。
- 段表儲存在主記憶體中,存取資料或指令時可能需要至少存取兩次主存,為了提高速度,常使用高速緩衝暫存器來儲存常用的段表項。
位址轉換與儲存保護
- 段式儲存管理採用動態重定位裝入作業,作業執行時透過硬體的位址轉換機構實現從邏輯位址到實體位址的轉換。
- 段表中的表目充當基址暫存器和限長暫存器,負責硬體的位址轉換。
段的共享
- 段的共享是分段管理的突出優點,可以讓多個進程共享同一段的程式碼或資料。進程在段表中設定相同的段名,並指定適當的讀寫權限。
- 例如,在多使用者係統中,多個使用者可以共用同一個程式段(如文字編輯程式的程式碼),如果該段是可重入的,程式碼只需在主記憶體中保留一份。
- 在分享時,需要注意共享段的修改和置換問題,確保正在使用的共享段不會被置換出主記憶體。共享位可以幫助判斷段是否正在被使用。