版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們

[科普中國(guó)]-段表

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識(shí)科普陣地
收藏

簡(jiǎn)介

如果說(shuō)推動(dòng)存儲(chǔ)管理方式從固定分區(qū)到動(dòng)態(tài)分區(qū)分配,進(jìn)而又發(fā)展到分頁(yè)存儲(chǔ)管理方式的主要?jiǎng)恿Γ翘岣邇?nèi)存利用率,那么,引入分段存儲(chǔ)管理方式的目的,則主要是為了滿足用戶(程序員)在編程和使用上多方面的要求。在分段存儲(chǔ)管理方式中,作業(yè)的地址空間被劃分為若干個(gè)段,每個(gè)段定義了一組邏輯信息。例如,有主程序段 MAIN、子程序段 X、數(shù)據(jù)段 D 及棧段 S 等。每個(gè)段都有自己的名字。為了實(shí)現(xiàn)簡(jiǎn)單起見(jiàn),通常可用一個(gè)段號(hào)來(lái)代替段名,每個(gè)段都從 0開始編址,并采用一段連續(xù)的地址空間。段的長(zhǎng)度由相應(yīng)的邏輯信息組的長(zhǎng)度決定,因而各段長(zhǎng)度不等。整個(gè)作業(yè)的地址空間由于是分成多個(gè)段,因而是二維的,亦即,其邏輯地址由段號(hào)(段名)和段內(nèi)地址所組成。

段表引入主要在內(nèi)存中找到每個(gè)邏輯段所對(duì)應(yīng)的位置,每個(gè)段在段表都有一個(gè)表項(xiàng),記錄了該段在內(nèi)存中的起始地址(又稱為 “基址” )和段的長(zhǎng)度。起始地址是指邏輯地址映射到內(nèi)存起始地址,段長(zhǎng)是指段的長(zhǎng)度,可以檢查地址是否越界。

分段存儲(chǔ)管理概述分段存儲(chǔ)管理的基本原理是:按程序的邏輯結(jié)構(gòu),以段為單位劃分,各個(gè)段的長(zhǎng)度因程序而異。為了說(shuō)明邏輯段的各種屬性,系統(tǒng)為每一個(gè)段建立一個(gè)段表(駐留在內(nèi)存),記錄段的若干信息,如段號(hào)、段起點(diǎn)、段長(zhǎng)度和段裝入情況等。CPU通過(guò)訪問(wèn)段表,判斷該段是否已調(diào)入主存,并完成邏輯地址與物理地址之間的轉(zhuǎn)換。

邏輯地址由段號(hào)S和段內(nèi)地址W組成,段號(hào)S相當(dāng)于邏輯段的段名,它表示該邏輯段的起始地址。在進(jìn)行地址轉(zhuǎn)換時(shí),操作系統(tǒng)用S檢索段表,段表中記錄的信息1表明該段已調(diào)入主存,b是S段裝入主存的起始地址,因此該邏輯地址對(duì)應(yīng)的物理地址為b+W。

在分段存儲(chǔ)管理方式中,由于段的分界與程序的自然分界相對(duì)應(yīng),所以具有邏輯獨(dú)立性,易于程序的編譯、管理、修改和保護(hù),也便于多道程序共享。但是,因?yàn)槎蔚拈L(zhǎng)度參差不齊,起點(diǎn)和終點(diǎn)不定,給主存空間分配帶來(lái)了麻煩,容易在段間留下不能利用的“零頭”,造成浪費(fèi)。

分段存儲(chǔ)管理方式的引入引入分段存儲(chǔ)管理方式,主要是為了滿足用戶和程序員的下述一系列需要:

1) 方便編程

通常,用戶把自己的作業(yè)按照邏輯關(guān)系劃分為若干個(gè)段,每個(gè)段都是從 0 開始編址,并有自己的名字和長(zhǎng)度。因此,希望要訪問(wèn)的邏輯地址是由段名(段號(hào))和段內(nèi)偏移量(段內(nèi)地址)決定的。例如,下述的兩條指令便是使用段名和段內(nèi)地址:

LOAD 1,[A] |〈D〉 ;

STORE 1,[B] |〈C〉 ;

其中,前一條指令的含義是將分段 A 中 D 單元內(nèi)的值讀入寄存器 1;后一條指令的含義是將寄存器 1 的內(nèi)容存入 B 分段的 C 單元中。

2) 信息共享在實(shí)現(xiàn)對(duì)程序和數(shù)據(jù)的共享時(shí),是以信息的邏輯單位為基礎(chǔ)的。比如,共享某個(gè)例程和函數(shù)。分頁(yè)系統(tǒng)中的“頁(yè)”只是存放信息的物理單位(塊),并無(wú)完整的意義,不便于實(shí)現(xiàn)共享;然而段卻是信息的邏輯單位。由此可知,為了實(shí)現(xiàn)段的共享,希望存儲(chǔ)管理能與用戶程序分段的組織方式相適應(yīng)。

3) 信息保護(hù)

信息保護(hù)同樣是對(duì)信息的邏輯單位進(jìn)行保護(hù),因此,分段管理方式能更有效和方便地實(shí)現(xiàn)信息保護(hù)功能。

4) 動(dòng)態(tài)增長(zhǎng)

在實(shí)際應(yīng)用中,往往有些段,特別是數(shù)據(jù)段,在使用過(guò)程中會(huì)不斷地增長(zhǎng),而事先又無(wú)法確切地知道數(shù)據(jù)段會(huì)增長(zhǎng)到多大。前述的其它幾種存儲(chǔ)管理方式,都難以應(yīng)付這種動(dòng)態(tài)增長(zhǎng)的情況,而分段存儲(chǔ)管理方式卻能較好地解決這一問(wèn)題。

5) 動(dòng)態(tài)鏈接

動(dòng)態(tài)鏈接是指在作業(yè)運(yùn)行之前,并不把幾個(gè)目標(biāo)程序段鏈接起來(lái)。要運(yùn)行時(shí),先將主程序所對(duì)應(yīng)的目標(biāo)程序裝入內(nèi)存并啟動(dòng)運(yùn)行, 當(dāng)運(yùn)行過(guò)程中又需要調(diào)用某段時(shí), 才將該段(目標(biāo)程序)調(diào)入內(nèi)存并進(jìn)行鏈接??梢?jiàn),動(dòng)態(tài)鏈接也要求以段作為管理的單位。1

地址變換機(jī)構(gòu)為了實(shí)現(xiàn)從進(jìn)程的邏輯地址物理地址的變換功能,在系統(tǒng)中設(shè)置了段表寄存器,用于存放段表始址和段表長(zhǎng)度 TL。在進(jìn)行地址變換時(shí),系統(tǒng)將邏輯地址中的段號(hào)與段表長(zhǎng)度TL 進(jìn)行比較。若 S>TL,表示段號(hào)太大,是訪問(wèn)越界,于是產(chǎn)生越界中斷信號(hào);若未越界,則根據(jù)段表的始址和該段的段號(hào),計(jì)算出該段對(duì)應(yīng)段表項(xiàng)的位置,從中讀出該段在內(nèi)存的起始地址,然后,再檢查段內(nèi)地址 d 是否超過(guò)該段的段長(zhǎng) SL。若超過(guò),即 d>SL,同樣發(fā)出越界中斷信號(hào);若未越界,則將該段的基址 d 與段內(nèi)地址相加,即可得到要訪問(wèn)的內(nèi)存物理地址。

像分頁(yè)系統(tǒng)一樣,當(dāng)段表放在內(nèi)存中時(shí),每要訪問(wèn)一個(gè)數(shù)據(jù),都須訪問(wèn)兩次內(nèi)存,從而極大地降低了計(jì)算機(jī)的速率。解決的方法也和分頁(yè)系統(tǒng)類似,再增設(shè)一個(gè)聯(lián)想存儲(chǔ)器,用于保存最近常用的段表項(xiàng)。由于一般情況是段比頁(yè)大,因而段表項(xiàng)的數(shù)目比頁(yè)表項(xiàng)的數(shù)目少,其所需的聯(lián)想存儲(chǔ)器也相對(duì)較小,便可以顯著地減少存取數(shù)據(jù)的時(shí)間,比起沒(méi)有地址變換的常規(guī)存儲(chǔ)器的存取速度來(lái)僅慢約 10%~15%。