在單道編程環境下,整個內存裏面只有兩個程序:一個是用戶程序和操做系統程序。因爲只有一個用戶程序,而操做系統所佔用的內存空間是恆定的,咱們能夠將用戶程序老是加載到一個內存地址上。即用戶永遠從同一個地方開始執行。在這種管理方式下,操做系統永遠跳轉到同一個地方來啓動用戶程序。這樣用戶程序裏面的地址均可以事先計算出全部的物理地址。這種在運行前就將物理地址計算好的方式叫作靜態地址翻譯。編程
爲了弄清楚是否達到的內存管理的目的,須要從下面幾個方面考慮:小程序
爲了克服單道編程的缺點,所以發明了多道編程。隨着多道編程數的增長,cpu和內存的利用效率也隨着增長。固然,這種增長有個限度,超過這個限度,則由於多道程序之間的資源竟爭反而形成系統效率的下降。spa
雖然多道編程能夠極大地改善cpu和內存的效率,改善用戶的響應時間,可是天下並無免費的午飯,這種效率和響應時間的改善是須要付出代價的。操作系統
這種代價是什麼呢?固然是操做系統的複雜性。由於多道編程的狀況下,沒法將程序加載到固定內存地址上,也就是說沒法使用靜態地址翻譯。這樣咱們就必須在程序加載完畢後才能計算物理地址,也就是程序在運行時進行地址翻譯。這種翻譯叫作動態地址翻譯。翻譯
用戶發出的虛擬地址MUU(地址翻譯器)翻譯成物理地址。隊列
多道編程下的內存管理策略有兩種:進程
最下面的分區爲操做系統佔用,其它的分區由分戶程序使用。這些分區大小能夠同樣,也能夠不同。考慮到程序大小的實際狀況,分區的大小一般也各不相同。當須要加載程序時,選擇一個當前閒置且容量夠大的分區進行加載。內存
這種模式下,當一個新的程序想要運行時,必須排在一個共同的隊列裏等待。當有空閒分區時,才能進行加載。因爲程序大小和分區大小不必定匹配,有可能造成一個小程序佔用一個大分區的狀況。若是在前面加載小程序時考慮這一點,能夠將小程序加載到小分區,就不會出現這樣的狀況(或者說至少下降這種狀況發生的機率)。這樣,咱們就想到也許可能採用多個隊列,即給每一個分區一個隊列。程序按照大小排在相應的隊列裏,以下圖所示:資源
這樣不一樣的程序有不一樣的對,就像在社會中不一樣的社會階層有着不一樣的待遇同樣,不一樣條件家庭男孩配同等條件家庭的女兒(門當戶對)。固然這種方式也有它自身的缺點,就是若是有空閒分區,但等待的程序不在該分區的等待隊列上,就將形成有空間不能運行程序的尷尬處境。編譯器