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

段表起始地址

鎖定
在分段式存儲管理系統中,則是為每個分段分配一個連續的分區,而進程中的各個段可以離散地移入內存中不同的分區中。為使程序能正常運行,亦即,能從物理內存中找出每個邏輯段所對應的位置,應像分頁系統那樣,在系統中為每個進程建立一張段映射表,簡稱段表 。段表起始地址是指段表在內存中起始地址,是一個進程段表不同於其他進程的標誌。
中文名
段表起始地址
外文名
segment table origin table
學    科
計算機
定    義
段表在內存中起始地址
作    用
定位、區別標誌
領    域
存儲管理

段表起始地址簡介

分段存儲管理方式,作業的地址空間被劃分為若干個段。用段號表示程序各段的編號,各段的長度不等。各段以虛擬地址編址,虛擬地址由段號和段內地址組成。程序運行時,以段為單位從外存調進內存,一段佔據一個連續的主存空間。當CPU訪問時,仍需要進行虛實地址的變換。 [1] 
為了將虛擬地址變換成內存實地址,需要一個段表。每個程序段在段表中都佔有一登記項,內容有:段號、段起點、段長、裝入位等。段號指虛擬段號,裝入位為1,表示該段已經裝入主存,段起點指出該段調進主存時存放的實地址,段長指出該段的長度。段表有存儲管理軟件設置。段表起始地址放在段表基址寄存器。CPU訪問主存時,將虛擬地址中虛段號與段表起始地址相拼接,得到段表中相應項的地址,從該項內容中取出該段在內存中的起點與虛地址中的段內地址相加,最後得到要訪問的信息的實地址。段表起始地址即段表在內存中起始地址,主要作用有:查找段表中不同段表基址,也是區分不同進程主要標誌。

段表起始地址有關術語

物理地址 (physical address): 放在尋址總線上的地址。放在尋址總線上,如果是讀,電路根據這個地址每位的值就將相應地址的物理內存中的數據放到數據總線中傳輸。如果是寫,電路根據這個地址每位的值就在相應地址的物理內存中放入數據總線上的內容。物理內存是以字節(8位)為單位編址的。
虛擬地址 (virtual address): CPU啓動保護模式後,程序運行在虛擬地址空間中。注意,並不是所有的“程序”都是運行在虛擬地址中。CPU在啓動的時候是運行在實模式的,Bootloader以及內核在初始化頁表之前並不使用虛擬地址,而是直接使用物理地址的。

段表起始地址地址變換機構

為了實現從進程的邏輯地址到物理地址的變換功能,在系統中設置了段表寄存器,用於存放段表始址和段表長度 TL。在進行地址變換時,系統將邏輯地址中的段號與段表長度TL 進行比較。若 S>TL,表示段號太大,是訪問越界,於是產生越界中斷信號;若未越界,則根據段表的始址和該段的段號,計算出該段對應段表項的位置,從中讀出該段在內存的起始地址,然後,再檢查段內地址 d 是否超過該段的段長 SL。若超過,即 d>SL,同樣發出越界中斷信號;若未越界,則將該段的基址 d 與段內地址相加,即可得到要訪問的內存物理地址。

段表起始地址分段存儲管理

段表起始地址分段

在分段存儲管理方式中,作業的地址空間被劃分為若干個段,每個段定義了一組邏輯信息。例如,有主程序段 MAIN、子程序段 X、數據段 D 及棧段 S 等。每個段都有自己的名字。為了實現簡單起見,通常可用一個段號來代替段名,每個段都從 0開始編址,並採用一段連續的地址空間。段的長度由相應的邏輯信息組的長度決定,因而各段長度不等。整個作業的地址空間由於是分成多個段,因而是二維的,亦即,其邏輯地址由段號(段名)和段內地址所組成。

段表起始地址原因

方便編程
通常,用户把自己的作業按照邏輯關係劃分為若干個段,每個段都是從 0 開始編址,並有自己的名字和長度。因此,希望要訪問的邏輯地址是由段名(段號)和段內偏移量(段內地址)決定的。例如,下述的兩條指令便是使用段名和段內地址:
LOAD 1,[A] |〈D〉 ;
STORE 1,[B] |〈C〉 ;
其中,前一條指令的含義是將分段 A 中 D 單元內的值讀入寄存器 1;後一條指令的含義是將寄存器 1 的內容存入 B 分段的 C 單元中。
信息共享
在實現對程序和數據的共享時,是以信息的邏輯單位為基礎的。比如,共享某個例程和函數。分頁系統中的“頁”只是存放信息的物理單位(塊),並無完整的意義,不便於實現共享;然而段卻是信息的邏輯單位。由此可知,為了實現段的共享,希望存儲管理能與用户程序分段的組織方式相適應。
信息保護
信息保護同樣是對信息的邏輯單位進行保護,因此,分段管理方式能更有效和方便地實現信息保護功能。
動態增長
在實際應用中,往往有些段,特別是數據段,在使用過程中會不斷地增長,而事先又無法確切地知道數據段會增長到多大。前述的其它幾種存儲管理方式,都難以應付這種動態增長的情況,而分段存儲管理方式卻能較好地解決這一問題。
動態鏈接
動態鏈接是指在作業運行之前,並不把幾個目標程序段鏈接起來。要運行時,先將主程序所對應的目標程序裝入內存並啓動運行, 當運行過程中又需要調用某段時, 才將該段(目標程序)調入內存並進行鏈接。可見,動態鏈接也要求以段作為管理的單位。 [2] 
參考資料
  • 1.    倪繼烈.微型計算機原理與接口技術:清華大學出版社,2006
  • 2.    湯小丹.計算機操作系統:西安電子科技大學出版社,2010