1. 程式人生 > >【作業系統】記憶體管理-基本分段管理方式

【作業系統】記憶體管理-基本分段管理方式

引入分段儲存管理方式的目的:

主要是為了滿足使用者(程式設計師)在程式設計和使用上多方面的要求。

在分段儲存管理方式中,作業的地址空間被劃分為若干個段,每個段定義了一組邏輯資訊

例如,有主程式段MAIN、子程式段X、資料段D及棧段S等(如下段表圖)。每個段都有自己的名字。為了實現簡單起見,通常可用一個段號來代替段名,每個段都從0開始編址,並採用一段連續的地址空間。段的長度由相應的邏輯資訊組的長度決定,因而各段長度不等。整個作業的地址空間由於是分成多個段,因而是二維的,亦即,其邏輯地址由段號(段名)和段內地址所組成。


段表

在前面所介紹的動態分割槽分配方式中,系統為整個程序分配一個連續的記憶體空間。而在分段式儲存管理系統中,則是為每個分段分配一個連續的分割槽,而程序中的各個段可以離散地移入記憶體中不同的分割槽中。為利用段表實現地址對映使程式能正常執行,亦即,能從實體記憶體中找出每個邏輯段所對應的位置,應像分頁系統那樣,在系統中為每個程序建立一張段對映表,簡稱“段表”

。每個段在表中佔有一個表項,其中記錄了該段在記憶體中的起始地址(又稱為“基址”)和段的長度,如下圖所示。段表可以存放在一組暫存器中,這樣有利於提高地址轉換速度,但更常見的是將段表放在記憶體中。

地址變換機構


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



像分頁系統一樣,當段表放在記憶體中時,每要訪問一個數據,都須訪問兩次記憶體,從而極大地降低了計算機的速率。解決的方法也和分頁系統類似,再增設一個聯想儲存器用於儲存最近常用的段表項。由於一般情況是段比頁大,因而段表項的數目比頁表項的數目少,其所需的聯想儲存器也相對較小,便可以顯著地減少存取資料的時間,比起沒有地址變換的常規儲存器的存取速度來僅慢約10%~15%。

本文由Cout_Sev 蒐集整理並修改

自《計算機作業系統(第三版)》(西安電子科技大學出版社),

轉載註明出處。

謝謝!