內存管理的?標:實現內存分配和回收,提高內存空間的利用率和內存的訪問速度
一、存儲器的層次結構
寄存器:在CPU內部有一組CPU寄存器,寄存器是cpu直接訪問和處理的數據,是一個臨時放數據的空間。
高速緩沖區:一般CPU都會從內存取數據到寄存器,然后進行處理,但由于內存的處理速度遠遠低于CPU,導致CPU在處理指令時往往花費很多時間在等待內存做準備工作,于是在寄存器和主內存間添加了CPU緩存,CPU緩存比較小,但訪問速度比主內存快得多,如果CPU總是操作主內存中的同一址地的數據,很容易影響CPU執行速度,此時CPU緩存就可以把從內存提取的數據暫時保存起來,如果寄存器要取內存中同一位置的數據,直接從緩存中提取,無需直接從主內存取
緩存命中率:寄存器并不是每次數據都可以從緩存中取得數據,假如寄存器要獲取的不是同一個內存地址中的數據,那寄存器就必須直接繞過緩存從內存中取數據。所以并不是每次都能從緩存中取到數據,這種現象叫做緩存的命中率。命中就直接取緩存中的數據,否則從內存中取;可見緩存命中率的高低也會影響CPU執行性能。
交互流程:當一個CPU需要訪問主存時,會先讀取一部分主存數據到CPU緩存(當然如果CPU緩存中存在需要的數據就會直接從緩存獲取),進而在讀取CPU緩存到寄存器,當CPU需要寫數據到主存時,同樣會先刷新寄存器中的數據到CPU緩存,然后再把數據刷新到主內存中。
數據存儲的局部性原理:
?局部性:在?段較短時間內,程序的執?僅限于某個部分,相應地它所訪問的存儲空間也局限于某個區域
分類:
- 時間局部性:某條指令?旦執?,不久 后該指令可能再次執?
- 空間局部性:?旦程序訪問了某個單元,不久 后附近的存儲單元也將被訪問
二、 程序的鏈接和裝入
?級語?程序? -》? ?編譯、鏈接?-》? ?可執?程序
程序的鏈接:將編譯后的?標模塊裝配成?個可執?程序
- 靜態鏈接??程序運?前完成鏈接操作(程序運?前,?鏈接程序將?標模塊鏈接成?個完整的裝?模塊。)? ? ? ?優:運?速度快
- 鏈接程序的任務? ? 1、對邏輯地址進?修改?? ? ? ? ?2、變換外部調?符號
- 動態鏈接??程序執?時進?鏈接操作(可將某些?標模塊的鏈接推遲到這些模塊中的函數被調?執?時才進?)? ? ? 優:節省了空間
程序的裝?
?
?
?
- 絕對裝??式:編譯時產?物理地址的?標代碼
- ?可重定位裝??式 (靜態重定位):編譯時地址是邏輯地址,裝?時 通過重定位轉換為物理地址 (?重定位:程序裝?時對?標程序中的指令和數據地址的修改過程叫重定位)
- 動態運?時裝??式(動態重定位):程序執時通過重定位轉換為物理地址
?物理地址=邏輯地址+程序在內存中的起始地址
?
三、 連續分配存儲管理方式
連續分配方式:為一個用戶程序分配一個連續的內存空間。
連續分配方式進一步分為:單一連續分配、固定分區分配、動態分區分配以及動態重定位分區分配。
1、單一連續分配:任何時刻主存儲器最多只有?個作業
2、固定分區分配:每個分區??固定不變(各個分區大小可以相同也可以不同),每個分區可以且僅可以裝??個作業
?
?
?固定分區說明表 :由固定分區說明表可以查看哪個分區空閑,哪個分區被占用
?
?
?3、動態分區分配:
?
?
? 空閑分區表:?由空閑分區表可知 哪個分區已被占,哪個分區是空閑。(分區編號、分區大小、起始地址)
? 空閑分區鏈:
?
?
?
3.1、動態分區分配內存算法:
1、?次適應算法:空閑分區鏈以地址遞增的順序鏈接, 從鏈?開始查找 ,直?找到第?個滿?要求的空閑分區, 從該分區中劃出?塊內存給進程 ,剩下的仍留在空閑鏈中。
?
?
?外部碎?:分配后留在空閑鏈上的。首次適應算法會產生該碎片。
?內部碎?:由于空閑的區域比申請的大一點點,系統就直接把多余的這一點也分配給你。
?
2、循環?次適應算法:從上次找到的空閑分區的下?個空閑分區開始查找。?優點:空閑區分布均勻
?
3、?最佳適應算法:空閑分區鏈以分區??遞增的順序鏈接,從鏈?開始查找, 直?找到第?個與進程請求的空間?? 最接近的空閑分區。
?
?3.2、動態分區回收內存的流程
1)釋放?塊連續的內存區域? ? 2)如果被釋放的區域與其他空閑區相鄰,則合并空閑區? ? ? 3)修改空閑分區鏈
?
?
*************************************************************************************
?
?
?
**********************************************************************************************
?
?
*****************************************************************************************
?系統區用于駐留操作系統,用戶區用于分配給用戶進程使用
為了放哪工作用戶程序對操作系統的破壞,保證系統的安全、可靠,在操作系統中應該考慮設置存儲器保護機制。在單用戶、單任務操作系統中較常用的方法是設置一個基址寄存器和一個界限寄存器。
界限寄存器:存放裝入用戶區程序的地址范圍
基址寄存器:存放程序在物理內存中最小地址的是基址寄存器
?