1. 程式人生 > 其它 >段式儲存管理模擬實驗

段式儲存管理模擬實驗

1. 實驗內容:
    段式管理(segmentation),是指把一個程式分成若干個段(segment)進行儲存,每個段都是一個邏輯實體(logical entity),程式設計師需要知道並使用它。它的產生是與程式的模組化直接有關的。段式管理是通過段表進行的,它包括段號或段名、段起點、裝入位、段的長度等。此外還需要主存佔用區域表、主存可用區域表。
2. 實驗要點:
    瞭解段式儲存的概念及實現原理。
    通過模擬實驗深入體會段式儲存段內地址到實體地址的轉換關係。

3.實驗過程:

1)段式儲存實現原理

一、段式虛存空間

    段式管理管理把一個程序的虛擬地址空間設計成二維結構,即短號s與段內相對地址w。與頁式管理時不一樣的是,頁式管理中,被劃分的頁號按順序編號遞增排列,屬一維空間,而段式管理中的段號與段號之間無順序關係。另外,段的劃分也不像頁的劃分那樣具有相同的頁長,段的長度的不固定的。每個段定義一組邏輯上完整的程式或資料。

    每個段是一個首地址為零、連續的一維線性空間。根據需要,段長課動態增長。對段式虛地址空間的訪問包括兩個部分:段名和段內地址。其中的段名經編譯程式和連結程式編譯連結後轉換成機器內部可以識別的段號和段內單元號。

 

二、段式儲存管理的記憶體分配與釋放

    段式管理中以段為單位分配記憶體,每段分配一個連續的記憶體區。由於各段長度不等,所以這些儲存區的大小不一。而且,同一程序所包含的各段之間不要求連續。

    段式管理的記憶體分配與釋放在作業或程序的執行過程中動態進行。動態分配過程是這樣進行的,首先,段式管理為程序或作業分配部分記憶體,以作為該程序的工作區和放置即將執行的程式段。隨著程序的執行,程序根據需要隨時申請調入新段和釋放老段。程序對記憶體區的申請和釋放可分為兩種情況:一種是當程序要求調入某一段時,記憶體中有足夠的空閒區滿足該段的記憶體要求另一種是記憶體中沒有足夠的空閒區滿足該段的記憶體要求。

    除了初始分配之外,段的動態分配是在CPU所要訪問的指令和資料不在記憶體時產生缺段中斷的情況下發生的。

因此,段的淘汰或置換演算法實際上是缺段中斷處理過程的一部分。

 

三、段式儲存管理的地址變換

(1)段表

    和頁式管理方案類似,段式管理程式在進行初始記憶體分配之前,首先根據使用者要求的記憶體大小為一個作業或程序建立一個段表。段式管理也是通過段表來進行記憶體管理。

(2)動態地址變換

    一般在記憶體中給出一塊固定的區域放置段表。當某程序開始執行時,管理程式首先把該程序的段表始址放入段表地址暫存器。通過訪問段表暫存器,管理程式得到該程序的段表始址從而可開始訪問段表。然後,由虛地址中的段號s為索引,查段表。若該段在記憶體,則判斷其存取控制方式是否有錯。如果存取控制方式正確,則從段表相應表目中查出該段在記憶體的起始地址,並將其和段內相對地址w相加,從而得到實際記憶體地址。如果該段不在記憶體,則產生缺段中斷將CPU控制權交給記憶體分配程式。記憶體分配程式首先檢查空閒區鏈,以找到足夠長度的空閒區來裝入所需要的段。如果記憶體中的可用空閒區總數小於所要求的段長時,則檢查段表中訪問位,以淘汰那些訪問概率低的段並將需要段調入。

   與頁式管理時相同,段式管理時的地址變換過程也必須經過二次以上的記憶體訪問。首先訪問段表以計算得到待訪問指令或資料的實體地址。然後才是對實體地址進行取資料或存資料操作。為了提高訪問速度,頁式地址變換時使用的高速聯想暫存器的方法也可以用在段式地址變換中。如果在聯想暫存器中找到了所需要的段,則可以大大加快地址變換速度。

 

四、段的共享與保護

(1) 段的共享

    在多道環境下,常常有許多子程式和應用程式是被多個使用者所使用的。如果每個使用者程序或作業都在記憶體保留它們共享程式和資料的副本,那就會極大地浪費記憶體空間。最好的辦法是記憶體中只保留一個副本,供多個使用者使用,稱為共享。一段程式為多個程序共享時:

    ①要求在執行過程中,該段程式的指令和資料不能被修改。

    ②在段表中設立相應的共享位來判別該段是否正被某個程序呼叫。顯然 一個正在被某個程序使用或即將被某個程序使用的共享段是不應該調出記憶體的。

(2)  段的保護

    與頁式管理時相同,段式管理的保護主要有兩種:地址越界保護法和存取方式控制保護法。

2)相關函式實現

流程圖:

函式實現: