操做系統原理以內存管理(第四章第一部分)

內存管理的⽬標:實現內存分配和回收,提升內存空間的利用率和內存的訪問速度算法

1、存儲器的層次結構

寄存器:在CPU內部有一組CPU寄存器,寄存器是cpu直接訪問和處理的數據,是一個臨時放數據的空間。緩存

高速緩衝區:通常CPU都會從內存取數據到寄存器,而後進行處理,但因爲內存的處理速度遠遠低於CPU,致使CPU在處理指令時每每花費不少時間在等待內存作準備工做,因而在寄存器和主內存間添加了CPU緩存,CPU緩存比較小,但訪問速度比主內存快得多,若是CPU老是操做主內存中的同一址地的數據,很容易影響CPU執行速度,此時CPU緩存就能夠把從內存提取的數據暫時保存起來,若是寄存器要取內存中同一位置的數據,直接從緩存中提取,無需直接從主內存取安全

緩存命中率:寄存器並非每次數據均可以從緩存中取得數據,假如寄存器要獲取的不是同一個內存地址中的數據,那寄存器就必須直接繞過緩存從內存中取數據。因此並非每次都能從緩存中取到數據,這種現象叫作緩存的命中率。命中就直接取緩存中的數據,不然從內存中取;可見緩存命中率的高低也會影響CPU執行性能。函數

交互流程:當一個CPU須要訪問主存時,會先讀取一部分主存數據到CPU緩存(固然若是CPU緩存中存在須要的數據就會直接從緩存獲取),進而在讀取CPU緩存到寄存器,當CPU須要寫數據到主存時,一樣會先刷新寄存器中的數據到CPU緩存,而後再把數據刷新到主內存中。性能

數據存儲的局部性原理:spa

 局部性:在⼀段較短期內,程序的執⾏僅限於某個部分,相應地它所訪問的存儲空間也侷限於某個區域操作系統

分類:blog

  • 時間局部性:某條指令⼀旦執⾏,不久 後該指令可能再次執⾏
  • 空間局部性:⼀旦程序訪問了某個單元,不久 後附近的存儲單元也將被訪問

2、 程序的連接和裝入

⾼級語⾔程序  -》   編譯、連接 -》   可執⾏程序進程

程序的連接:將編譯後的⽬標模塊裝配成⼀個可執⾏程序內存

  • 靜態連接  程序運⾏前完成連接操做(程序運⾏前,⽤連接程序將⽬標模塊連接成⼀個完整的裝⼊模塊。)       優:運⾏速度快
    • 連接程序的任務    一、對邏輯地址進⾏修改          二、變換外部調⽤符號
  • 動態連接  程序執⾏時進⾏連接操做(可將某些⽬標模塊的連接推遲到這些模塊中的函數被調⽤執⾏時才進⾏)      優:節省了空間

程序的裝⼊

 

 

 

  • 絕對裝⼊⽅式:編譯時產⽣物理地址的⽬標代碼
  •  可重定位裝⼊⽅式 (靜態重定位):編譯時地址是邏輯地址,裝⼊時 經過重定位轉換爲物理地址 ( 重定位:程序裝⼊時對⽬標程序中的指令和數據地址的修改過程叫重定位
  • 動態運⾏時裝⼊⽅式(動態重定位):程序執時經過重定位轉換爲物理地址

 物理地址=邏輯地址+程序在內存中的起始地址

 

3、 連續分配存儲管理方式

連續分配方式:爲一個用戶程序分配一個連續的內存空間。

連續分配方式進一步分爲:單一連續分配、固定分區分配、動態分區分配以及動態重定位分區分配。

一、單一連續分配:任什麼時候刻主存儲器最多隻有⼀個做業

二、固定分區分配:每一個分區⼤⼩固定不變(各個分區大小能夠相同也能夠不一樣),每一個分區能夠且僅能夠裝⼊⼀個做業

 

 

 固定分區說明表 :由固定分區說明表能夠查看哪一個分區空閒,哪一個分區被佔用

 

 

 三、動態分區分配:

 

 

  空閒分區表: 由空閒分區表可知 哪一個分區已被佔,哪一個分區是空閒。(分區編號、分區大小、起始地址)

  空閒分區鏈:

 

 

 

3.一、動態分區分配內存算法:

  一、⾸次適應算法:空閒分區鏈以地址遞增的順序連接, 從鏈⾸開始查找 ,直⾄找到第⼀個滿⾜要求的空閒分區, 從該分區中劃出⼀塊內存給進程 ,剩下的仍留在空閒鏈中。

 

 

 外部碎⽚:分配後留在空閒鏈上的。首次適應算法會產生該碎片。

 內部碎⽚:因爲空閒的區域比申請的大一點點,系統就直接把多餘的這一點也分配給你。

 

  二、循環⾸次適應算法:從上次找到的空閒分區的下⼀個空閒分區開始查找。 優勢:空閒區分佈均勻

 

  三、 最佳適應算法:空閒分區鏈以分區⼤⼩遞增的順序連接,從鏈⾸開始查找, 直⾄找到第⼀個與進程請求的空間⼤⼩ 最接近的空閒分區。

 

 3.二、動態分區回收內存的流程

1)釋放⼀塊連續的內存區域    2)若是被釋放的區域與其餘空閒區相鄰,則合併空閒區      3)修改空閒分區鏈

 

 

*************************************************************************************

 

 

 

**********************************************************************************************

 

 

*****************************************************************************************

 系統區用於駐留操做系統,用戶區用於分配給用戶進程使用

爲了防止工做用戶程序對操做系統的破壞,保證系統的安全、可靠,在操做系統中應該考慮設置存儲器保護機制。在單用戶、單任務操做系統中較經常使用的方法是設置一個基址寄存器和一個界限寄存器。

界限寄存器:存放裝入用戶區程序的地址範圍

基址寄存器:存放程序在物理內存中最小地址的是基址寄存器

相關文章
相關標籤/搜索