操作系統學習筆記高度濃縮版之內存管理

目錄

一、進程運行的基本知識

二、內存管理的概念

2.1、內存空間的分配與回收

基本分頁存儲管理

基本分段存儲管理

段頁式存儲管理

2.2、內存空間的擴充:覆蓋技術;交換技術;虛擬存儲技術

三、虛擬內存管理

請求分頁管理方式

頁面分配策略


一、進程運行的基本知識

1.三種基本概念:編譯(高級語言翻譯機器語言)、鏈接(生成裝入模塊形成完整邏輯地址)、裝入(裝入內存形成物理地址);

2.三種鏈接方式:靜態鏈接(裝入前鏈接)、裝入時動態鏈接(運行前邊裝入邊鏈接)、運行時動態鏈接(運行時需要才裝入並鏈接)        目的:確定完整的邏輯地址

3.三種裝入方式:絕對裝入(編譯時產生絕對地址,單道程序環境)、靜態重定位(裝入時將邏輯地址轉化爲物理地址,多道批處理操作系統)、動態重定位(運行時將邏輯地址轉化爲物理地址,需要設置定位寄存器,現代操作系統)        目的:確定最終的物理地址

 

二、內存管理的概念

2.1、內存空間的分配與回收

2.1.1、連續分配管理方式:單一連續分配(內存分爲系統區和用戶區,只能有一道用戶程序)(無外部碎片,有內部碎片)、固 定分區分配(將整個用戶空間劃分若干個固定大小的分區,分區大小可相等也可不相等,每個分區只能裝入一道作業,分區說明表進行管理)(無外部碎片,有內部碎片)、動態分區分配(根據進程的大小動態地建立分區,使用空閒分區表或空閒分區鏈進行管理,動態分區算法選擇合適的空閒分區分配)(有外部碎片,無內部碎片)

補充:內部碎片(已分配),分配給某進程的內存區域中,而之有些部分沒有用上;

外部碎片(未分配),內存中某些空閒分區由於太小而難以利用。

2.1.2、動態分區分配算法:首次適應算法(按地址遞增次序排列,依次查找)(綜合性能最好);最佳適應算法(按容量大小遞增次序排列,依次查找,優先使用容量小的);最壞適應算法(首次適應演變而來,按容量大小遞減次序排列,依次查找,優先使用容量大的);鄰近適應算法(按地址遞增次序排列,從上次查找結束開始的位置依次查找)

2.1.3、非連續分配管理方式:基本分頁存儲管理基本分段存儲管理段頁式存儲管理

 

基本分頁存儲管理

補充:頁框=頁幀=內存塊=物理塊=物理頁面(內存分區)頁=頁面(進程邏輯地址空間分區);頁面和頁框一一對應(頁表,頁表項由“頁號”和“塊號”組成,頁號不佔用內存空間)

基本地址變換機構:將邏輯地址轉化爲物理地址(根據邏輯地址算出頁號和頁內偏移量-->檢查頁號是否合法,應小於頁表長度-->根據頁表起始地址和頁號找到對應頁表項-->根據頁表項中記錄的塊號和頁內偏移量得到物理地址-->訪問物理內存單元)。

具有快表(TLB)的地址變換機構:(根據邏輯地址算出頁號和頁內偏移量-->檢查頁號是否合法,應小於頁表長度-->查快表,若命中則跳過根據頁表起始地址和頁號找到對應頁表項-->根據頁表項中記錄的塊號和頁內偏移量得到物理地址-->訪問物理內存單元)。

TLB和普通Cache的區別:TLB中只有頁表項的副本,而普通Cache中可能會有其他各種數據的副本。

頁表長度是指這個頁表中總共有幾個頁表項,即總共有幾個頁;頁表項長度是指每個頁表項佔多大的存儲空間;頁面大小是指一個頁面佔多大的存儲空間。

注意:當頁表過大需要很大的連續空間時,可以使用多級頁表的方法,但多級頁表不使用TLB時N級頁表訪問一個邏輯地址需要N+1次訪存

 

基本分段存儲管理

進程的地址空間:按照程序自身的邏輯關係劃分爲若干個段,每段有段名且每段從0開始編址;

邏輯地址結構:段號和段內地址(段內偏移量);

內存分配規則:以段爲單位進行分配,每個段在內存中佔據連續的空間,各段不相鄰 ;

段表中的段表項由段號(隱含的,不佔存儲空間)、段長、基地址組成;

與頁表地址轉換的不同之處在於增加了還要根據段表中記錄的段長來檢查段內地址是否越界

分段與分頁的區別:分頁對用戶不可見,分段可見;分頁的邏輯地址結構是一維的(偏移量),分段是二維的(段名+偏移量);分段更容易實現信息的共存和保護

 

段頁式存儲管理

將進程按邏輯模塊分段後再將每個段分頁,不會產生外部碎片,只會產生少量內部碎片;

邏輯地址結構(二維):段號、頁號、頁內偏移地址 + 頁號、頁面存放的塊號;

地址變換:由邏輯地址得到短號、頁號、頁內偏移量-->段號與段表寄存器中的段長度比較,檢查是否越界-->由段表始址、段號找到對應段表項-->根據段表中記錄的頁表長度,檢查頁號是否越界-->由段表中的頁表地址、頁號查詢頁表項-->由塊號和頁內偏移得到物理地址-->訪問目標單元;

3次訪存:查段表、查頁表、訪問目標單元--------->設置快表,命中則僅需一次訪存。

 

2.2、內存空間的擴充:覆蓋技術交換技術虛擬存儲技術

覆蓋技術包含一個固定區(區內程序段在運行過程中不會調入調出)和若干覆蓋區(區內程序段在運行過程中需要調入和調出),對用戶不透明增加用戶編程負擔,是在同一個程序或者進程中進行的;

交換技術是內存緊張時,換出某些進程以騰出內存空間,再換入某些進程,而外存磁盤分爲文件區和對換區,換出的進程放在對換區,是在不同進程(或作業)之間的;

虛擬存儲技術詳見下述三、虛擬內存管理。

2.3、地址轉換:絕對裝入可重定位裝入動態運行時裝入

詳細請見上述一、進程運行的基本知識  3.的三種裝入方式。

2.4、內存保護(保證各進程在各自的存儲空間內運行,互不干擾):設置上下限寄存器(起始物理地址和終止物理地址);利用重定位寄存器(起始物理地址)、界地址寄存器(最大邏輯地址)

 

三、虛擬內存管理

1.虛擬內存使用的原理:局部性原理

時間局部性:現在訪問的指令和數據在不久後會被訪問

空間局部性:現在訪問的內存單元周圍的內存空間,很可能在不久後會被訪問

高速緩存技術:使用頻繁的數據放到更高速的存儲器中

2.虛擬內存的定義:程序不需要全部裝入即可運行,運行時動態調入,若內存不夠則進行置換

3.虛擬內存的特徵

多次性:無需在作業運行時一次性全部裝入內存,而是允許被分爲多次調入內存

對換性:無需在作業運行時一直常駐內存,而是允許在作業運行過程中,將作業換入和換出

虛擬性:邏輯上擴充內存容量,用戶看到的內存容量遠大於實際容量

4.虛擬內存技術的實現:請求分頁存儲管理;請求分段存儲管理;請求段頁式存儲管理

 

請求分頁管理方式

兩個重要功能(基於基本分頁存儲管理上增加):請求調頁(頁面缺失時)、頁面置換(內存不夠)

請求頁表項:頁號、內存塊號、狀態位(是否已調入內存)、訪問字段(最近訪問次數)、修改位(調入內存後是否被修改)、外存地址(頁面在外存存放位置)

缺頁中斷機制:找到頁表項後檢查頁面是否已在內存,若沒在內存,產生缺頁中斷-->缺頁中斷處理中,進行頁面的跳入,必要時還需進行置換-->一條指令可能會產生多次缺頁中斷

地址變換:找到頁表項後頁面不在內存時還需使用缺頁中斷機制,頁面調入內存後還要修改對應的頁表項

頁面置換算法:最佳置換算法(OPT)----->預知以後訪問頁面序列,置換最長時間內不被訪問的頁面,理想化算法;先進先出置換算法(FIFO)-------->置換最早進入內存的頁面,具有Belady異常;最近最久未使用置換算法(LRU)------->置換最近最久未適應的頁面;時鐘置換算法(最近未用算法NRU)------>循環掃描各頁面,第一輪淘汰訪問位=0的,並將掃描過的頁面訪問位改爲1,若均爲1,掃描後置爲0,則第一輪後均爲0,進行第二輪掃描;改進型的時鐘置換算法-------->(訪問位,修改位)第一輪:淘汰(0,0),第二輪淘汰(0,1)並將掃描過的頁面訪問位置爲0,第三輪淘汰(0,0),第四輪淘汰(0,1)

補充:Belady異常:當爲進程分配的物理塊數增大時,缺頁次數不減反增的異常現象

 

頁面分配策略

駐留集:是指請求分頁存儲管理中給進程分配的物理塊的集合(即是系統給進程分配的物理塊數)

固定分配局部置換:進程運行前就分配號駐留集,缺頁時只能換出進程自己的某一頁

可變分配全局置換:只要缺頁就分配新的物理塊,可能來自空閒物理塊,也可能需換出別的進程頁面

可變分配局部置換:根據發生缺頁的頻率來動態地增加或減少進程的物理塊

何時調入頁面:預調頁策略(運行前);請求調頁策略(運行時)

何處調用頁面:UNIX方式:第一次使用的頁面都從文件區調入,調出的頁面都寫回對換區,再次使用時從對換區調入

抖動(顛簸)現象:由於分配給進程的物理塊不夠導致,剛剛換出的頁面馬上又換入主存,剛剛換入的頁面馬上就要換出主存------>如果是因爲頁面替換策略失誤,可以修改替換算法來解決這個問題;如果是因爲運行的程序太多,造成程序無法同時將所有頻繁訪問的頁面調入內存,則要降低多道程序的數量;否則終止該進程或者增加駐留集大小

工作集:是指在某段時間間隔裏,進程實際訪問頁面的集合(駐留集大小一般不小於工作集大小來防止抖動現象)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章