- 操作系統(tǒng)基礎(chǔ)
1.1 操作系統(tǒng)定義
1.2 系統(tǒng)調(diào)用- 進(jìn)程和線程
2.1 進(jìn)程和線程的區(qū)別
2.2 進(jìn)程的幾種狀態(tài)
2.3 進(jìn)程間的通信方式
2.4 線程間的同步方式
2.5 進(jìn)程的調(diào)度算法- OS內(nèi)存管理基礎(chǔ)
3.1 內(nèi)存管理介紹
3.2 常見的幾種內(nèi)存管理機(jī)制
3.3 快表和多級頁表
3.4 分頁機(jī)制和分段機(jī)制
3.5 邏輯(虛擬)地址和物理地址
3.6 CPU尋址蹋盆? 為什么需要虛擬地址空間坛吁?- 虛擬內(nèi)存
4.1 虛擬內(nèi)存定義
4.2 局部性原理
4.3 虛擬存儲器
4.4 虛擬內(nèi)存的技術(shù)實(shí)現(xiàn)
4.5 頁面置換算法
1. 操作系統(tǒng)基礎(chǔ)
1.1 操作系統(tǒng)定義
- OS是管理計(jì)算機(jī)硬件與軟件資源的程序疤祭,是一個(gè)軟件程序
- OS的存在屏蔽了硬件層的復(fù)雜性
-
操作系統(tǒng)的內(nèi)核(Kernel)是操作系統(tǒng)的核心部分脓规,它負(fù)責(zé)系統(tǒng)的內(nèi)存管理背率,硬件設(shè)備的管理细层,文件系統(tǒng)的管理以及應(yīng)用程序的管理儒鹿。
操作系統(tǒng)Kernel
1.2 系統(tǒng)調(diào)用
進(jìn)程在系統(tǒng)上的運(yùn)行分為兩個(gè)級別:
- 用戶態(tài)(user mode) : 用戶態(tài)運(yùn)行的進(jìn)程或可以直接讀取用戶程序的數(shù)據(jù)。
- 系統(tǒng)態(tài)(kernel mode):可以簡單的理解系統(tǒng)態(tài)運(yùn)行的進(jìn)程或程序幾乎可以訪問計(jì)算機(jī)的任何資源凳忙,不受限制业踏。
也就是說在我們運(yùn)行的用戶程序中,凡是與系統(tǒng)態(tài)級別的資源有關(guān)的操作(如文件管理涧卵、進(jìn)程控制勤家、內(nèi)存管理等),都必須通過系統(tǒng)調(diào)用方式向操作系統(tǒng)提出服務(wù)請求柳恐,并由操作系統(tǒng)代為完成伐脖。
系統(tǒng)調(diào)用功能:
- 設(shè)備管理。完成設(shè)備的請求或釋放乐设,以及設(shè)備啟動(dòng)等功能讼庇。
- 文件管理。完成文件的讀伤提、寫、創(chuàng)建及刪除等功能认烁。
- 進(jìn)程控制肿男。完成進(jìn)程的創(chuàng)建、撤銷却嗡、阻塞及喚醒等功能舶沛。
- 進(jìn)程通信。完成進(jìn)程之間的消息傳遞或信號傳遞等功能窗价。
- 內(nèi)存管理如庭。完成內(nèi)存的分配、回收以及獲取作業(yè)占用內(nèi)存區(qū)大小及地址等功能撼港。
2. 進(jìn)程和線程
2.1 進(jìn)程和線程的區(qū)別
一個(gè)進(jìn)程中可以有多個(gè)線程坪它,多個(gè)線程共享進(jìn)程的堆和方法區(qū) (JDK1.8 之后的元空間)資源骤竹,但是每個(gè)線程有自己的程序計(jì)數(shù)器、虛擬機(jī)棧 和 本地方法棧往毡。
總結(jié): 線程是進(jìn)程劃分成的更小的運(yùn)行單位,一個(gè)進(jìn)程在其執(zhí)行的過程中可以產(chǎn)生多個(gè)線程蒙揣。線程和進(jìn)程最大的不同在于基本上各進(jìn)程是獨(dú)立的,而各線程則不一定开瞭,因?yàn)橥贿M(jìn)程中的線程極有可能會(huì)相互影響懒震。線程執(zhí)行開銷小,但不利于資源的管理和保護(hù)嗤详;而進(jìn)程正相反个扰。
2.2 進(jìn)程的幾種狀態(tài)
2.3 進(jìn)程間的通信方式
- 管道/匿名管道(Pipes) :用于具有親緣關(guān)系的父子進(jìn)程間或者兄弟進(jìn)程之間的通信。
- 有名管道(Names Pipes) : 匿名管道由于沒有名字葱色,只能用于親緣關(guān)系的進(jìn)程間通信递宅。為了克服這個(gè)缺點(diǎn),提出了有名管道冬筒。有名管道嚴(yán)格遵循先進(jìn)先出(first in first out)恐锣。有名管道以磁盤文件的方式存在,可以實(shí)現(xiàn)本機(jī)任意兩個(gè)進(jìn)程通信舞痰。
- 信號(Signal) :信號是一種比較復(fù)雜的通信方式土榴,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生。
- 消息隊(duì)列(Message Queuing):消息隊(duì)列是消息的鏈表,具有特定的格式,存放在內(nèi)存中并由消息隊(duì)列標(biāo)識符標(biāo)識响牛。管道和消息隊(duì)列的通信數(shù)據(jù)都是先進(jìn)先出的原則玷禽。與管道(無名管道:只存在于內(nèi)存中的文件;命名管道:存在于實(shí)際的磁盤介質(zhì)或者文件系統(tǒng))不同的是消息隊(duì)列存放在內(nèi)核中呀打,只有在內(nèi)核重啟(即矢赁,操作系統(tǒng)重啟)或者顯示地刪除一個(gè)消息隊(duì)列時(shí),該消息隊(duì)列才會(huì)被真正的刪除贬丛。消息隊(duì)列可以實(shí)現(xiàn)消息的隨機(jī)查詢,消息不一定要以先進(jìn)先出的次序讀取,也可以按消息的類型讀取.比 FIFO 更有優(yōu)勢撩银。消息隊(duì)列克服了信號承載信息量少,管道只能承載無格式字 節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)豺憔。
- 信號量:信號量是一個(gè)計(jì)數(shù)器额获,用于多進(jìn)程對共享數(shù)據(jù)的訪問,信號量的意圖在于進(jìn)程間同步恭应。這種通信方式主要用于解決與同步相關(guān)的問題并避免競爭條件抄邀。
- 共享內(nèi)存(Shared memory) :使得多個(gè)進(jìn)程可以訪問同一塊內(nèi)存空間,不同進(jìn)程可以及時(shí)看到對方進(jìn)程中對共享內(nèi)存中數(shù)據(jù)的更新昼榛。這種方式需要依靠某種同步操作境肾,如互斥鎖和信號量等。可以說這是最有用的進(jìn)程間通信方式奥喻。
- 套接字(Sockets) : 此方法主要用于在客戶端和服務(wù)器之間通過網(wǎng)絡(luò)進(jìn)行通信偶宫。套接字是支持 TCP/IP 的網(wǎng)絡(luò)通信的基本操作單元,可以看做是不同主機(jī)之間的進(jìn)程進(jìn)行雙向通信的端點(diǎn)衫嵌,簡單的說就是通信的兩方的一種約定读宙,用套接字中的相關(guān)函數(shù)來完成通信過程。
細(xì)說其中的匿名管道楔绞,有名管道以及信號隊(duì)列
匿名管道
有名管道
信號隊(duì)列
2.4 線程間的同步方式
- 互斥量(Mutex):采用互斥對象機(jī)制结闸,只有擁有互斥對象的線程才有訪問公共資源的權(quán)限。因?yàn)榛コ鈱ο笾挥幸粋€(gè)酒朵,所以可以保證公共資源不會(huì)被多個(gè)線程同時(shí)訪問桦锄。比如 Java 中的 synchronized 關(guān)鍵詞和各種 Lock 都是這種機(jī)制
- 信號量(Semphares):它允許同一時(shí)刻多個(gè)線程訪問同一資源,但是需要控制同一時(shí)刻訪問此資源的最大線程數(shù)量
- 事件(Event) :Wait/Notify:通過通知操作的方式來保持多線程同步蔫耽,還可以方便的實(shí)現(xiàn)多線程優(yōu)先級的比較
2.5 進(jìn)程的調(diào)度算法
- 先到先服務(wù)(FCFS)調(diào)度算法 : 從就緒隊(duì)列中選擇一個(gè)最先進(jìn)入該隊(duì)列的進(jìn)程為之分配資源结耀,使它立即執(zhí)行并一直執(zhí)行到完成或發(fā)生某事件而被阻塞放棄占用 CPU 時(shí)再重新調(diào)度。
- 短作業(yè)優(yōu)先(SJF)的調(diào)度算法 : 從就緒隊(duì)列中選出一個(gè)估計(jì)運(yùn)行時(shí)間最短的進(jìn)程為之分配資源匙铡,使它立即執(zhí)行并一直執(zhí)行到完成或發(fā)生某事件而被阻塞放棄占用 CPU 時(shí)再重新調(diào)度图甜。
- 時(shí)間片輪轉(zhuǎn)調(diào)度算法 : 時(shí)間片輪轉(zhuǎn)調(diào)度是一種最古老,最簡單鳖眼,最公平且使用最廣的算法黑毅,又稱 RR(Round robin)調(diào)度。每個(gè)進(jìn)程被分配一個(gè)時(shí)間段钦讳,稱作它的時(shí)間片矿瘦,即該進(jìn)程允許運(yùn)行的時(shí)間。
- 多級反饋隊(duì)列調(diào)度算法 :前面介紹的幾種進(jìn)程調(diào)度的算法都有一定的局限性愿卒。如短進(jìn)程優(yōu)先的調(diào)度算法缚去,僅照顧了短進(jìn)程而忽略了長進(jìn)程 。多級反饋隊(duì)列調(diào)度算法既能使高優(yōu)先級的作業(yè)得到響應(yīng)又能使短作業(yè)(進(jìn)程)迅速完成琼开。因而它是目前被公認(rèn)的一種較好的進(jìn)程調(diào)度算法易结,UNIX 操作系統(tǒng)采取的便是這種調(diào)度算法。
- 優(yōu)先級調(diào)度 : 為每個(gè)流程分配優(yōu)先級柜候,首先執(zhí)行具有最高優(yōu)先級的進(jìn)程搞动,依此類推。具有相同優(yōu)先級的進(jìn)程以 FCFS 方式執(zhí)行改橘∽涛荆可以根據(jù)內(nèi)存要求玉控,時(shí)間要求或任何其他資源要求來確定優(yōu)先級飞主。
3. OS內(nèi)存管理基礎(chǔ)
3.1 內(nèi)存管理介紹
操作系統(tǒng)的內(nèi)存管理主要負(fù)責(zé)內(nèi)存的分配與回收(malloc 函數(shù):申請內(nèi)存,free 函數(shù):釋放內(nèi)存),另外地址轉(zhuǎn)換也就是將邏輯地址轉(zhuǎn)換成相應(yīng)的物理地址等功能也是操作系統(tǒng)內(nèi)存管理做的事情碌识。
3.2 常見的幾種內(nèi)存管理機(jī)制
簡單分為連續(xù)分配管理方式和非連續(xù)分配管理方式這兩種碾篡。連續(xù)分配管理方式是指為一個(gè)用戶程序分配一個(gè)連續(xù)的內(nèi)存空間,常見的如 塊式管理 筏餐。同樣地开泽,非連續(xù)分配管理方式允許一個(gè)程序使用的內(nèi)存分布在離散或者說不相鄰的內(nèi)存中,常見的如頁式管理和段式管理魁瞪。
- 塊式管理 : 遠(yuǎn)古時(shí)代的計(jì)算機(jī)操系統(tǒng)的內(nèi)存管理方式穆律。將內(nèi)存分為幾個(gè)固定大小的塊,每個(gè)塊中只包含一個(gè)進(jìn)程导俘。如果程序運(yùn)行需要內(nèi)存的話峦耘,操作系統(tǒng)就分配給它一塊,如果程序運(yùn)行只需要很小的空間的話旅薄,分配的這塊內(nèi)存很大一部分幾乎被浪費(fèi)了辅髓。這些在每個(gè)塊中未被利用的空間,我們稱之為碎片少梁。
- 頁式管理 :把主存分為大小相等且固定的一頁一頁的形式洛口,頁較小,相對相比于塊式管理的劃分力度更大凯沪,提高了內(nèi)存利用率第焰,減少了碎片。頁式管理通過頁表對應(yīng)邏輯地址和物理地址著洼。
- 段式管理 : 頁式管理雖然提高了內(nèi)存利用率樟遣,但是頁式管理其中的頁實(shí)際并無任何實(shí)際意義。 段式管理把主存分為一段段的身笤,每一段的空間又要比一頁的空間小很多 豹悬。但是,最重要的是段是有實(shí)際意義的液荸,每個(gè)段定義了一組邏輯信息瞻佛,例如,有主程序段 MAIN、子程序段 X娇钱、數(shù)據(jù)段 D 及棧段 S 等伤柄。 段式管理通過段表對應(yīng)邏輯地址和物理地址。
- 段頁式管理機(jī)制:段頁式管理機(jī)制結(jié)合了段式管理和頁式管理的優(yōu)點(diǎn)文搂。簡單來說段頁式管理機(jī)制就是把主存先分成若干段适刀,每個(gè)段又分成若干頁,也就是說 段頁式管理機(jī)制 中段與段之間以及段的內(nèi)部的都是離散的煤蹭。
3.3 快表和多級頁表
分頁管理中笔喉,重要的兩點(diǎn)是:
- 虛擬地址到物理地址的轉(zhuǎn)換要快取视。
- 解決虛擬地址空間大,頁表也會(huì)很大的問題常挚。
快表 (提升虛擬地址向物理地址轉(zhuǎn)換的速度)
快表可以理解為一種特殊的高速緩沖存儲器(Cache)作谭,其中的內(nèi)容是頁表的一部分或者全部內(nèi)容。作為頁表的 Cache奄毡,它的作用與頁表相似折欠,但是提高了訪問速率。由于采用頁表做地址轉(zhuǎn)換吼过,讀寫內(nèi)存數(shù)據(jù)時(shí) CPU 要訪問兩次主存锐秦。有了快表,有時(shí)只要訪問一次高速緩沖存儲器盗忱,一次主存农猬,這樣可加速查找并提高指令執(zhí)行速度。
使用快表之后的地址轉(zhuǎn)換流程是:
- 根據(jù)虛擬地址中的頁號查快表售淡;
- 如果該頁在快表中斤葱,直接從快表中讀取相應(yīng)的物理地址;
- 如果該頁不在快表中揖闸,就訪問內(nèi)存中的頁表揍堕,再從頁表中得到物理地址,同時(shí)將頁表中的該映射表項(xiàng)添加到快表中汤纸;
- 當(dāng)快表填滿后衩茸,又要登記新頁時(shí),就按照一定的淘汰策略淘汰掉快表中的一個(gè)頁贮泞。
多級頁表
3.4 分頁機(jī)制和分段機(jī)制
- 共同點(diǎn) :
- 分頁機(jī)制和分段機(jī)制都是為了提高內(nèi)存利用率楞慈,較少內(nèi)存碎片。
- 頁和段都是離散存儲的啃擦,所以兩者都是離散分配內(nèi)存的方式囊蓝。但是,每個(gè)頁和段中的內(nèi)存是連續(xù)的令蛉。
- 區(qū)別 :
- 頁的大小是固定的聚霜,由操作系統(tǒng)決定;而段的大小不固定珠叔,取決于我們當(dāng)前運(yùn)行的程序蝎宇。
- 分頁僅僅是為了滿足操作系統(tǒng)內(nèi)存管理的需求,而段是邏輯信息的單位祷安,在程序中可以體現(xiàn)為代碼段姥芥,數(shù)據(jù)段,能夠更好滿足用戶的需要汇鞭。
3.5 邏輯(虛擬)地址和物理地址
編程一般只有可能和邏輯地址打交道凉唐,比如在 C 語言中报嵌,指針里面存儲的數(shù)值就可以理解成為內(nèi)存里的一個(gè)地址,這個(gè)地址也就是我們說的邏輯地址熊榛,邏輯地址由操作系統(tǒng)決定。物理地址指的是真實(shí)物理內(nèi)存中地址腕巡,更具體一點(diǎn)來說就是內(nèi)存地址寄存器中的地址玄坦。物理地址是內(nèi)存單元真正的地址。
3.6 CPU尋址绘沉? 為什么需要虛擬地址空間煎楣?
4. 虛擬內(nèi)存
4.1 虛擬內(nèi)存定義
這個(gè)在我們平時(shí)使用電腦特別是 Windows 系統(tǒng)的時(shí)候太常見了。很多時(shí)候我們使用點(diǎn)開了很多占內(nèi)存的軟件车伞,這些軟件占用的內(nèi)存可能已經(jīng)遠(yuǎn)遠(yuǎn)超出了我們電腦本身具有的物理內(nèi)存择懂。為什么可以這樣呢? 正是因?yàn)?虛擬內(nèi)存 的存在另玖,通過 虛擬內(nèi)存 可以讓程序可以擁有超過系統(tǒng)物理內(nèi)存大小的可用內(nèi)存空間困曙。另外,虛擬內(nèi)存為每個(gè)進(jìn)程提供了一個(gè)一致的谦去、私有的地址空間慷丽,它讓每個(gè)進(jìn)程產(chǎn)生了一種自己在獨(dú)享主存的錯(cuò)覺(每個(gè)進(jìn)程擁有一片連續(xù)完整的內(nèi)存空間)。這樣會(huì)更加有效地管理內(nèi)存并減少出錯(cuò)鳄哭。
虛擬內(nèi)存是計(jì)算機(jī)系統(tǒng)內(nèi)存管理的一種技術(shù)要糊,我們可以手動(dòng)設(shè)置自己電腦的虛擬內(nèi)存。不要單純認(rèn)為虛擬內(nèi)存只是“使用硬盤空間來擴(kuò)展內(nèi)存“的技術(shù)妆丘。虛擬內(nèi)存的重要意義是它定義了一個(gè)連續(xù)的虛擬地址空間锄俄,并且 把內(nèi)存擴(kuò)展到硬盤空間。
4.2 局部性原理
局部性原理是虛擬內(nèi)存技術(shù)的基礎(chǔ)勺拣,正是因?yàn)槌绦蜻\(yùn)行具有局部性原理奶赠,才可以只裝入部分程序到內(nèi)存就開始運(yùn)行。
局部性原理表現(xiàn)在以下兩個(gè)方面:
- 時(shí)間局部性 :如果程序中的某條指令一旦執(zhí)行药有,不久以后該指令可能再次執(zhí)行车柠;如果某數(shù)據(jù)被訪問過,不久以后該數(shù)據(jù)可能再次被訪問塑猖。產(chǎn)生時(shí)間局部性的典型原因竹祷,是由于在程序中存在著大量的循環(huán)操作。
- 空間局部性 :一旦程序訪問了某個(gè)存儲單元羊苟,在不久之后塑陵,其附近的存儲單元也將被訪問,即程序在一段時(shí)間內(nèi)所訪問的地址蜡励,可能集中在一定的范圍之內(nèi)令花,這是因?yàn)橹噶钔ǔJ琼樞虼娣抛栉Α㈨樞驁?zhí)行的,數(shù)據(jù)也一般是以向量兼都、數(shù)組嫂沉、表等形式簇聚存儲的。
時(shí)間局部性是通過將近來使用的指令和數(shù)據(jù)保存到高速緩存存儲器中扮碧,并使用高速緩存的層次結(jié)構(gòu)實(shí)現(xiàn)趟章。空間局部性通常是使用較大的高速緩存慎王,并將預(yù)取機(jī)制集成到高速緩存控制邏輯中實(shí)現(xiàn)蚓土。虛擬內(nèi)存技術(shù)實(shí)際上就是建立了 “內(nèi)存一外存”的兩級存儲器的結(jié)構(gòu),利用局部性原理實(shí)現(xiàn)髙速緩存赖淤。
4.3 虛擬存儲器
基于局部性原理蜀漆,在程序裝入時(shí),可以將程序的一部分裝入內(nèi)存咱旱,而將其他部分留在外存确丢,就可以啟動(dòng)程序執(zhí)行。由于外存往往比內(nèi)存大很多吐限,所以我們運(yùn)行的軟件的內(nèi)存大小實(shí)際上是可以比計(jì)算機(jī)系統(tǒng)實(shí)際的內(nèi)存大小大的蠕嫁。在程序執(zhí)行過程中,當(dāng)所訪問的信息不在內(nèi)存時(shí)毯盈,由操作系統(tǒng)將所需要的部分調(diào)入內(nèi)存剃毒,然后繼續(xù)執(zhí)行程序。另一方面搂赋,操作系統(tǒng)將內(nèi)存中暫時(shí)不使用的內(nèi)容換到外存上赘阀,從而騰出空間存放將要調(diào)入內(nèi)存的信息。這樣脑奠,計(jì)算機(jī)好像為用戶提供了一個(gè)比實(shí)際內(nèi)存大的多的存儲器——虛擬存儲器基公。
虛擬內(nèi)存同樣是一種時(shí)間換空間的策略,你用 CPU 的計(jì)算時(shí)間宋欺,頁的調(diào)入調(diào)出花費(fèi)的時(shí)間轰豆,換來了一個(gè)虛擬的更大的空間來支持程序的運(yùn)行。
4.4 虛擬內(nèi)存的技術(shù)實(shí)現(xiàn)
虛擬內(nèi)存的實(shí)現(xiàn)需要建立在離散分配的內(nèi)存管理方式的基礎(chǔ)上齿诞。 虛擬內(nèi)存的實(shí)現(xiàn)有以下三種方式:
- 請求分頁存儲管理 :建立在分頁管理之上酸休,為了支持虛擬存儲器功能而增加了請求調(diào)頁功能和頁面置換功能。請求分頁是目前最常用的一種實(shí)現(xiàn)虛擬存儲器的方法祷杈。請求分頁存儲管理系統(tǒng)中斑司,在作業(yè)開始運(yùn)行之前,僅裝入當(dāng)前要執(zhí)行的部分段即可運(yùn)行但汞。假如在作業(yè)運(yùn)行的過程中發(fā)現(xiàn)要訪問的頁面不在內(nèi)存宿刮,則由處理器通知操作系統(tǒng)按照對應(yīng)的頁面置換算法將相應(yīng)的頁面調(diào)入到主存互站,同時(shí)操作系統(tǒng)也可以將暫時(shí)不用的頁面置換到外存中。
- 請求分段存儲管理 :建立在分段存儲管理之上僵缺,增加了請求調(diào)段功能胡桃、分段置換功能。請求分段儲存管理方式就如同請求分頁儲存管理方式一樣磕潮,在作業(yè)開始運(yùn)行之前翠胰,僅裝入當(dāng)前要執(zhí)行的部分段即可運(yùn)行;在執(zhí)行過程中揉抵,可使用請求調(diào)入中斷動(dòng)態(tài)裝入要訪問但又不在內(nèi)存的程序段;當(dāng)內(nèi)存空間已滿嗤疯,而又需要裝入新的段時(shí)冤今,根據(jù)置換功能適當(dāng)調(diào)出某個(gè)段,以便騰出空間而裝入新的段茂缚。
- 請求段頁式存儲管理
上面的實(shí)現(xiàn)方式一般都需要:
- 一定容量的內(nèi)存和外存:在載入程序的時(shí)候戏罢,只需要將程序的一部分裝入內(nèi)存,而將其他部分留在外存脚囊,然后程序就可以執(zhí)行了龟糕;
- 缺頁中斷:如果需執(zhí)行的指令或訪問的數(shù)據(jù)尚未在內(nèi)存(稱為缺頁或缺段),則由處理器通知操作系統(tǒng)將相應(yīng)的頁面或段調(diào)入到內(nèi)存悔耘,然后繼續(xù)執(zhí)行程序讲岁;
- 虛擬地址空間 :邏輯地址到物理地址的變換。
請求分頁 vs 分頁存儲
請求分頁存儲管理建立在分頁管理之上衬以。它們之間的根本區(qū)別在于是否將一作業(yè)的全部地址空間同時(shí)裝入主存缓艳。請求分頁存儲管理不要求將作業(yè)全部地址空間同時(shí)裝入主存】淳基于這一點(diǎn)阶淘,請求分頁存儲管理可以提供虛存,而分頁存儲管理卻不能提供虛存互妓。
4.5 頁面置換算法
地址映射過程中溪窒,若在頁面中發(fā)現(xiàn)所要訪問的頁面不在內(nèi)存中,則發(fā)生缺頁中斷 冯勉。缺頁中斷 就是要訪問的頁不在主存澈蚌,需要操作系統(tǒng)將其調(diào)入主存后再進(jìn)行訪問。 在這個(gè)時(shí)候灼狰,被內(nèi)存映射的文件實(shí)際上成了一個(gè)分頁交換文件惜浅。
當(dāng)發(fā)生缺頁中斷時(shí),如果當(dāng)前內(nèi)存中并沒有空閑的頁面伏嗜,操作系統(tǒng)就必須在內(nèi)存選擇一個(gè)頁面將其移出內(nèi)存坛悉,以便為即將調(diào)入的頁面讓出空間伐厌。用來選擇淘汰哪一頁的規(guī)則叫做頁面置換算法,我們可以把頁面置換算法看成是淘汰頁面的規(guī)則裸影。
- OPT 頁面置換算法(最佳頁面置換算法) :最佳(Optimal, OPT)置換算法所選擇的被淘汰頁面將是以后永不使用的挣轨,或者是在最長時(shí)間內(nèi)不再被訪問的頁面,這樣可以保證獲得最低的缺頁率。但由于人們目前無法預(yù)知進(jìn)程在內(nèi)存下的若千頁面中哪個(gè)是未來最長時(shí)間內(nèi)不再被訪問的轩猩,因而該算法無法實(shí)現(xiàn)卷扮。一般作為衡量其他置換算法的方法。
- FIFO(First In First Out) 頁面置換算法(先進(jìn)先出頁面置換算法) : 總是淘汰最先進(jìn)入內(nèi)存的頁面均践,即選擇在內(nèi)存中駐留時(shí)間最久的頁面進(jìn)行淘汰晤锹。
- LRU (Least Currently Used)頁面置換算法(最近最久未使用頁面置換算法) :LRU算法賦予每個(gè)頁面一個(gè)訪問字段,用來記錄一個(gè)頁面自上次被訪問以來所經(jīng)歷的時(shí)間 T彤委,當(dāng)須淘汰一個(gè)頁面時(shí)鞭铆,選擇現(xiàn)有頁面中其 T 值最大的,即最近最久未使用的頁面予以淘汰焦影。
- LFU (Least Frequently Used)頁面置換算法(最少使用頁面置換算法) : 該置換算法選擇在之前時(shí)期使用最少的頁面作為淘汰頁车遂。