複製鏈接
請複製以下鏈接發送給好友

段表

鎖定
在分段式存儲管理系統中,每個進程或程序都有一個或多個邏輯段,為使程序或稱進程能正常運行,亦即,能從物理內存中找出每個邏輯段所對應的位置,在系統中為每個進程建立一張段映射表,簡稱段表,段表記錄了進程中每一個段在內存中的起始地址(又稱為 “基址” )、段號和段的長度。
中文名
段表
外文名
Segment Table
學    科
計算機
目    的
內存中找出邏輯段所對應的位置
有關術語
分段、分段式存儲管理系統
領    域
存儲器管理

段表發展歷程

如果説推動存儲管理方式從固定分區到動態分區分配,進而又發展到分頁存儲管理方式的主要動力,是提高內存利用率,那麼,引入分段存儲管理方式的目的,則主要是為了滿足用户(程序員)在編程和使用上多方面的要求。在分段存儲管理方式中,作業的地址空間被劃分為若干個段,每個段定義了一組邏輯信息。例如,有主程序段 MAIN、子程序段 X、數據段 D 及棧段 S 等。每個段都有自己的名字。為了實現簡單起見,通常可用一個段號來代替段名,每個段都從 0開始編址,並採用一段連續的地址空間。段的長度由相應的邏輯信息組的長度決定,因而各段長度不等。整個作業的地址空間由於是分成多個段,因而是二維的,亦即,其邏輯地址由段號(段名)和段內地址所組成。
段表引入主要在內存中找到每個邏輯段所對應的位置,每個段在段表都有一個表項,記錄了該段在內存中的起始地址(又稱為 “基址” )和段的長度。起始地址是指邏輯地址映射到內存起始地址,段長是指段的長度,可以檢查地址是否越界。

段表分段存儲管理

分段存儲管理的基本原理是:按程序的邏輯結構,以段為單位劃分,各個段的長度因程序而異。為了説明邏輯段的各種屬性,系統為每一個段建立一個段表(駐留在內存),記錄段的若干信息,如段號、段起點、段長度和段裝入情況等。CPU通過訪問段表,判斷該段是否已調入主存,並完成邏輯地址與物理地址之間的轉換。
邏輯地址由段號S和段內地址W組成,段號S相當於邏輯段的段名,它表示該邏輯段的起始地址。在進行地址轉換時,操作系統用S檢索段表,段表中記錄的信息1表明該段已調入主存,b是S段裝入主存的起始地址,因此該邏輯地址對應的物理地址為b+W。
在分段存儲管理方式中,由於段的分界與程序的自然分界相對應,所以具有邏輯獨立性,易於程序的編譯、管理、修改和保護,也便於多道程序共享。但是,因為段的長度參差不齊,起點和終點不定,給主存空間分配帶來了麻煩,容易在段間留下不能利用的“零頭”,造成浪費。
分段存儲管理方式的引入
引入分段存儲管理方式,主要是為了滿足用户和程序員的下述一系列需要:
1) 方便編程
通常,用户把自己的作業按照邏輯關係劃分為若干個段,每個段都是從 0 開始編址,並有自己的名字和長度。因此,希望要訪問的邏輯地址是由段名(段號)和段內偏移量(段內地址)決定的。例如,下述的兩條指令便是使用段名和段內地址:
LOAD 1,[A] |〈D〉 ;
STORE 1,[B] |〈C〉 ;
其中,前一條指令的含義是將分段 A 中 D 單元內的值讀入寄存器 1;後一條指令的含義是將寄存器 1 的內容存入 B 分段的 C 單元中。
2) 信息共享在實現對程序和數據的共享時,是以信息的邏輯單位為基礎的。比如,共享某個例程和函數。分頁系統中的“頁”只是存放信息的物理單位(塊),並無完整的意義,不便於實現共享;然而段卻是信息的邏輯單位。由此可知,為了實現段的共享,希望存儲管理能與用户程序分段的組織方式相適應。
3) 信息保護
信息保護同樣是對信息的邏輯單位進行保護,因此,分段管理方式能更有效和方便地實現信息保護功能。
4) 動態增長
在實際應用中,往往有些段,特別是數據段,在使用過程中會不斷地增長,而事先又無法確切地知道數據段會增長到多大。前述的其它幾種存儲管理方式,都難以應付這種動態增長的情況,而分段存儲管理方式卻能較好地解決這一問題。
5) 動態鏈接
動態鏈接是指在作業運行之前,並不把幾個目標程序段鏈接起來。要運行時,先將主程序所對應的目標程序裝入內存並啓動運行, 當運行過程中又需要調用某段時, 才將該段(目標程序)調入內存並進行鏈接。可見,動態鏈接也要求以段作為管理的單位。 [1] 

段表地址變換機構

為了實現從進程的邏輯地址物理地址的變換功能,在系統中設置了段表寄存器,用於存放段表始址和段表長度 TL。在進行地址變換時,系統將邏輯地址中的段號與段表長度TL 進行比較。若 S>TL,表示段號太大,是訪問越界,於是產生越界中斷信號;若未越界,則根據段表的始址和該段的段號,計算出該段對應段表項的位置,從中讀出該段在內存的起始地址,然後,再檢查段內地址 d 是否超過該段的段長 SL。若超過,即 d>SL,同樣發出越界中斷信號;若未越界,則將該段的基址 d 與段內地址相加,即可得到要訪問的內存物理地址。
像分頁系統一樣,當段表放在內存中時,每要訪問一個數據,都須訪問兩次內存,從而極大地降低了計算機的速率。解決的方法也和分頁系統類似,再增設一個聯想存儲器,用於保存最近常用的段表項。由於一般情況是段比頁大,因而段表項的數目比頁表項的數目少,其所需的聯想存儲器也相對較小,便可以顯著地減少存取數據的時間,比起沒有地址變換的常規存儲器的存取速度來僅慢約 10%~15%。
參考資料
  • 1.    湯子瀛.計算機操作系統:西安電子科技大學出版社,2010