為了實現從進程的邏輯地址到物理地址的變換功能,在系統中設定了段表暫存器,用於存放段表始址和段表長度TL。在進行地址變換時,系統將邏輯地址中的段號與段表長度TL 進行比較。若 S>TL,表示段號太大,是訪問越界,於是產生越界中斷信號;若未越界,則根據段表的始址和該段的段號,計算出該段對應段表項的位置,從中讀出該段在記憶體的起始地址,然後,再檢查段內地址 d 是否超過該段的段長 SL。若超過,即 d>SL,同樣發出越界中斷信號;若未越界,則將該段的基址 d 與段內地址相加,即可得到要訪問的記憶體物理地址,這個過程可以稱做查段表。每個段在表中占有一個表項, 其中記錄了該段在記憶體中的起始地址(又稱為 “基址” )和段的長度。
分段
在分段存儲管理方式中,作業的地址空間被劃分為若干個段,每個段定義了一組邏輯信息。例如,有主程式段 MAIN、子程式段 X、數據段 D 及棧段 S 等,如圖所示。每個段都有自己的名字。為了實現簡單起見,通常可用一個段號來代替段名,每個段都從 0開始編址,並採用一段連續的地址空間。段的長度由相應的邏輯信息組的長度決定,因而各段長度不等。整個作業的地址空間由於是分成多個段,因而是二維的,亦即,其邏輯地址由段號(段名)和段內地址所組成。分段地址中的地址具有如下結構:分段
在該地址結構中,允許一個作業最長有 64 K 個段,每個段的最大長度為 64 KB。分段方式已得到許多編譯程式的支持,編譯程式能自動地根據源程式的情況而產生若干個段。例如,Pascal 編譯程式可以為全局變數、用於存儲相應參數及返回地址的過程調用棧、每個過程或函式的代碼部分、每個過程或函式的局部變數等等,分別建立各自的段。類似地,Fortran 編譯程式可以為公共塊(Common block)建立單獨的段,也可以為數組分配一個單獨的段。裝入程式將裝入所有這些段,並為每個段賦予一個段號。