從硬件發展看內存管理 -----內存管理(一)

一、從硬件發展角度看內存管理

I、遠古時代的內存管理

操作系統中大部分內存管理都是圍繞硬件展開的,計算機硬件的變化影響着軟件的實現。下面從單道批處理系統和多道批處理系統看內存管理的演變。

單道編程的內存管理。所謂單道,就是整個系統只有一個用戶進程和一個操作系統。這種模型下,用戶程序總是加載到同一個內存地址上運行,所以內存管理很簡單。實際上根本就不用內存管理單元,程序使用的地址就是物理地址。不難發現,這種模型有很大的缺點:

1、無法運行比實際物理內存大的程序

2、系統只能運行一個程序

多道編程的內存管理。多道意味着可以併發運行多個進程,在內存管理出現了固定分區和動態分區兩種技術。

固定分區:主存被劃分成許多靜態分區,進程可以裝入大於或者等於自身大小的分區。實現比較簡單。這個也有缺點:

1、程序大小必須和分區的大小必須匹配

2、活動進程的數目比較固定

3、地址空間無法增長

動態分區:當進程A運行時,先從一塊大內存中切割一塊與進程A大小一樣的內存給進程A使用。當進程B準備運行時,我們可以從剩下的空閒內存中切割一塊與進程B大小相等的內存塊給進程B使用,以此類推。動態分區解決了固定分區的不足。但是隨着時間的推移,這種方式會出現很多內存空洞,也就是內存碎片。

上述兩種內存分配都存在倆種缺陷:

1、進程地址空間保護問題。所有用戶進程可以訪問全部的物理內存,這使得進程A可以隨意改變進程B的數據。

2、內存使用效率低。內存所需不足時,需要選擇一個進程進行整體換出,這種機制導致有大量數據換進換出。

II、分段機制

一開始人們就想到用分段機制。其實就是增加一個虛擬內存。它解決的是進程地址空間保護問題。現在每個進程運行時看到的地址是虛擬地址,需要通過CPU來映射物理地址,進程A和進程B被映射到不同的物理地址空間上。進程訪問未映射的虛擬地址空間或者訪問了不屬於該進程的尋地址空間,CPU會捕捉這個越界訪問異常,並且拒絕該次訪問。

分段很明顯是一次重大的改進,但是在內存緊張時,分段機制換出磁盤的依舊是整個進程。後來人們根據局部性原理,提出了分頁機制。

III、分頁機制

分段機制地址映射粒度太大。以至於整個內存分配效率比較低。分頁機制就是把這種分配機制的單位繼續細分分成固定大小的也。進程的虛擬地址空間也按照分頁機制來劃分,這樣常用的代碼段和數據段就常駐於內存中,而那些不常用的頁可以放到磁盤中去,從而節省物理內存。

1、一級頁表

對於32位系統中,規定頁面大小爲4KB。這樣一來就可以將進程的虛擬地址離散的映射到物理地址上,但在每個進程頁表中的頁表項數可達1MB之多。顯然非常浪費內存。

 2、二級頁表

一級頁表顯現出來的就是頁表太大。那是由於頁表的編排是連續的,如果能將這1MB的拆分成一小個頁面,然後管理。二級頁表實現的就是這樣的功能:用一個頁表來存放另外1024個頁表,每個頁面還是4KB,現在每個一級頁表都是4MB。現在只需要在內存中存放外部頁表,只有當前需要的部分頁表項調入內存,其他的頁表項仍然存放在磁盤上。

 III、總結

頁表機制的出現解決前面出現的三個問題:進程地址空間保護、內存使用率低、程序運行地址重定位。但是這些頁表是如何被分配和回收的,當出現內存碎片又是如何處置的,這些會在分析夥伴系統提到。

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