系統記憶體管理簡介 <! TOC "系統記憶體管理簡介" "常見的名詞解釋" "單塊記憶體管理法" "分區管理法" "頁式管理法" "幀與頁" "小結" <! /TOC 系統以 字 為單位,將記憶體劃分為一個個存儲單位,每個存儲單位都有一個地址。指向地址的指針以字的大小為單位移動。目前常見的字單位為32位( ...
系統記憶體管理簡介
系統以字為單位,將記憶體劃分為一個個存儲單位,每個存儲單位都有一個地址。指向地址的指針以字的大小為單位移動。目前常見的字單位為32位(4byte)或者64位(8byte)。
常見的名詞解釋
- 邏輯地址(logical address):僅對程式可見,從0開始計量
- 真實地址(physical addr):系統對記憶體的真實地址編號
- 地址聯編(addr binding):將邏輯地址映射到真實地址
就地址聯編這一塊,不同的記憶體管理方式聯編的方式也不同。邏輯與物理兩套地址的規劃,使得記憶體管理有極大的自由。程式編譯階段,使用地址就是邏輯地址,當機器碼loading進系統開始運行的時候,系統才開始地址聯編。這使得程式中地址表示是一致的,具體真實占用哪些地址,到地址聯編的決定。
單塊記憶體管理法
想象這樣一種理想狀況,系統中除了操作系統(OS)只有一個APP。那麼除了OS占用部分記憶體,剩下的都是APP進程的記憶體。
我們使用兩套地址管理,邏輯地址和物理地址。物理地址面向程式,從0開始計數,物理地址描述記憶體的實際地址規劃。
圖1中表示的是邏輯地址+基本地址=物理地址。基本地址A加上邏輯地址L,得到真實地址。
分區管理法
單塊記憶體管理中只允許單個APP運行,實際上記憶體可以容納多個APP同時運行。這時候的做法是將記憶體分為多個區,除了OS外,每一個APP占用一個連續、獨立的分區。
分區方式有:
- 固定分區:引導OS初期就固定分好區間,以後不再變
- 動態分區:根據需求動態分配區間,區間可以在記憶體中移動
無論單塊記憶體,還是分區記憶體,同樣遵循邏輯地址和真實地址兩套管理法。每個分區都有自己的一套邏輯地址,用於內部交流,但最終和系統交互的時候,都需要採用物理地址。即聯編方式,分區管理中地址信息存儲在寄存器中。基址寄存器存儲分區當前分區的起始位置,界限寄存器存儲分區的長度。當前進程的請求地址不可以超過分區長度。
那麼分區的大小如何決定,這取決於匹配進程的方式。總共有三種方式:
- 最先匹配:驗證當前記憶體往下走,第一個符合進程需求的大小分配分區
- 最佳匹配:尋找可用容器中最小的分區
- 最差匹配:尋找最大的符合進城需求的分區
前兩者適用於固定分區,便於節省記憶體。
最後一個符合動態分區,動態分配要求儘量滿足當前需求,後期再進行調整。連續的小空分區,可以合併成一個大的空分區。並且作業也可以在記憶體中移動,以空出更大的空間,成為壓縮。
最後,無論是固定分區還是動態分區,整個進程必須同時載入記憶體中,一個分區必須能夠容納整個APP。這也就可以看出頁式記憶體管理的優越性,他引出了虛擬記憶體的的概念。
頁式管理法
頁式管理同樣遵循邏輯地址和物理地址的概念,但是這裡啟用兩個新的概念,幀面向物理地址,頁面向進程地址。
頁式管理中,將進程(Process)以頁為單位分割,同時將記憶體劃分為一個個幀。頁和幀可以大小不同,為了方便起見,這裡將其視為相同。
總結下來,幀描述記憶體,頁描述進程。記憶體載入進程的方式是通過幀載入頁。
程式面向的是頁地址,這時地址聯編需要找的是幀,這就需要一本字典,即PMT(page map table)。每一個進程都需要維護一張PMT,表中記錄每一個頁對應的幀。
這樣的規劃管理上增加了複雜度,但是好處也是巨大的。
無論是單塊記憶體管理還是分區管理,都需要整塊連續的記憶體用來存儲進程,相比頁式管理記憶體的利用率則相差太多。分區管理中,如果找不到能夠容納整個進程的連續地址,則無法載入進程。頁式管理中,記憶體和頁都是一塊塊的,他們分散在各處,無需專門開闢一塊連續的空間,記憶體可以見縫插針為頁分配可用的頁。
同時,分頁記憶體管理的方式也引入了請求分頁和虛擬記憶體的概念。請求分頁意思是,由於CPU同一時刻只需要進程的部分數據,因此就不必將整個進程都載入進記憶體。當某些頁面被需要的時候,系統先訪問記憶體,如果該頁面不存在,則訪問二級存儲將信息載入進記憶體,與此同時,新的頁面加入使得原有的頁面退出該幀的使用,該過程稱為頁面交換。
請求分頁的引入使得有時候,記憶體好像無限大一樣,記憶體載入的進程的總大小遠遠大於記憶體大小,這種現象稱為虛擬記憶體。
頁面交互大大提高了記憶體的利用率,但是當頁面頻繁交換的時候,交換過程占用過多的時間,使得進程顯得不穩定,表現為使用不斷地卡頓,這個現象稱為系統顛簸。
幀與頁
幀就是大小固定的記憶體塊,比如為1024。頁就是進程地址,表示為一個坐標<頁位置,偏移量>。系統中(邏輯地址/1024)的商為頁面位置,餘數為偏移量。因此,頁坐標不得大於幀大小。根據頁坐標和PMT就可找到物理地址(幀地址)。這就形成了從邏輯地址到物理地址的閉環。(僅憑記憶回顧,存疑)
小結
最後總結一下頁式管理法。一個APP載入系統,在系統表現為進程,一個或者多個。系統為每一個進程分配記憶體,將Process分割成頁,將記憶體分割成幀。之後,根據情況為頁分配幀,同時給每一個進程維護一張PMT用於地址聯編。