操作系統(tǒng)常見的面試題

  1. 操作系統(tǒng)基礎(chǔ)
    1.1 操作系統(tǒng)定義
    1.2 系統(tǒng)調(diào)用
  2. 進(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)度算法
  3. OS內(nèi)存管理基礎(chǔ)
    3.1 內(nèi)存管理介紹
    3.2 常見的幾種內(nèi)存管理機(jī)制
    3.3 快表和多級頁表
    3.4 分頁機(jī)制和分段機(jī)制
    3.5 邏輯(虛擬)地址和物理地址
    3.6 CPU尋址蹋盆? 為什么需要虛擬地址空間坛吁?
  4. 虛擬內(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)定義

  1. OS是管理計(jì)算機(jī)硬件與軟件資源的程序疤祭,是一個(gè)軟件程序
  2. OS的存在屏蔽了硬件層的復(fù)雜性
  3. 操作系統(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è)級別:

  1. 用戶態(tài)(user mode) : 用戶態(tài)運(yùn)行的進(jìn)程或可以直接讀取用戶程序的數(shù)據(jù)。
  2. 系統(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)

進(jìn)程的幾種狀態(tài)

2.3 進(jìn)程間的通信方式

  1. 管道/匿名管道(Pipes) :用于具有親緣關(guān)系的父子進(jìn)程間或者兄弟進(jìn)程之間的通信。
  2. 有名管道(Names Pipes) : 匿名管道由于沒有名字葱色,只能用于親緣關(guān)系的進(jìn)程間通信递宅。為了克服這個(gè)缺點(diǎn),提出了有名管道冬筒。有名管道嚴(yán)格遵循先進(jìn)先出(first in first out)恐锣。有名管道以磁盤文件的方式存在,可以實(shí)現(xiàn)本機(jī)任意兩個(gè)進(jìn)程通信舞痰。
  3. 信號(Signal) :信號是一種比較復(fù)雜的通信方式土榴,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生。
  4. 消息隊(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)豺憔。
  5. 信號量:信號量是一個(gè)計(jì)數(shù)器额获,用于多進(jìn)程對共享數(shù)據(jù)的訪問,信號量的意圖在于進(jìn)程間同步恭应。這種通信方式主要用于解決與同步相關(guān)的問題并避免競爭條件抄邀。
  6. 共享內(nèi)存(Shared memory) :使得多個(gè)進(jìn)程可以訪問同一塊內(nèi)存空間,不同進(jìn)程可以及時(shí)看到對方進(jìn)程中對共享內(nèi)存中數(shù)據(jù)的更新昼榛。這種方式需要依靠某種同步操作境肾,如互斥鎖和信號量等。可以說這是最有用的進(jìn)程間通信方式奥喻。
  7. 套接字(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ì)列

信號隊(duì)列

2.4 線程間的同步方式

  1. 互斥量(Mutex):采用互斥對象機(jī)制结闸,只有擁有互斥對象的線程才有訪問公共資源的權(quán)限。因?yàn)榛コ鈱ο笾挥幸粋€(gè)酒朵,所以可以保證公共資源不會(huì)被多個(gè)線程同時(shí)訪問桦锄。比如 Java 中的 synchronized 關(guān)鍵詞和各種 Lock 都是這種機(jī)制
  2. 信號量(Semphares):它允許同一時(shí)刻多個(gè)線程訪問同一資源,但是需要控制同一時(shí)刻訪問此資源的最大線程數(shù)量
  3. 事件(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)存中,常見的如頁式管理和段式管理魁瞪。

  1. 塊式管理 : 遠(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è)塊中未被利用的空間,我們稱之為碎片少梁。
  2. 頁式管理 :把主存分為大小相等且固定的一頁一頁的形式洛口,頁較小,相對相比于塊式管理的劃分力度更大凯沪,提高了內(nèi)存利用率第焰,減少了碎片。頁式管理通過頁表對應(yīng)邏輯地址和物理地址著洼。
  3. 段式管理 : 頁式管理雖然提高了內(nèi)存利用率樟遣,但是頁式管理其中的頁實(shí)際并無任何實(shí)際意義。 段式管理把主存分為一段段的身笤,每一段的空間又要比一頁的空間小很多 豹悬。但是,最重要的是段是有實(shí)際意義的液荸,每個(gè)段定義了一組邏輯信息瞻佛,例如,有主程序段 MAIN、子程序段 X娇钱、數(shù)據(jù)段 D 及棧段 S 等伤柄。 段式管理通過段表對應(yīng)邏輯地址和物理地址。
  4. 段頁式管理機(jī)制:段頁式管理機(jī)制結(jié)合了段式管理和頁式管理的優(yōu)點(diǎn)文搂。簡單來說段頁式管理機(jī)制就是把主存先分成若干段适刀,每個(gè)段又分成若干頁,也就是說 段頁式管理機(jī)制 中段與段之間以及段的內(nèi)部的都是離散的煤蹭。

3.3 快表和多級頁表

分頁管理中笔喉,重要的兩點(diǎn)是:

  1. 虛擬地址到物理地址的轉(zhuǎn)換要快取视。
  2. 解決虛擬地址空間大,頁表也會(huì)很大的問題常挚。

快表 (提升虛擬地址向物理地址轉(zhuǎn)換的速度)

快表可以理解為一種特殊的高速緩沖存儲器(Cache)作谭,其中的內(nèi)容是頁表的一部分或者全部內(nèi)容。作為頁表的 Cache奄毡,它的作用與頁表相似折欠,但是提高了訪問速率。由于采用頁表做地址轉(zhuǎn)換吼过,讀寫內(nèi)存數(shù)據(jù)時(shí) CPU 要訪問兩次主存锐秦。有了快表,有時(shí)只要訪問一次高速緩沖存儲器盗忱,一次主存农猬,這樣可加速查找并提高指令執(zhí)行速度。

使用快表之后的地址轉(zhuǎn)換流程是:

  1. 根據(jù)虛擬地址中的頁號查快表售淡;
  2. 如果該頁在快表中斤葱,直接從快表中讀取相應(yīng)的物理地址;
  3. 如果該頁不在快表中揖闸,就訪問內(nèi)存中的頁表揍堕,再從頁表中得到物理地址,同時(shí)將頁表中的該映射表項(xiàng)添加到快表中汤纸;
  4. 當(dāng)快表填滿后衩茸,又要登記新頁時(shí),就按照一定的淘汰策略淘汰掉快表中的一個(gè)頁贮泞。

多級頁表

多級頁表

3.4 分頁機(jī)制和分段機(jī)制

  1. 共同點(diǎn)
  • 分頁機(jī)制和分段機(jī)制都是為了提高內(nèi)存利用率楞慈,較少內(nèi)存碎片。
  • 頁和段都是離散存儲的啃擦,所以兩者都是離散分配內(nèi)存的方式囊蓝。但是,每個(gè)頁和段中的內(nèi)存是連續(xù)的令蛉。
  1. 區(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尋址绘沉? 為什么需要虛擬地址空間煎楣?

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è)方面:

  1. 時(shí)間局部性 :如果程序中的某條指令一旦執(zhí)行药有,不久以后該指令可能再次執(zhí)行车柠;如果某數(shù)據(jù)被訪問過,不久以后該數(shù)據(jù)可能再次被訪問塑猖。產(chǎn)生時(shí)間局部性的典型原因竹祷,是由于在程序中存在著大量的循環(huán)操作。
  2. 空間局部性 :一旦程序訪問了某個(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)有以下三種方式:

  1. 請求分頁存儲管理 :建立在分頁管理之上酸休,為了支持虛擬存儲器功能而增加了請求調(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í)不用的頁面置換到外存中。
  2. 請求分段存儲管理 :建立在分段存儲管理之上僵缺,增加了請求調(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è)段,以便騰出空間而裝入新的段茂缚。
  3. 請求段頁式存儲管理

上面的實(shí)現(xiàn)方式一般都需要:

  1. 一定容量的內(nèi)存和外存:在載入程序的時(shí)候戏罢,只需要將程序的一部分裝入內(nèi)存,而將其他部分留在外存脚囊,然后程序就可以執(zhí)行了龟糕;
  2. 缺頁中斷:如果需執(zhí)行的指令或訪問的數(shù)據(jù)尚未在內(nèi)存(稱為缺頁或缺段),則由處理器通知操作系統(tǒng)將相應(yīng)的頁面或段調(diào)入到內(nèi)存悔耘,然后繼續(xù)執(zhí)行程序讲岁;
  3. 虛擬地址空間 :邏輯地址到物理地址的變換。

請求分頁 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í)期使用最少的頁面作為淘汰頁车遂。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市斯辰,隨后出現(xiàn)的幾起案子舶担,更是在濱河造成了極大的恐慌,老刑警劉巖彬呻,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衣陶,死亡現(xiàn)場離奇詭異,居然都是意外死亡闸氮,警方通過查閱死者的電腦和手機(jī)祖搓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湖苞,“玉大人拯欧,你說我怎么就攤上這事〔乒牵” “怎么了镐作?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長隆箩。 經(jīng)常有香客問我该贾,道長,這世上最難降的妖魔是什么捌臊? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任杨蛋,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逞力。我一直安慰自己曙寡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布寇荧。 她就那樣靜靜地躺著举庶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揩抡。 梳的紋絲不亂的頭發(fā)上户侥,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音峦嗤,去河邊找鬼胎挎。 笑死吧秕,一個(gè)胖子當(dāng)著我的面吹牛硕勿,可吹牛的內(nèi)容都是我干的昧穿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼署尤,長吁一口氣:“原來是場噩夢啊……” “哼耙替!你這毒婦竟也來了亚侠?” 一聲冷哼從身側(cè)響起曹体,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎硝烂,沒想到半個(gè)月后箕别,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滞谢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年串稀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狮杨。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡母截,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出橄教,到底是詐尸還是另有隱情清寇,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布护蝶,位于F島的核電站华烟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏持灰。R本人自食惡果不足惜盔夜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喂链,春花似錦返十、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赏表,卻和暖如春检诗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瓢剿。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工逢慌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人间狂。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓攻泼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鉴象。 傳聞我的和親對象是個(gè)殘疾皇子忙菠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354