OS-三、4存儲管理與虛擬存儲技術

OS-4 存儲管理程序員

本章介紹了操做系統對內存的管理方法 es6

本章所討論的是在內存也叫主存層面的存儲管理,以下圖。 算法

image_thumb

1、瞭解重要概念-地址重定位 編程

邏輯地址:邏輯地址是用戶編程所用的地址,老是從0單元開始編址。邏輯地址是在編譯之後造成的。邏輯地址是指可執行文件中的相對地址。將可執行代碼裝入內存時,必須經過地址轉換將邏輯地址轉換成物理地址,這個過程稱爲地址重定位 緩存

一、程序通過編譯後,每一個目標模塊都是從0號單元開始編址,稱爲該目標模塊的相對地址(或邏輯地址)。 數據結構

二、當連接程序將各個模塊連接成一個完整的可執行目標程序時,連接程序順序依次按各個模塊的相對地址構成統一的從0號單元開始編址的邏輯地址空間。 函數

重點!!!!!!!!!!! 操作系統

關於邏輯地址的理解,邏輯地址在計算機中不是實際存在的一個地址,而是一個程序段連接之後造成的邏輯地址空間,一個指令相對於0單元位置的偏移,CPU執行程序時首先會獲得該程序的首地址,剩下的指令都是順序執行,因此要取的指令地址都是經過邏輯地址相對於0單元的偏移,而後通過MMU(或其餘硬件結構)的計算,計算出物理地址,關於這個偏移 CPU內部有專門的計數器進行計數。 設計

三、用戶程序和程序員只需知道邏輯地址,而內存管理的具體機制則是徹底透明的,它們只有系統編程人員纔會涉及。 3d

四、不一樣進程能夠有相同的邏輯地址,由於這些相同的邏輯地址能夠映射到主存的不一樣位置。

五、物理地址空間是指內存中物理單元的集合,它是地址轉換的最終地址,進程在運行時執行指令和訪問數據都要經過物理地址從主存中存取。當裝入程序(Loader)將可執行代碼裝入內存時,必須經過地址轉換將邏輯地址轉換成物理地址,這個過程稱爲地址重定位

2、程序的連接

C語言(高級語言)源文件.c,目標文件.o和可執行文件:

源代碼編譯之後生成的叫目標代碼(機器代碼).O文件,但此時還不能運行,缺乏的第一個元素是一種叫作啓動代碼(Start-up code)的東西,此代碼至關於您的程序和操做系統之間的接口。

缺乏的第二個元素叫作庫函數,幾乎全部C程序都利用標準庫中所包含的例程(稱爲函數)。例如,前面的concrete.c使用了函數printf()。目標代碼文件不包含這一函數的指令。實際代碼存儲在另外一個稱爲「庫」的文件中,庫文件中包含許多函數的目標代碼。

動態連接是相對於靜態連接而言的。

所謂靜態連接是指把要調用的函數或者過程連接到可執行文件中,成爲可執行文件的一部分。換句話說,函數和過程的代碼就在程序的exe文件中,該文件包含了運行時所需的所有代碼。當多個程序都調用相同函數時,內存中就會存在這個函數的多個拷貝,這樣就浪費了寶貴的內存資源。而動態連接所調用的函數代碼並無被拷貝到應用程序的可執行文件中去,而是僅僅在其中加入了所調用函數的描述信息(每每是一些重定位信息)。僅當應用程序被裝入內存開始運行時,在Windows的管理下,纔在應用程序與相應的DLL之間創建連接關係。當要執行所調用DLL中的函數時,根據連接產生的重定位信息,Windows才轉去執行DLL中相應的函數代碼。通常狀況下,若是一個應用程序使用了動態連接庫,Win32系統保證內存中只有DLL的一份複製品

動態連接庫的兩種連接方法:

(1) 裝載時動態連接(Load-time Dynamic Linking):這種用法的前提是在編譯以前已經明確知道要調用DLL中的哪幾個函數,編譯時在目標文件中只保留必要的連接信息,而不含DLL函數的代碼;當程序執行時,調用函數的時候利用連接信息加載DLL函數代碼並在內存中將其連接入調用程序的執行空間中(所有函數加載進內存),其主要目的是便於代碼共享。(動態加載程序,處在加載階段,主要爲了共享代碼,共享代碼內存)

(2) 運行時動態連接(Run-time Dynamic Linking):這種方式是指在編譯以前並不知道將會調用哪些DLL函數,徹底是在運行過程當中根據須要決定應調用哪一個函數,將其加載到內存中(只加載調用的函數進內存),並標識內存地址,其餘程序也可使用該程序,並用LoadLibrary和GetProcAddress動態得到DLL函數的入口地址。(dll在內存中只存在一份,處在運行階段)

上述的區別主要在於階段不一樣,編譯器是否知道進程要調用的dll函數。動態加載在編譯時知道所調用的函數,而在運行態時則必須不知道。

關於三種連接方式的差異以下:

三者之間的關係就像是機槍,衝鋒槍和手槍


機槍在一開始就把全部子彈裝好,開槍的時候很快,但也很笨重。


衝鋒槍則是將子彈分彈夾存好,輕便了許多,可是會有一段裝填時間。


手槍就更加輕便了,可是彈夾容量更小,裝填的頻率又變高了。

使用運行時動態連接即便DLL不可用的話,進程也能繼續運行,而後進程能夠經過一個變動方法達到最終目的。例如,若是進程不能找到一個DLL,它能夠嘗試另一個或者向用戶提示錯誤。若是用戶能夠提供丟失的DLL的全路徑,進程就能夠不論是否在正常的搜索路徑中而使用該路徑信息。然而若是是載入時連接的話,系統就會終止。

image_thumb1

3、存儲管理方式

第一部分:分區存儲管理

1)單一連續分配

image_thumb4

 

 

2)固定分區

image_thumb3

image_thumb5

image_thumb6

image_thumb7

 

 

3)可變分區分配

image_thumb8

image_thumb9

image_thumb10

image_thumb11

須要檢查相鄰區域是否有空閒區,若是有空閒則須要合併。

 

4)可重定位分區

image_thumb12

image_thumb13

 

 

 

第二部分:頁式、段式、段頁式存儲管理

1)分頁管理技術

image_thumb14

image_thumb15

image_thumb16

image_thumb17

分頁管理技術是將程序分頁,而後將內存分爲和程序頁面大小同樣的頁框,將程序以頁爲單位裝入內存。

 

2)分段管理技術

image_thumb18

image_thumb19

image_thumb20

image_thumb34

 

 

 

3)段頁式管理

image_thumb22

段頁式的缺點是:

在通常使用段頁式存儲管理方式的計算機系統中,都在內存中闢出一塊固定的區域存放進程的段表和頁表。所以,在段頁式管理系統中,要對內存中指令或數據進行一次存取的話,至少須要訪問三次以上的內存:

第一次是由段表地址寄存器得段表始址後訪問段表,由此取出對應段的頁表在內存中的地址。

第二次則是訪問頁表獲得所要訪問的物理地址。

第三次才能訪問真正須要訪問的物理單元。

顯然,這將使CPU的執行指令速度大大下降。

 

 

 

 

下面介紹一下爲了加快系統速度引入的一個數據結構:快表(TLB)也叫作 聯想寄存器。其本質是速度極快的 cache。

image_thumb23

image_thumb24

image_thumb36

 

 

 

此時分頁存儲管理的CPU的地址轉換過程變爲,先查快表(並行),若是查到相關頁表項(HIT),則直接獲得物理塊號,

若是沒有查到,則須要查頁表,並將相關頁表項寫入TLB。

 

4、頁表項的設計

image_thumb38

對於每個頁表項,須要設置相關位來表示該頁的狀態。

 

 

5、內存管理單元MMU

MMU是Memory Management Unit的縮寫,中文名是內存管理單元,有時稱做分頁內存管理單元(英語:paged memory management unit,縮寫爲PMMU)。它是一種負責處理中央處理器(CPU)的內存訪問請求的計算機硬件。它的功能包括虛擬地址物理地址的轉換(即虛擬內存管理)、內存保護、中央處理器高速緩存的控制,在較爲簡單的計算機體系結構中,負責總線仲裁以及存儲體切換(bank switching,尤爲是在8位的系統上)。

image_thumb39

 

 

 

OS5-虛擬存儲技術

1、虛擬存儲技術的概念

image_thumb44

image_thumb45

虛擬頁式存儲管理:

image_thumb46

在該類管理方式中,可能會出現頁錯誤。

下面介紹存儲保護和頁錯誤的概念:

image_thumb48

image_thumb49

image_thumb50

image_thumb51

訪問地址越界越權都會產生頁錯誤,此時系統會產生中斷,根據操做系統相關處理程序進行處理;發生缺頁異常時,也會產生頁錯誤,此時會產生缺頁中斷,操做系統的缺頁中斷處理程序會將缺乏的頁面從虛擬內存調入內存,並根據頁框分配狀況進行分配(空閒頁框或置換)。

 

2、頁面置換

1)駐留集概念:系統分配給一個進程的頁框的集合就是駐留集。

      清除策略:爲了保證內存中有必定的空閒頁框,系統會按期收回一些進程中駐留集的頁框,具體收回哪些,取決於系統的清除策略。

image_thumb52

image_thumb53

若是但願一些頁面不被置換,能夠進行頁框鎖定。

image_thumb54

 

2)頁面置換算法:

一、 OPT算法:

image_thumb55

二、 FIFO算法

image_thumb56

三、 時鐘算法

image_thumb57

四、LRU算法:

image_thumb58

LRU能夠用棧實現(或時間戳)。

 

3、關於其餘存儲技術

一、交換技術

image_thumb59

image_thumb60

image_thumb61

 

二、內存映射文件

image_thumb62

image_thumb63

 

 

三、寫時複製

image_thumb64

 

本章內容重點:

image_thumb65

image_thumb66

相關文章
相關標籤/搜索