內存管理概念
3.1.1內存管理的概念
內存管理(Memory Management)
功能:
- 內存空間的分配與回收:由操作系統完成主存儲器空間的分配和管理,使程序員擺脫存儲分配的麻煩,提高編程效率
- 地址轉換:在多道程序環境下,程序中的邏輯地址與內存中的物理地址不可能一致,因此存儲管理必須提供地址變換功能,把邏輯地址轉換成相應的物理地址
- 內存空間的擴充:利用虛擬存儲技術或自動覆蓋技術,從邏輯上擴充內存
- 儲存保護:保證各道作業在各自的存儲空間內運行,互不干擾
1.程序裝入和鏈接
將用戶源程序變爲可在內存中執行的程序:
- 編譯:由編譯程序將用戶代碼編譯成若干個目標模塊
- 鏈接:由鏈接程序將編譯後形成的一組目標模塊,以及所需庫函數鏈接在一起,形成一個完整的裝入模塊
- 裝入:由裝入程序將裝入模塊裝入內存運行
靜態鏈接:在程序運行之前,先將各目標模塊及他們所需的庫函數鏈接成一個完整的可執行程序,以後不再拆開
裝入時動態鏈接:將用戶源程序編譯後所得到的一組目標模塊,在裝入內存時,採用邊裝入邊鏈接的方式
運行時動態鏈接:對某些目標模塊的鏈接,是在程序執行中需要該目標模塊時,纔對它進行的鏈接。優點便於實現對目標模塊的共享
- 絕對裝入:適合單道程序環境,邏輯地址和實際地址相同
- 可重定位裝入
- 動態運行時裝入(動態重定位)
3.1.2覆蓋與交換
1.覆蓋
基本思想:由於程序運行時並非任何時候都要訪問程序及數據的各個部分,因此可以把用戶空間分成一個固定區和若干個覆蓋區。將經常活躍的部分放在固定區,其餘部分按調用關係分段。即將要訪問的調入覆蓋區
2.交換
基本思想:把處於等待狀態的程序從內存移到輔存,把內存空間騰出來,這一過程叫換出
注意:
- 交換需要備份存儲,通常是快速磁盤。必須足夠大,並且提供對這些內存映像的直接訪問
- 爲了有效使用CPU,需要每個進程的執行時間比交換時間長,而影響交換時間的主要是轉移時間。轉移時間與所交換內存空間成正比
- 如果換出進程,必須確保該進程是完全處於空閒狀態
- 交換空間通常作爲磁盤的一整塊,且獨立於文件系統
- 交換通常在有許多進程運行且內存空間吃緊時開始啓動,而系統負荷降低就暫停
- 普通的交換使用不多,但交換策略的某些變種在許多系統中仍發揮作用
3.1.3連續分配管理方式
連續分配方式,是指爲一個用戶程序分配一個連續的內存空間
1.單一連續分配
內存分爲系統區和用戶區;系統區僅提供給操作系統使用,通常在低地址部分,用戶區爲用戶提供,除系統區之外的內存空間,這種方式無需進行內存保護。優點:簡單,無外部碎片,可採用覆蓋技術,缺點:只能用於單用戶,單任務的操作系統,有內部碎片,存儲器的利用率低。
2.固定分區分配
最簡單的一種多道程序存儲管理方式,它將用戶內存空間劃分爲若干個固定大小的區域,每個分區只能裝入一道作業。
分區大小相等:缺乏靈活性
無外部碎片,不能實現多進程共享一個主存區,存儲空間利用率低。
3.動態分區分配
可變分區分配,在進程裝入內存時,根據進程的大小動態的建立分區
A邏輯地址 頁面大小L 物理地址E
計算頁號P(P=A/L)頁內偏移量W (W=A%L)
P對應的頁表項地址=頁表起始地址F+頁號P*頁表長度
虛擬內存管理
基本概念
1.傳統存儲管理方式的特徵
- 一次性:作業必須一次性全部裝入內存後,纔開始運行
- 駐留性:被裝入內存中,不會被換出,直至運行結束
2.局部性原理
- 時間局部性:產生大量循環
- 空間局部性:程序在一段時間內所訪問的地址,可能集中在一定範圍之內。
3.虛擬存儲器的定義和特徵
基於局部性原理,在程序裝入時,可以將程序的一部分裝入內存,將其餘部分留在外存,就可以啓動程序執行。
特徵:
- 多次性
- 對換性
- 虛擬性
4.虛擬內存技術的實現
需要建立在離散分配的內存管理方式的基礎上。
三種方式實現:請求分頁、分段、段頁式存儲管理
要有硬件的支持還要:
- 一定容量的內存和外存
- 頁表機制(段表機制)作爲主要的數據結構
- 中斷機制,
- 地址變換機構,邏輯地址到物理地址的變換
請求分頁管理方式
1.頁表機制
頁號 物理塊號 狀態位P 訪問字段A 修改位M 外存地址
狀態位P:用於指示該頁是否已調入內存,供程序訪問時參考
訪問字段A:用於記錄本頁在一段時間內被訪問的次數,或記錄本頁最近已有多長時間未被訪問,供置換算法換出頁面時參考
修改位M:標識該頁在調入內存後是否被修改過
外存地址:用於指出該頁在外存上的地址,通常是物理塊號,供調入該頁時參考
2.缺頁中斷機制
要訪問的頁面不在內存中,便產生缺頁中斷,請求操作系統將所缺頁調入內存,
特點:在指令期間產生和處理中斷信號,可能產生多次,屬於內部中斷。
3.地址變換機制
頁面置換算法
1.最佳置換算法(OPT)
所選擇的被淘汰的是以後永不使用的,或最長時間內不被訪問的頁面
2.先進先出(FIFO)
優先淘汰最早進入內存的頁面,
3.最近最久未使用(LRU)
選擇最近最長時間未被訪問的頁面予以淘汰。
4.時鐘(CLOCK)
實現困難,開銷大
給每一幀關聯一個附加位,首次進入置1,隨後被訪問置1;需要替換一頁時,查找使用位置爲0的,每當遇到一個使用位爲1的幀時,操作系統將該位重新置爲0 ;
頁面分配策略
1.駐留集大小
- 分配給一個進程的存儲量越小,在任何時候駐留在主存中的進程數就越多,從而可以提高處理機的時間利用率。
- 如果一個進程在主存中的頁數過少,儘管有局部性原理,頁錯誤率仍然會相對較高
- 如果頁數過多,由於局部性原理,給特定的進程分配更多的主存空間對該進程的錯誤率沒有明顯的影響
固定分配局部置換
可變分配全局置換
可變分配局部置換
2.調入頁面的時機
預調頁策略
請求調頁策略