操做系統內存管理

1. 引言

 

2. 內存管理的環境

 

3. 內存管理的目標

 

4. 虛擬內存

 

5. 單道編程的內存管理

    5.1 靜態地址翻譯

          在單道編程環境下,整個內存裏面只有兩個程序:一個是用戶程序和操做系統程序。因爲只有一個用戶程序,而操做系統所佔用的內存空間是恆定的,咱們能夠將用戶程序老是加載到一個內存地址上。即用戶永遠從同一個地方開始執行。在這種管理方式下,操做系統永遠跳轉到同一個地方來啓動用戶程序。這樣用戶程序裏面的地址均可以事先計算出全部的物理地址。這種在運行前就將物理地址計算好的方式叫作靜態地址翻譯。編程

    5.2 內存管理的目的

        爲了弄清楚是否達到的內存管理的目的,須要從下面幾個方面考慮:小程序

  • 首先,地址是否獨立,即固定地址的內存管理達到地址獨立了嗎?衡量地址是否獨立的判斷標準就是看看用戶編寫程序時是否須要知道該程序將要運行的物理內存的知識,而用戶在編寫程序時所用的物理內存無須考慮具體的物理內存,即該管理模式下達到了的地址的獨立性。那它是如何達到的呢?辦法就是將用戶程序加載到同一物理地址上。經過靜態編譯便可完成虛擬地址到物理地址的映射,而這個映射翻譯工做能夠由編譯器或加載器來實現。
  • 其次,物理地址是否獲得保護,即要看進程是否訪問到了其它用戶進程的空間,或都別的用戶進程是否會訪問該進程的地址(進程地址是否容許多用戶進行訪問)?其實在單道編程的狀況下,確定是不會的。由於,整個系統裏面只有一個用戶程序。所以,固定地址的內存管理就是由於只運行了一個用戶程序而達到地址保護。

    5.3 固定地址內存管理優缺點

  •  優勢:固定地址的內存管理單元很是簡單,實際上並不須要任何內存管理單元。由於程序發出的地址已是物理地址,在執行過程當中無須進行任何地址翻譯,而這種狀況的直接結果就是程序運行速度快,由於越過了地址翻譯的過程。
  • 缺點:
    • 整個程序要加載內存中去。這樣會致使比物理內存大的程序沒法運行。
    • 只運行一個程序形成很大的浪費。若是一個程序很小,雖然所用的內存空間小,可是剩下的內存空間也沒法使用。
    • 沒法在不一樣的操做系統下運行,由於不一樣的操做系統所佔用的內存空間大小也不同,使得用戶程序的起始地址可能不同。這樣在一個系統環境編譯出來的程序極可能沒法在另外一個操做系統環境下執行。

6. 多道編程的內存管理

    爲了克服單道編程的缺點,所以發明了多道編程。隨着多道編程數的增長,cpu和內存的利用效率也隨着增長。固然,這種增長有個限度,超過這個限度,則由於多道程序之間的資源竟爭反而形成系統效率的下降。spa

    6.1 動態地址翻譯

        雖然多道編程能夠極大地改善cpu和內存的效率,改善用戶的響應時間,可是天下並無免費的午飯,這種效率和響應時間的改善是須要付出代價的。操作系統

        這種代價是什麼呢?固然是操做系統的複雜性。由於多道編程的狀況下,沒法將程序加載到固定內存地址上,也就是說沒法使用靜態地址翻譯。這樣咱們就必須在程序加載完畢後才能計算物理地址,也就是程序在運行時進行地址翻譯。這種翻譯叫作動態地址翻譯。翻譯

    6.2 動態地址翻譯流程

       

        用戶發出的虛擬地址MUU(地址翻譯器)翻譯成物理地址。隊列

    6.3 動態地址翻譯下的內存管理策略

        多道編程下的內存管理策略有兩種:進程

  • 固定分區:將內存分紅固定的幾個區域,每一個區域的大小固定,以下圖所示

        

        最下面的分區爲操做系統佔用,其它的分區由分戶程序使用。這些分區大小能夠同樣,也能夠不同。考慮到程序大小的實際狀況,分區的大小一般也各不相同。當須要加載程序時,選擇一個當前閒置且容量夠大的分區進行加載。內存

        這種模式下,當一個新的程序想要運行時,必須排在一個共同的隊列裏等待。當有空閒分區時,才能進行加載。因爲程序大小和分區大小不必定匹配,有可能造成一個小程序佔用一個大分區的狀況。若是在前面加載小程序時考慮這一點,能夠將小程序加載到小分區,就不會出現這樣的狀況(或者說至少下降這種狀況發生的機率)。這樣,咱們就想到也許可能採用多個隊列,即給每一個分區一個隊列。程序按照大小排在相應的隊列裏,以下圖所示:資源

    

            這樣不一樣的程序有不一樣的對,就像在社會中不一樣的社會階層有着不一樣的待遇同樣,不一樣條件家庭男孩配同等條件家庭的女兒(門當戶對)。固然這種方式也有它自身的缺點,就是若是有空閒分區,但等待的程序不在該分區的等待隊列上,就將形成有空間不能運行程序的尷尬處境。編譯器

 

     

  • 非固定分區
相關文章
相關標籤/搜索