雖是轉載,但是也加入自己的整理:
來至於:http://www.blogjava.net/wxqxs/archive/2009/04/25/277291.html
第三章 儲存管理
儲存管理是作業系統的重要組成部分,它負責電腦系統記憶體空間的管理。其目的是充分利用記憶體空間,為多道程式並發執行提供儲存基礎,並儘可能地方便使用者使用。
3.1 儲存管理的目的
採用多道程式設計技術,就要在記憶體中同時存放多道程式,這就要求儲存管理解決以下四個重要問題,以達到儘可能方便使用者使用和充分利用記憶體以提高記憶體利用率的目的。
一、記憶體空間的分配和回收-----分配方式(5種)
二、記憶體空間的共用與儲存保護
三、地址映射(地址重定位)---應該結合分配方式來看更直接
四、記憶體擴充----虛擬儲存管理
3.2 單使用者連續儲存管理
這是一種最簡單的儲存管理方式,系統是將整個記憶體除了給作業系統劃分出一塊空間外,其餘部分的空間都分配給一個作業使用。個人機可採用此種管理方法,它不適宜多道程式設計系統。
可以採用靜態重定位方式完成地址映射;處理器在執行指令時,要檢查其絕對位址是否屬於規定範圍內的地址,如果屬於,則按此地址訪問,否則將產生“地址越界”中斷。
某些系統還採用對換技術(Swapping)讓多個進程輪流進入記憶體,這種技術多用於分時系統,隨著進程調度,將記憶體中的進程暫時移到外存,而把外存中某一進程換進記憶體。
3.3 固定分區儲存管理
其基本思想是將記憶體劃分成若干固定大小的分區,每個分區中最多隻能裝入一個作業。當作業申請記憶體時,系統按一定的演算法為其選擇一個適當的分區,並裝入記憶體運行。由於分區大小是事先固定的,因而可容納作業的大小受到限制,而且當使用者作業的地址空間小於分區的儲存空間時,造成儲存空間浪費。
一、空間的分配與回收
系統設定一張“分區分配表”來描述各分區的使用方式,登記的內容應包括:分區號、起始地址、長度和佔用標誌。其中佔用標誌為“ 0 ”時,表示目前該分區空閑;否則登記佔用作業名(或作業號)。有了“分區分配表”,空間分配與回收工作是比較簡單的。
二、地址轉換和儲存保護
固定分區管理可以採用靜態重定位方式進行地址映射。
為了實現儲存保護,處理器設定了一對“下限寄存器”和“上限寄存器”。當一個已經被裝入主儲存空間的作業能夠得到處理器運行時,進程調度應記錄當前運行作業所在的分區號,且把該分區的下限地址和上限地址分別送入下限寄存器和上限寄存器中。處理器執行該作業的指令時必須核對其要訪問的絕對位址是否越界。
三、多作業隊列的固定分區管理
為避免小作業被分配到大的分區中造成空間的浪費,可採用多作業隊列的方法。即系統按分區數設定多個作業隊列,將作業按其大小排到不同的隊列中,一個隊列對應某一個分區,以提高記憶體利用率。
3.4 可變分區
可變分區儲存管理不是預先將記憶體劃分分區,而是在作業裝入記憶體時建立分區,使分區的大小正好與作業要求的儲存空間相等。這種處理方式使記憶體配置有較大的靈活性,也提高了記憶體利用率。但是隨著對記憶體不斷地分配、釋放操作會引起儲存片段的產生。
一、空間的分配與回收
採用可變分區儲存管理,系統中的分區個數與分區的大小都在不斷地變化,系統利用“空閑區表”來管理記憶體中的空閑分區,其中登記空閑區的起始地址、長度和狀態。當有作業要進入記憶體時,在“空閑區表”中尋找狀態為“未分配”且長度大於或等於作業的空閑分區分配給作業,並做適當調整;當一個作業運行完成時,應將該作業佔用的空間作為空白閑區歸還給系統。
可以採用首先適應演算法、最佳(優)適應演算法和最壞適應演算法三種分配策略之一進行記憶體配置。
二、地址轉換和儲存保護
可變分區儲存管理一般採用動態重定位的方式,為實現地址重定位和儲存保護,系統設定相應的硬體:基址 / 限長寄存器(或上界 / 下界寄存器)、加法器、比較線路等。
基底位址暫存器用來存放程式在記憶體的起始地址,限長寄存器用來存放程式的長度。處理機在執行時,用程式中的相對位址加上基底位址暫存器中的基地址,形成一個絕對位址,並將相對位址與限長寄存器進行計算比較,檢查是否發生地址越界。
三、儲存片段與程式的移動
所謂片段是指記憶體中出現的一些零散的小空閑地區。由於片段都很小,無法再利用。如果記憶體中片段很多,將會造成嚴重的儲存資源浪費。解決片段的方法是移動所有的佔用地區,使所有的空閑區合并成一片連續地區,這一技術稱為移動技術(緊湊技術)。移動技術除了可解決片段問題還使記憶體中的作業進行擴充。顯然,移動帶來系統開銷加大,並且當一個作業如果正與外設進行 I/O 時,該作業是無法移動的。
3.5 頁式儲存管理
總結:頁式:邏輯地址空間+實體記憶體空間(系統預先劃分)---都分為大小一樣的頁面
段式:將邏輯地址空間分成不同的段(例如資料區段,主程式段等)+實體記憶體空間(系統不進行預先劃分,而是以段為單位進行記憶體配置,為每一個邏輯段分配一個連續的記憶體區(物理段)。)
優點:前者是減少外片段,後者是減少內片段(因為它是根據段來動態分配--採用動態分區方式)
缺點:它們都必須把進程全部裝載
共同點:對資料操作都得對記憶體訪問兩次:一次是訪問頁表或段表(因為它們都是在記憶體裡面的),分別為得到記憶體的頁碼號和段的起始地址。二次很好理解:就是進行讀寫操作(肯定是要訪問記憶體的)
對一維和二維的理解(其實還沒是沒有真正的理解,期待你的分享,扔磚):從程式員的角度來看的
分頁式管理:程式員在標識一個地址時,只需利用一個標識符(????)
分段式管理:程式員在標識一個地址時,需要段名+段內地址。
3.5.1 基本原理
1 .等分記憶體
頁式儲存管理將記憶體空間劃分成等長的若干地區,每個地區的大小一般取 2 的整數冪,稱為一個物理頁面有時稱為塊。記憶體的所有物理頁面從 0 開始編號,稱作物理頁號。
2 .邏輯地址
系統將程式的邏輯空間按照同樣大小也劃分成若干頁面,稱為邏輯頁面也稱為頁。程式的各個邏輯頁面從 0 開始依次編號,稱作邏輯頁號或相對頁號。每個頁面內從 0 開始編址,稱為頁內地址。程式中的邏輯地址由兩部分組成:
3 .記憶體配置
系統可用一張“位示圖”來登記記憶體中各塊的分配情況,儲存分配時以頁面(塊)為單位,並按程式的頁數多少進行分配。相鄰的頁面在記憶體中不一定相鄰,即分配給程式的記憶體塊之間不一定連續。
對程式地址空間的分頁是系統自動進行的,即對使用者是透明的。由於頁面尺寸為 2 的整數次冪,故相對位址中的高位部分即為頁號,低位部分為頁內地址。
3.5.2 實現原理
1 .頁表
系統為每個進程建立一張頁表,用於記錄進程邏輯頁面與記憶體物理頁面之間的對應關係。地址空間有多少頁,該頁表裡就登記多少行,且按邏輯頁的順序排列,形如:
邏輯頁號
|
主存塊號
|
0 |
B0 |
1 |
B1 |
2 |
B2 |
3 |
B3 |
2 .地址映射過程
頁式儲存管理採用動態重定位,即在程式的執行過程中完成地址轉換。處理器每執行一條指令,就將指令中的邏輯地址( p,d )取來從中得到邏輯頁號 (p) ,硬體機構按此頁號查頁表,得到記憶體的塊號 B’ ,便形成絕對位址( B’,d ) , 處理器即按此地址訪問主存。
3 .頁面的共用與保護
當多個不同進程中需要有相同頁面資訊時,可以在主存中只保留一個副本,只要讓這些進程各自的有關項中指向記憶體同一塊號即可。同時在頁表中設定相應的“存取許可權”,對不同進程的存取權限進行各種必要的限制。
3.6 段式儲存管理
3 . 6 . 1 基本原理
1.邏輯地址空間
程式按邏輯上有完整意義的段來劃分,稱為邏輯段。例如主程式、子程式、資料等都可各成一段。將一個程式的所有邏輯段從0開始編號,稱為段號。每一個邏輯段都是從0開始編址,稱為段內地址。
2.邏輯地址
程式中的邏輯地址由段號和段內地址(s,d)兩部分組成。
3.記憶體配置
系統不進行預先劃分,而是以段為單位進行記憶體配置,為每一個邏輯段分配一個連續的記憶體區(物理段)。邏輯上連續的段在記憶體不一定連續存放。
3.6.2實現方法
1.段表
系統為每個進程建立一張段表,用於記錄進程的邏輯段與記憶體物理段之間的對應關係,至少應包括邏輯段號、物理段首地址和該段長度三項內容。
2.建立空閑區表
系統中設立一張記憶體空閑區表,記錄記憶體中空閑地區情況,用於段的分配和回收記憶體。
3.地址映射過程
段式儲存管理採用動態重定位,處理器每執行一條指令,就將指令中的邏輯地址( s,d )取來從中得到邏輯段號 (s) ,硬體機構按此段號查段表,得到該段在記憶體的首地址 S’ , 該段在記憶體的首地址 S’ 加上段內地址 d ,便形成絕對位址( S’+d ),處理器即按此地址訪問主存。
3 . 6 . 3 段頁式儲存管理
頁式儲存管理的特徵是等分記憶體,解決了片段問題;段式儲存管理的特徵是邏輯分段,便於實現共用。為了保持頁式和段式上的優點,結合兩種儲存管理方案,形成了段頁式儲存管理。
段頁式儲存管理的基本思想是:把記憶體劃分為大小相等的頁面;將程式按其邏輯關係劃分為若干段;再按照頁面的大小,把每一段劃分成若干頁面。程式的邏輯地址由三部分組成,形式如下:
記憶體是以頁為基本單位分配給每個程式的,在邏輯上相鄰的頁面記憶體不一定相鄰。
系統為每個進程建立一張段表,為進程的每一段各建立一張頁表。地址轉換過程,要經過查段表、頁表後才能得到最終的物理地址。
3.7 虛擬儲存管理
前面介紹的各種儲存管理方案有一點是共同的,即當一個參與並發執行的進程運行時,其整個程式都在記憶體,存在的缺點是:若一個進程的尺寸比記憶體可用空間大,則該進程無法運行;而實際上由於局部特性,一個進程在啟動並執行任一階段只使用所佔儲存空間的一部分,因此未用到的記憶體地區就被浪費。
虛擬儲存管理是當進程要求運行時,不是將它的全部資訊裝入記憶體,而是將其一部分先裝入記憶體,另一部分暫時留在外存(通常是磁碟)。進程在運行過程中,如果要訪問的資訊不在記憶體時,發中斷由作業系統將它們調入記憶體,以保證進程的正常運行。
虛擬儲存管理分為頁式虛擬儲存管理、段式虛擬儲存管理和段頁式虛擬儲存管理。
3.7.1頁式虛擬儲存管理
一、基本原理
基本思想是,在進程開始執行之前,不是裝入全部頁面,而是只裝入一個或幾個頁面,然後根據進程執行的需要,動態地裝入其他頁面。
頁表中將增加若干項:標誌位(又稱駐留位),指示該頁是否裝入記憶體;外存地址給出該頁在外存(磁碟)的地址。
地址映射時當從頁表標誌位得知此頁不在記憶體時,發缺頁中斷。此時暫停進程執行,CPU轉去執行缺頁中斷處理常式,負責把所需的頁從外存調入到記憶體某空閑塊中,並把物理頁號填入頁表、更改標誌位,然後再返回繼續執行被中斷的進程。
二、頁面淘汰
當記憶體已無空閑塊而又發生缺頁中斷時,必須在記憶體中選擇一頁面將其淘汰並寫回到外存,然後再換進新的頁面,這一過程稱為頁面調度,選擇被淘汰頁面的演算法稱作頁面調度演算法。如果頁面淘汰演算法不合理,可能產生剛被淘汰出去的一頁,又要訪問它,因而又要把它調入,如此反覆,使系統的頁面調入調出工作非常頻繁從而降低系統效率,這種現象稱為“顛簸”或“抖動”。
常用的頁面調度演算法有:先進先出調度演算法(FIFO)、最近最少使用調度演算法(LRU)和最近最不經常使用調度演算法(LFU)。
注意,對於單使用者連續、固定分區、可變分區儲存管理是不能實現虛擬儲存管理的,因為它們的共同點是,在對作業進行記憶體配置時是將整個作業全部、連續地放入記憶體。
********************************************************************************************************