【操作系統】第四章:非連續內存分配(Part1:基於分頁-分段的物理/邏輯地址轉換)

OS.StudyLog.Ch4.Non-Continuous memory allocation.非連續內存分配

非連續內存的管理方式

引言:連續內存分配的缺點:
1.分配給一個程序的物理地址是連續的
2.內存利用率低
3.有內碎片、外碎片問題
且不論何種適配方式,都不能完全杜絕碎片問題
引入非連續內存分配方法
在這裏插入圖片描述
非連續內存分配方法:解決碎片問題,同時令運行的程序能夠有效地隔離和內存資源管理,還可以支持共享數據和代碼,類似共享庫。
潛在問題:管理開銷本身
如何建立虛擬地址和物理地址之間的轉化(軟件方案/硬件方案)
軟件方案:開銷非常大
硬件方案:開銷相對小,這裏主要介紹分段分頁機制

分段機制

在這裏插入圖片描述
不同段之間有不同的屬性,我們需要一個方法有效隔離這些不同的斷的話,則有助於我們更好地去管理地址空間。
在這裏插入圖片描述
從應用程序的編寫和運行來說, 他虛擬的邏輯地址空間是一個連續的地址空間。但是雖連續,通過分段後也可以有效的隔離開來。如圖所示,可以把不同的數據、庫、代碼段等相應的分離出來。放在某一個特定的地址用一個特定的管理權限管理起來。分離出來後,可以相互共享或訪問;也可以令一些數據相對隔離,部分只讀部分讀寫。有效地進行管理分配,有效地實現保護機制。
左邊是連續的虛擬地址,右邊是不連續的物理地址,那麼中間就需要一個映射機制來確定相互間的聯繫。
在這裏插入圖片描述我們把執行程序運行的邏輯地址空間看作一個連續的一維線性數組,通過映射關係,將不同的內存塊(數據、代碼、堆、棧等)分別映射到不同的內存的段中。映射之後,他們大小不同,位置不同。這之間的關係就是通過段管理機制實現的。這種機制也可以用軟件實現,但是開銷會非常大,所以我們儘可能想要用硬件支持。
這裏就需要怎麼通過硬件機制來支持分段的尋址。
在這裏插入圖片描述
在這裏插入圖片描述
一個一維的邏輯地址其實是不同的段組成的,這個段可以不連續。那麼首先,一維地址分成兩塊,一塊是段的尋址和段內的偏移尋址。s和addr放在一起,就形成了以段機制來管理的尋址方式。如果段號s和addr是分開的,那麼是段寄存器+地址寄存器實現方式,x86是典例。另一種是把段和段內偏移合在一起形成一個完整地址,沒有段寄存器來把段的編號單獨管理起來,這是單一地址管理方式。
在這裏插入圖片描述
從一維線性邏輯地址空間映射到不同的物理空間去,而這個物理空間是由不同的段組成的。
詳細過程:
程序通過CPU執行某條指令。CPU就需要去尋址(找數據、代碼在什麼地方),那麼OS會把這個邏輯地址分成兩塊(段號/段內偏移),通過段號希望找到所在物理內存的起始地址;段表會存着邏輯地址和物理地址之間的映射關係,又因爲每一個段的大小不同,所以段表也會存這些信息,也就說段表會放段的起始地址和段的長度限制這兩種信息。段表的索引就是段號,段號決定了在段表中的每一項的位置。有了這些信息,CPU就會通過段表找到對應的段在物理內存中的起始地址。然後CPU會去做一個比對,大小是否滿足限制,滿足則合法,否則將因非法訪問異常,OS將處理。
尋址之前,段表就由OS建立了。
在這裏插入圖片描述

分頁機制

分頁和分段類似,也有頁號,頁內偏移;區別在於,段的尺寸是可變的,而頁的大小是固定不變的。
劃分物理內存至固定大小的幀,大小是2的冪。邏輯的頁和物理的頁都是一樣的,物理的頁幀是8K那麼邏輯的頁幀也是8K。Frame(幀)代表的是物理頁,Page(頁)代表的是邏輯頁。OS需要建立的是邏輯頁地址和物理頁地址的映射關係。其中用到的有快表(TLB)和內存管理單元(MMU)。

頁幀Frame

在這裏插入圖片描述
頁幀是物理內存的組織和佈局方式。組成要素:頁幀號ff和偏移量oo。頁幀號佔了F位,也就說整個尋址空間內,有2F2^F的頁幀個數。幀內偏移佔了S位,每幀有2S2^S字節,表示每一頁的大小。(F+S=N【物理地址位數】)可以通過如下方式計算得出頁幀對應的物理地址。
物理地址:Addr.physical=2Sf+oAddr.physical=2^S*f+o
例題:
在這裏插入圖片描述

頁Page

一個程序的邏輯空間被劃分爲大小相等的頁。區別於頁幀Frame,頁號和幀號可能不同,但是頁內偏移和幀內偏移是相等的。
在這裏插入圖片描述
邏輯地址:Addr.logical=2Sp+oAddr.logical=2^S*p+o
這樣我們詳細看一下如何完成地址轉換。一個程序生成時,本身他的邏輯地址是一個連續的地址空間而且由大小相同的頁組成,但是邏輯空間和物理空間的整體大小可能不同,這個程序可能佔了很大的空間然而物理空間沒有這麼大,所以有可能出現幀號不等於頁號的情況。
在這裏插入圖片描述
在這裏插入圖片描述
程序運行,CPU(因執行指令或者訪問數據)尋址,地址是一個邏輯地址,這個地址分爲了p和o,然後將頁號p作爲索引index去查頁表,頁表存的是以頁號爲索引的對應項的幀號(frame number)。這個過程還需要頁表基址(邏輯地址從哪開始)。有了這兩個信息,就可以查到對應的幀號。我們可以通過頁號查到幀號,幀號再加上偏移量,就是物理地址。
頁表也是操作系統在操作系統初始化,在使能enable階段建立好的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章