1. 程式人生 > >【嵌入式】記憶體管理,虛擬儲存

【嵌入式】記憶體管理,虛擬儲存

記憶體管理介紹

   早期的計算機記憶體容量非常小,當時的PC主要使用DOS作業系統或者其它作業系統。早期的作業系統由於系統硬體的限制,無法支援記憶體管理,應用程式佔用的空間和程式規模都比較小。隨著計算機硬體效能不斷提高,程式的處理能力也不斷提高,應用程式佔用的儲存空間不斷膨脹。實際上,程式的膨脹速度遠遠超過了記憶體的增長速度。不斷增大的程式規模導致記憶體無法容納下所有的程式。

早期程式處理記憶體不夠使用的最直接的辦法就是把程式分塊。分塊的思想是把程式等分成若干個程式塊,塊的大小足夠裝入內容即可。

   當程式開始執行的時候,首先把第一個程式塊裝入記憶體。在程式執行過程中,由作業系統根據程式需要裝入後面的程式塊。程式分塊的思想是虛擬儲存器處理方法的前身。

虛擬儲存

虛擬儲存器的思想是允許程式佔用的空間超過記憶體的大小,把程式劃分為大小固定的頁,由作業系統根據程式執行的位置把正在執行的頁面調入記憶體,其他未使用的頁面則保留在磁碟上。如一個系統有16M位元組的記憶體需要執行32M位元組大小的程式,通過虛擬儲存技術,作業系統把程式中需要執行的程式段裝入記憶體,程式其他部分存放在磁碟上。當程式執行走出裝入記憶體的部分後,作業系統自動從磁碟載入需要的部分。

   虛擬儲存技術中,作業系統通過記憶體頁面管理記憶體空間,在一個作業系統中記憶體頁面的大小是固定的。程式被劃分成與記憶體頁面大小相同的若干塊,便於作業系統載入程式到記憶體。作業系統根據記憶體配置決定一次可以載入多少程式頁面到記憶體。在一個實際的系統中,虛擬儲存通常是由硬體(記憶體管理單元MMU)和作業系統配合完成的。

記憶體訪問順序

計算機可以訪問的地址是有限制的,通常稱做有效地址範圍。

地址範圍的大小與計算機匯流排寬度有直接關係,如32位匯流排可以訪問的地址範圍是0x0~0xFFFFFFFF(4G)空間。

程式可以訪問的地址空間與匯流排支援的地址相同,但是在實際系統中,地址空間所有的地址都是有效的。通常把程式能訪問的地址空間稱做虛擬地址空間。

在計算機系統上,受到記憶體空間大小的限制,實際的地址空間遠小於虛擬地址空間。可訪問的實體記憶體空間稱做實體地址空間。程式訪問的虛擬地址空間的地址需要轉換為實體地址空間的地址才能訪問。

在沒有使用虛擬儲存技術以前,程式訪問的空間就是實體地址空間,訪問地址無須轉換。使用虛擬儲存技術後,程式訪問虛擬地址空間的地址需要經過記憶體管理單元

的地址轉換機制變換後,得到對應的實體地址才能訪問,而轉換的過程對使用者來說是不可見的。

在進行虛擬地址和實際地址對映的時候,通過查記憶體表對映到不同的實體記憶體地址上。

沒有MMU的管理,作業系統對記憶體空間是沒有保護的,作業系統和應用程式訪問的都是真實的記憶體實體地址。

地址翻譯過程

使用虛擬儲存的計算機系統可以提供超過記憶體地址空間大小的虛擬記憶體空間。如在64K地址空間的計算機上可以提供1M位元組大小的虛擬地址空間。提供超過實際地址空間的虛擬空間後,計算機系統需要通過地址轉換才能保證程式正確執行。

實際上,使用虛擬儲存的計算機系統中,記憶體與外部儲存器的資料傳輸也是按照頁為單位進行的,從程式執行的角度看,程式可以訪問超過實際記憶體大小的虛擬地址空間,這是由程式執行的區域性性原理決定的。程式在執行的時候,在一段時間內總是限定範圍的程式段內執行。因此,在程式訪問某個虛擬記憶體空間的時候,可以通過記憶體管理單元把虛擬地址對映到實際的記憶體地址,這個過程稱做地址翻譯過程。

現代計算機體系結構中,地址翻譯過程是由記憶體管理單元完成的。記憶體管理單元向作業系統提供了配置介面,在系統啟動的時候,由作業系統向記憶體管理單元配置虛擬地址與實體地址之間的轉換關係。在程式訪問地址的時候由記憶體管理單元完成地址對映。一般來說,不同的處理器體系結構有不同的地址翻譯方法。

訪問許可權

現代的多使用者多程序作業系統,需要MMU才能每個使用者程序都擁有自己的獨立的地址空間的目標。使用MMU,OS劃分出一段地址區域,在這塊地址區域中,每個程序看到的內容都不一定一樣。

例如Microsoft Windows作業系統,地址4M~2G處劃分為使用者地址空間。程序A在地址0x400000映射了可執行檔案。程序B同樣在地址0x400000映射了可執行檔案。如果A程序讀地址0x400000讀到的是A的可執行檔案對映到RAM的內容,而程序B讀取地址0x400000時則讀取到的是B的可執行檔案對映到RAM的內容。這個時候就需要訪問許可權機制來處理不同程序訪問同一地址記憶體的問題。