在操作系統中,分段是一種記憶體管理技術,其中記憶體分為可變大小的部分。 每個部分被稱為可以分配給進程的段。
有關每個段的詳細資訊存儲在稱為段表的表中。 分段表存儲在一個(或多個)分段中。
分段表主要包含兩個關於分段的資訊:
- 基:它是細分分段的基地址
- 限制:它是分段的長度。
為什麼需要分段?
到目前為止,我們使用分頁作為主要記憶體管理技術。 分頁更接近操作系統而不是用戶。 它將所有進程劃分為頁面形式,而不管進程是否具有需要在同一頁面中加載的某些相關功能部分。
操作系統不關心用戶對過程的看法。 它可以將相同的功能劃分為不同的頁面,這些頁面可以或不可以同時加載到記憶體中。 它降低了系統的效率。
將進程劃分為細分部分最好是細分。 每個段包含相同類型的功能,例如main函數可以包含在一個分段中,並且庫函數可以包含在另一個分段中。
邏輯地址按段表轉換為物理地址
CPU產生一個包含兩部分的邏輯地址:
- 分段號
- 偏移量
分段號被映射到段表。 將各段的限制與偏移進行比較。 如果偏移量小於極限值,則地址有效,否則由於地址無效而引發錯誤。
在有效地址的情況下,該段的基地址被添加到偏移量以獲得主記憶體中實際字的物理地址。
分段的優勢
- 沒有內部碎片
- 平均分段大小大於實際頁面大小。
- 較少開銷
- 重定位段比整個地址空間更容易。
- 與分頁中的頁表相比,分段表更小。
分段的缺點
- 它可以有外部碎片。
- 很難將連續記憶體分配給可變大小的分區。
- 昂貴的記憶體管理演算法。