操做系統面試知識點總結

 一.操做系統概述
1. 操做系統的四個特性

併發:同一段時間內多個程序執行(注意區別並行和併發,前者是同一時刻的多個事件,後者是同一時間段內的多個事件)程序員

共享:系統中的資源能夠被內存中多個併發執行的進線程共同使用web

虛擬:經過時分複用(如多道程序技術,分時系統)以及空分複用(如虛擬內存)技術實現把一個物理實體虛擬爲多個算法

異步:系統中的進程是以走走停停的方式執行的,且以一種不可預知的速度推動安全

2.操做系統的主要功能

處理機管理:處理機分配都是以進程爲單位,因此處理機管理也被看作是進程管理。包括進程控制,進程同步,進程通訊和調度(做業調度和進程調度)
存儲器管理(或者內存管理):內存分配,內存保護,地址映射,內存擴充
設備管理:管理全部外圍設備,包括完成用戶的IO請求;爲用戶進程分配IO設備;提升IO設備利用率;提升IO速度;方便IO的使用
文件管理:管理用戶文件和系統文件,方便使用同時保證安全性。包括:文件存儲空間管理,目錄管理,文件讀寫管理以及文件共享和保護
提供用戶接口:程序接口(如API)和用戶接口(如GUI)多線程

二.進程和線程併發

3.進程的狀態與轉換

  進程的三種基本狀態:就緒(Ready)狀態,執行(Running)狀態,阻塞(Block)狀態  (引入的兩種常見的狀態:建立狀態,終止狀態)異步

運行狀態:進程正在處理機上運行。在單處理機環境下,每一時刻最多隻有一個進程處於運行狀態。socket

就緒狀態:進程已處於準備運行的狀態,即進程得到了除處理機以外的一切所需資源,一旦獲得處理機便可運行。函數

阻塞狀態,又稱等待狀態:進程正在等待某一事件而暫停運行,如等待某資源爲可用(不包括處理機)或等待輸入/輸出完成。即便處理機空閒,該進程也不能運行。測試

4.進程同步的幾種機制

同步機制須要遵循的原則:

  1.空閒讓進,2.忙則等待,3.有限等待,4.讓權等待

經典的進程同步問題:生產者-消費者問題;哲學家進餐問題;讀者-寫者問題

進程同步的機制:硬件同步機制、信號量機制、管程機制

  硬件同步機制:關中斷

         利用Test-and-Set指令實現互斥(Test-and-Set TS指令:」測試並創建「)

         利用Swap指令實現進程互斥(該指令稱爲對換指令,用於交換兩個字的內容)

  信號量(Semaphores)機制

  管程機制

5.進程的通訊方式有哪些?

主要分爲:管道、系統IPC(包括消息隊列、信號量、共享存儲器)、SOCKET、遠程過程(函數)調用RPC

管道主要分爲:普通管道PIPE 、流管道(s_pipe)、命名管道(name_pipe)

# 管道( pipe ):管道是一種半雙工的通訊方式,數據只能單向流動,並且只能在具備親緣關係的進程間使用。進程的親緣關係一般是指父子進程關係。
# 有名管道 (named pipe) : 有名管道也是半雙工的通訊方式,可是它容許無親緣關係進程間的通訊。
# 信號量( semophore ) : 信號量是一個計數器,能夠用來控制多個進程對共享資源的訪問。它常做爲一種鎖機制,防止某進程正在訪問共享資源時,其餘進程也訪問該資源。所以,主要做爲進程間以及同一進程內不一樣線程之間的同步手段。
# 消息隊列( message queue ) : 消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。
# 信號 ( sinal ) : 信號是一種比較複雜的通訊方式,用於通知接收進程某個事件已經發生。
# 共享內存( shared memory ) :共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問。共享內存是最快的 IPC 方式,它是針對其餘進程間通訊方式運行效率低而專門設計的。它每每與其餘通訊機制,如信號兩,配合使用,來實現進程間的同步和通訊。
# 套接字( socket ) : 套解口也是一種進程間通訊機制,與其餘通訊機制不一樣的是,它可用於不一樣及其間的進程通訊。

 

6.請分別簡單說一說進程和線程以及它們的區別

  • 進程是具備必定功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源調度和分派的一個獨立單位。
  • 線程是進程的實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位,線程是輕量級的進程。
  • 一個進程能夠有多個線程,多個線程也能夠併發執行
 

7.線程同步的方式有哪些?

線程同步的方式:

  • 臨界區:經過對多線程的串行化來訪問公共資源或者一段代碼,速度快,適合控制數據訪問
  • 互斥量:採用互斥對象機制,只有擁有互斥對象的線程纔有訪問公共資源的權限,由於互斥對象只有一個,因此能夠保證公共資源不會同時被多個線程訪問
  • 信號量:它容許多個線程同一時刻訪問同一資源,可是須要限制同一時刻訪問此資源的最大線程數目。信號量對象對線程的同步方式與前面幾種方法不一樣,信號容許多個線程同時使用共享資源,這與操做系統中PV操做類似。
  • 事件(信號):經過通知操做的方式來保持多線程的同步,還能夠方便的實現多線程的優先級比較的操做
 
三.處理機調度與死鎖
8.用戶態和核心態

當程序運行在3級特權級上時,就能夠稱之爲運行在用戶態,由於這是最低特權級,是普通的用戶進程運行的特權級,大部分用戶直接面對的程序都是運行在用戶態;

反之,當程序運行在級特權級上時,就能夠稱之爲運行在內核態。

用戶態切換到內核態的3種方式:系統調用,異常,外圍設備的中斷

 

9.處理機調度的層次

  高級調度(長程調度或做業調度):調度對象是做業,主要用於多道批處理系統中,而在分時和實時系統中不設置高級調度

  低級調度(進程調度或短程調度):調度對象是進程,在多道批處理,分時和實時三種類型的OS中,都必須配置這級調度

  中級調度:內存調度,引入中級調度的主要目的是,提升內存利用率和系統吞吐量,中級調度實際上就是存儲器管理中的對換功能

 

10.死鎖

死鎖的定義:所謂死鎖就是一個進程集合中的多個進程由於競爭資源,而形成的互相等待現象。

死鎖的緣由:系統資源不足;多個進程的推動順序不合理

死鎖的必要條件:

  • 互斥條件(Mutual exclusion):資源不能被共享,只能由一個進程使用。
  • 請求與保持條件(Hold and wait):已經獲得資源的進程能夠再次申請新的資源。
  • 不可搶佔條件(No pre-emption):進程對於已經申請到的資源在使用完成以前不能夠被搶佔
  • 環路等待條件:發生死鎖的時候存在的一個 進程-資源 環形等待鏈

死鎖處理:

  1. 預防死鎖:破壞產生死鎖的4個必要條件中的一個或者多個;實現起來比較簡單,可是若是限制過於嚴格會下降系統資源利用率以及吞吐量

  2. 避免死鎖:在資源的動態分配中,防止系統進入不安全狀態(可能產生死鎖的狀態)-如銀行家算法

  3. 檢測死鎖:容許系統運行過程當中產生死鎖,在死鎖發生以後,採用必定的算法進行檢測,並肯定與死鎖相關的資源和進程,採起相關方法清除檢測到的死鎖。實現難度大

  4. 解除死鎖:與死鎖檢測配合,將系統從死鎖中解脫出來(撤銷進程或者剝奪資源)。對檢測到的和死鎖相關的進程以及資源,經過撤銷或者掛起的方式,釋放一些資源並將其分配給處於阻塞狀態的進程,使其轉變爲就緒態。實現難度大

11.進程調度算法 操做系統中進程調度策略有哪幾種?

FCFS(先來先服務),優先級,時間片輪轉,多級反饋

 

先來先服務調度算法FCFS:既能夠做爲做業調度算法也能夠做爲進程調度算法;按做業或者進程到達的前後順序依次調度;所以對於長做業比較有利;

短做業優先調度算法SJF:做業調度算法,算法從就緒隊列中選擇估計時間最短的做業進行處理,直到得出結果或者沒法繼續執行;缺點:不利於長做業;未考慮做業的重要性;運行時間是預估的,並不靠譜 ;

優先級調度算法PSA:基於做業的緊迫程度,由外部賦予做業相應的優先級,調度算法是根據該優先級進行調度的

高相應比優先調度算法HRNN:響應比=(等待時間+要求服務時間)/要求服務時間=響應時間/要求服務時間

 

時間片輪轉調度RR:按到達的前後對進程放入隊列中,而後給隊首進程分配CPU時間片,時間片用完以後計時器發出中斷,暫停當前進程並將其放到隊列尾部,循環 ;

多級反饋隊列調度算法:目前公認較好的調度算法;設置多個就緒隊列併爲每一個隊列設置不一樣的優先級,第一個隊列優先級最高,其他依次遞減。優先級越高的隊列分配的時間片越短,進程到達以後按FCFS放入第一個隊列,若是調度執行後沒有完成,那麼放到第二個隊列尾部等待調度,若是第二次調度仍然沒有完成,放入第三隊列尾部…。只有當前一個隊列爲空的時候纔會去調度下一個隊列的進程。

 

四.存儲器管理

 
12.內存連續分配

連續分配方式:單一連續分配:單道程序環境下

固定分區分配:多道程序系統,每一個分區的大小是固定的

動態分區分配

動態可重定位分區分配  算法四種方式

主要是指動態分區分配時所採用的幾種算法。
動態分區分配又稱爲可變分區分配,它是動態劃份內存的分區方法。這種分區方法不預先將內存劃分,而是在進程裝入內存時,根據進程的大小動態地創建分區,並使分區的大小正好適合進程的須要。所以系統中分區的大小和數目是可變的。

基於順序搜索的動態分區分配算法

  首次適應(First Fit)算法:空閒分區以地址遞增的次序連接。分配內存時順序查找,找到大小能知足要求的第一個空閒分區。

  最佳適應(Best Fit)算法:空閒分區按容量遞增造成分區鏈,找到第一個能知足要求的空閒分區。

  最壞適應(Worst Fit)算法:又稱最大適應(Largest Fit)算法,空閒分區以容量遞減的次序連接。找到第一個能知足要求的空閒分區,也就是挑選出最大的分區。

基於索引搜索的動態分區分配算法

  快速適應(quick fit)算法:又稱爲分類搜索法,是將空閒分區根據其容量大小進行分類,對於每一類具備相同容量的全部空閒分區,單獨設立一個空閒分區鏈表

             這樣系統中存在多個空閒分區鏈表

  夥伴系統(buddy system)

  哈希算法:構造一張以空閒分區大小爲關鍵字的哈希表,該表的每個表項記錄了一個對應的空閒分區鏈表表頭指針

13.基本分頁存儲管理方式

離散分配方式:將一個進程直接分散地裝入到許多不相鄰接的分區中,即可充分利用內存空間

離散分配分爲三種:分頁存儲管理方式、分段存儲管理方式、段頁式存儲管理方式

     分頁存儲管理方式:將用戶程序的地址空間分爲若干個固定大小的區域,稱爲」頁「或」頁面「。相應的,也將內存空間分爲若干個物理塊或頁框(frame),頁和塊的大小相同。這樣就能夠將用戶程序的任一頁放入任一物 理塊中,實現了離散分配。

把主存空間劃分爲大小相等且固定的塊,塊相對較小,做爲主存的基本單位。每一個進程也以塊爲單位進行劃分,進程在執行時,以塊爲單位逐個申請主存中的塊空間。

由於程序數據存儲在不一樣的頁面中,而頁面又離散的分佈在內存中,所以須要一個頁表來記錄邏輯地址和實際存儲地址之間的映射關係,以實現從頁號到物理塊號的映射。

因爲頁表也是存儲在內存中的,所以和不適用分頁管理的存儲方式相比,訪問分頁系統中內存數據須要兩次的內存訪問(一次是從內存中訪問頁表,從中找到指定的物理塊號,加上頁內偏移獲得實際物理地址;第二次就是根據第一次獲得的物理地址訪問內存取出數據)。


爲了減小兩次訪問內存致使的效率影響,分頁管理中引入了快表機制,包含快表機制的內存管理中,當要訪問內存數據的時候,首先將頁號在快表中查詢,若是查找到說明要訪問的頁表項在快表中,那麼直接從快表中讀取相應的物理塊號;若是沒有找到,那麼訪問內存中的頁表,從頁表中獲得物理地址,同時將頁表中的該映射表項添加到快表中(可能存在快表換出算法)。

在某些計算機中若是內存的邏輯地址很大,將會致使程序的頁表項會不少,而頁表在內存中是連續存放的,因此相應的就須要較大的連續內存空間。爲了解決這個問題,能夠採用兩級頁表或者多級頁表的方法,其中外層頁表一次性調入內存且連續存放,內層頁表離散存放。相應的訪問內存頁表的時候須要一次地址變換,訪問邏輯地址對應的物理地址的時候也須要一次地址變換,並且一共須要訪問內存3次才能夠讀取一次數據。

14.基本分段存儲管理方式

分頁是爲了提升內存利用率,而分段是爲了知足程序員在編寫代碼的時候的一些邏輯需求(好比數據共享,數據保護,動態連接等)。

分段內存管理當中,地址是二維的,一維是段號,一維是段內地址;其中每一個段的長度是不同的,並且每一個段內部都是從0開始編址的。因爲分段管理中,每一個段內部是連續內存分配,可是段和段之間是離散分配的,所以也存在一個邏輯地址到物理地址的映射關係,相應的就是段表機制。段表中的每個表項記錄了該段在內存中的起始地址和該段的長度。段表能夠放在內存中也能夠放在寄存器中。


訪問內存的時候根據段號和段表項的長度計算當前訪問段在段表中的位置,而後訪問段表,獲得該段的物理地址,根據該物理地址以及段內偏移量就能夠獲得須要訪問的內存。因爲也是兩次內存訪問,因此分段管理中一樣引入了聯想寄存器。

分段分頁方式的比較

頁是信息的物理單位,是出於系統內存利用率的角度提出的離散分配機制;段是信息的邏輯單位,每一個段含有一組意義完整的信息,是出於用戶角度提出的內存管理機制

頁的大小是固定的,由系統決定;段的大小是不肯定的,由用戶決定

 

五.虛擬存儲器

15.虛擬內存

若是存在一個程序,所需內存空間超過了計算機能夠提供的實際內存,那麼因爲該程序沒法裝入內存因此也就沒法運行。單純的增長物理內存只能解決一部分問題,可是仍然會出現沒法裝入單個或者沒法同時裝入多個程序的問題。可是能夠從邏輯的角度擴充內存容量,便可解決上述兩種問題。

基於局部性原理,在程序裝入時,能夠將程序的一部分裝入內存,而將其他部分留在外存,就能夠啓動程序執行。在程序執行過程當中,當所訪問的信息不在內存時,由操做系統將所須要的部分調入內存,而後繼續執行程序。另外一方面,操做系統將內存中暫時不使用的內容換出到外存上,從而騰出空間存放將要調入內存的信息。這樣,系統好像爲用戶提供了一個比實際內存大得多的存儲器,稱爲虛擬存儲器。

虛擬存儲器的特徵:

  1. 屢次性:一個做業能夠分屢次被調入內存。屢次性是虛擬存儲特有的屬性
  2. 對換性:做業運行過程當中存在換進換出的過程(換出暫時不用的數據換入須要的數據)
  3. 虛擬性:虛擬性體如今其從邏輯上擴充了內存的容量(能夠運行實際內存需求比物理內存大的應用程序)。虛擬性是虛擬存儲器的最重要特徵也是其最終目標。虛擬性創建在屢次性和對換性的基礎上行,屢次性和對換性又創建在離散分配的基礎上

虛擬存儲器的實現方法:分頁請求系統,請求分段系統

16.頁面置換算法(服務於分頁請求系統)

最佳(Optimal)置換算法:只具備理論意義的算法,用來評價其餘頁面置換算法。置換策略是將當前頁面中在將來最長時間內不會被訪問的頁置換出去。

先進先出(FIFO)置換算法:簡單粗暴的一種置換算法,沒有考慮頁面訪問頻率信息。每次淘汰最先調入的頁面。

最近最久未使用LRU(Least Recently Used)置換算法:算法賦予每一個頁面一個訪問字段,用來記錄上次頁面被訪問到如今所經歷的時間t,每次置換的時候把t值最大的頁面置換出去(實現方面能夠採用寄存器或者棧的方式實現)。

最少使用LFU(Least Frequently Used)置換算法:設置寄存器記錄頁面被訪問次數,每次置換的時候置換當前訪問次數最少的。

改進型Clock算法:在Clock算法的基礎上添加一個修改位,替換時根究訪問位和修改位綜合判斷。優先替換訪問位和修改位都是0的頁面,其次是訪問位爲0修改位爲1的頁面。

頁面緩衝算法(Page Buffering Algorithm,PBA)

相關文章
相關標籤/搜索