作業系統設計/分段
外觀
< 作業系統設計
分段是實現記憶體保護最常見的方法之一。在使用分段的計算機系統中,引用記憶體位置的指令運算元包含一個值,該值標識一個段和該段內的偏移量。一個段具有與之關聯的一組許可權和長度。如果當前執行的程序被許可權允許進行它試圖進行的記憶體引用型別,並且段內的偏移量在段長度指定的範圍內,則允許該引用;否則,將引發硬體異常。
除了許可權集和長度之外,一個段還與之關聯的資訊指示該段在記憶體中的位置。它可能還包含一個標誌,指示該段是否存在於主記憶體中;如果該段不存在於主記憶體中,將引發異常,作業系統將從輔助儲存器中將該段讀入記憶體。指示段在記憶體中的位置的資訊可能是段中第一個位置的地址,也可能是段的頁表地址,如果分段是使用分頁實現的。在第一種情況下,如果對段內某個位置的引用,則段內偏移量將新增到段中第一個位置的地址,以給出所引用項在記憶體中的地址;在第二種情況下,段的偏移量將使用頁錶轉換為記憶體地址。
在大多數段沒有關聯頁表的系統中,段中第一個位置的地址是主記憶體中的地址;在這些系統中,不進行分頁。在 Intel 80386 及更高版本中,該地址可以是主記憶體中的地址(如果停用分頁),也可以是分頁的“線性”地址空間中的地址(如果啟用分頁)。
記憶體管理單元 (MMU) 負責將段和該段內的偏移量轉換為記憶體地址,並執行檢查以確保可以進行轉換,並且對該段和偏移量的引用是允許的。
這種用法不應與早期 x86 處理器(如 Intel 8086 和 Intel 8088)使用的記憶體段混淆,因為它們沒有提供任何保護(任何程式都可以不受限制地訪問任何段,並且一個段僅包含一個起始位置和一個固定的 64 KiB 長度);Intel 80286 及更高版本的分段提供了保護。它保護主記憶體的檔案。