段表地址

段表地址

在分段存儲管理方式中,作業的地址空間被劃分為若干個段。用段號表示程式各段的編號,各段的長度不等。為使程式能正常運行,亦即,能從物理記憶體中找出每個邏輯段所對應的位置,在系統中為每個進程建立一張段映射表,簡稱段表。段表地址是指段表中相應段號在記憶體中地址,通過段表地址可以找到段號對應的項,從而找到一個段在記憶體中起點。

基本介紹

  • 中文名:段表地址
  • 外文名:segment table address
  • 學科:計算機
  • 定義:段表中相應段號在記憶體中地址
  • 作用:找到一個段在記憶體中起點
  • 領域:存儲管理
簡介,分段,分段存儲管理方式的引入,方便編程,信息共享,信息保護,動態增長,動態連結,

簡介

存儲管理中,為了將虛擬地址變換成記憶體實地址,需要一個段表。每個程式段在段表中都占有一登記項,內容有:段號、段起點、段長、裝入位等。段號指虛擬段號,裝入位為1,表示該段已經裝入主存,段起點指出該段調進主存時存放的實地址,段長指出該段的長度。段表有存儲管理軟體設定。段表起始地址放在段表基址暫存器。CPU訪問主存時,將虛擬地址中虛段號與段表起始地址相拼接,得到段表中相應項的地址,簡稱段表地址,即段表中相應段號在記憶體中地址,通過段表地址可以找到段號對應的項,從該項內容中取出該段在記憶體中的起點與虛地址中的段內地址相加,最後得到要訪問的信息的實地址。

分段

在分段存儲管理方式中,作業的地址空間被劃分為若干個段,每個段定義了一組邏輯信息。例如,有主程式段 MAIN、子程式段 X、數據段 D 及棧段 S 等,如圖 所示。每個段都有自己的名字。為了實現簡單起見,通常可用一個段號來代替段名,每個段都從 0開始編址,並採用一段連續的地址空間。段的長度由相應的邏輯信息組的長度決定,因而各段長度不等。整個作業的地址空間由於是分成多個段,因而是二維的,亦即,其邏輯地址由段號(段名)和段內地址所組成。
段表地址
在該地址結構中,允許一個作業最長有 64 K 個段,每個段的最大長度為 64 KB。分段方式已得到許多編譯程式的支持,編譯程式能自動地根據源程式的情況而產生若干個段。例如,Pascal 編譯程式可以為全局變數、用於存儲相應參數及返回地址的過程調用棧、每個過程或函式的代碼部分、每個過程或函式的局部變數等等,分別建立各自的段。類似地,Fortran 編譯程式可以為公共塊(Common block)建立單獨的段,也可以為數組分配一個單獨的段。裝入程式將裝入所有這些段,並為每個段賦予一個段號。

分段存儲管理方式的引入

引入分段存儲管理方式,主要是為了滿足用戶和程式設計師的下述一系列需要:

方便編程

通常,用戶把自己的作業按照邏輯關係劃分為若干個段,每個段都是從 0 開始編址,並有自己的名字和長度。因此,希望要訪問的邏輯地址是由段名(段號)和段內偏移量(段內地址)決定的。例如,下述的兩條指令便是使用段名和段內地址:
LOAD 1,[A] |〈D〉 ;
STORE 1,[B] |〈C〉 ;
其中,前一條指令的含義是將分段 A 中 D 單元內的值讀入暫存器 1;後一條指令的含義是將暫存器 1 的內容存入 B 分段的 C 單元中。

信息共享

在實現對程式和數據的共享時,是以信息的邏輯單位為基礎的。比如,共享某個例程和函式。分頁系統中的“頁”只是存放信息的物理單位(塊),並無完整的意義,不便於實現共享;然而段卻是信息的邏輯單位。由此可知,為了實現段的共享,希望存儲管理能與用戶程式分段的組織方式相適應。

信息保護

信息保護同樣是對信息的邏輯單位進行保護,因此,分段管理方式能更有效和方便地實現信息保護功能。

動態增長

在實際套用中,往往有些段,特別是數據段,在使用過程中會不斷地增長,而事先又無法確切地知道數據段會增長到多大。前述的其它幾種存儲管理方式,都難以應付這種動態增長的情況,而分段存儲管理方式卻能較好地解決這一問題。

動態連結

動態連結是指在作業運行之前,並不把幾個目標程式段連結起來。要運行時,先將主程式所對應的目標程式裝入記憶體並啟動運行, 當運行過程中又需要調用某段時, 才將該段(目標程式)調入記憶體並進行連結。可見,動態連結也要求以段作為管理的單位。

相關詞條

熱門詞條

聯絡我們