操作系統之內存管理1

1.

2.內存管理需要達到的目的?

  1)地址保護:多道程序之間互不干擾,一個進程不能隨便訪問另外一個進程的地址空間。

  2)地址獨立:程序發出的地址與具體機器的物理主存地址是獨立的。

3.爲什麼提出了虛擬內存?

 在計算機中,一個程序要運行,必須加載到物理主存中,但是物理主存的容量是非常有限的,因此我們要把一個程序全部加載到主存,我們的每一個程序大小就要限制。另外,即使我們編寫的每一個程序的大小都小於物理主存的容量,但主存能夠存放的程序數量也是有限的。這將大大限制多道編程的發展,所以我們發明了虛擬內存的概念!因爲有了虛擬內存,我們編寫程序的大小不在受主存容量的限制。

4. 

 


5.內存管理的第一個要面對的問題就是操作系統程序本身在內存中存放的位置,或者說我們如何將內存空間在操作系統和用戶程序之間進行分配?




6.多道編程的情況下,無法將程序總是加載到固定的內存地址上,也就是無法使用靜態地址翻譯,是在程序運行時進行地址翻譯,這種翻譯稱爲動態地址翻譯。

 

7.多道編程下的內存管理策略有兩種:固定分區和非固定分區。

8.固定分區的多道編程內存管理:將內存分爲固定的幾個區域,每個區域的大小固定,而這些分區的大小可以一樣,也可以不一樣,當程序加載時,選擇一個當前未使用的最合適的固定分區加載。如下圖:

這種模式下,一個新的程序想要加載,必須要在隊列裏等待推進,等到它有機會加載時,還要看有沒有合適的分區適合它,我們不可避免的會讓一個小程序佔有了一個大分區,後面的大程序而不能立刻加載。所以我們想出了下面的固定分區模式,

給每一個分區一個隊列,程序按大小排在相應的隊列裏。其實這也有缺點,就是有空閒的分區,但等待的程序不在該分區的隊列中,資源就被白白浪費。

9.由於程序加載到內存的地址不是固定的,那麼我們如何來進行地址翻譯?

   物理地址=虛擬地址+程序所在的區域的起始地址。程序所在的區域的起始地址又稱爲程序基址。

   在多道程序編程時,爲了實現程序的內存保護,只要我們訪問的地址滿足以下條件即爲合法訪問:程序所在區域的起始地址<=有效地址<=程序所在區域的起始地址+程序長度,我們只要設置兩個端值:基值和極限,可以用寄存器來存放,分別稱爲基值寄存器和極限寄存器。基值和極限是很重要的兩個參數,只有內核能夠改變它們,如果切換程序,只要保存基值寄存器和極限寄存器的值按照新程序的情況重新設置即可。

10.因爲虛擬內存的出現,一個程序可以一般放在磁盤上,一半放在內存中。從物理內存上說,一個程序發出的訪問地址有可能在內存,有可能在磁盤。  

11.固定分區的內存管理的缺點:程序大小和分區大小的匹配不容易讓人滿意;特殊情況,有程序比最大分區還要大,怎麼解決;程序在運行時,內存需要增加怎麼處理。所以我們想到了有非固定分區的內存管理。非固定分區的內存管理的思想是,除了劃分給操作系統的空間外,其餘的內存空間作爲一個整體存在。

12.上圖的劃分存在的問題是:程序在執行後需要更多的空間怎麼解決?所以實際應用中採取如11_12下的劃分,

13.分配增長空間需要考慮的問題,程序的空間增長通常有兩個來源:數據和棧。最簡單的方式是數據和棧分別在自己的空間裏往一個方向增長,優點是獨立性強,缺點是利用率可能低。還有一種辦法,就是數據和棧往相反方向增長。

14.爲什麼會有交換的出現?

  操作系統很難知道到底一個程序要分配多少空間?很難知道一個程序要進行多少次嵌套調用?產生多少數據?所以當程序執行過程中真的發現空間不夠時我們怎麼辦?就是給程序換一個更大的空間,我們將其倒到磁盤上,然後在加載到一片更大的空間,這種管理方式稱爲交換。

15.如果一個程序很大,甚至超過了物理內存,還能運行嗎?

   利用重疊的管理方式是可以的。

16.雙基址

17.閒置空間的管理,兩種方法:位圖表示和鏈表表示。如果程序數量少,則鏈表比較好,因爲鏈表項數量少,同時,它具有一定的容錯能力。位圖表示的空間成本幾乎是固定的,不依賴與程序數量,但它沒有容錯能力,從時間成本上,鏈表表示法高於位圖表示法。

 

 

發佈了143 篇原創文章 · 獲贊 29 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章