作業系統原理 面試知識點總結

2021-10-09 02:25:17 字數 3855 閱讀 1919

程序的狀態基本可以分為以下3類:

狀態說明

就緒態程序已經具備執行條件,但是cpu還沒有分配過來;

執行態程序占用cpu,並在cpu上執行;

阻塞態程序因等待某件事發生而暫時不能執行;

程序在一生中,都處於上述3種狀態之一。

3種狀態轉換圖:

按照數學推理,上述三個狀態如果可以互相轉換的話,應該有6種情況,但是實際上只有4種,其餘2種不可能發生。

首先介紹可以發生的4種轉換情況,見下表。

狀態轉換

說明就緒態---->執行態

執行的程序的時間片用完,排程就轉到就緒佇列中選擇合適的程序分配給cpu。

執行態---->就緒態

這是由於排程引起的,當程序占用cpu的時間過長,會被轉為就緒態。

執行態---->阻塞態

發生了i/o請求或等待某件事的發生。

阻塞態---->就緒態

程序所等待的事件發生,就進入就緒佇列。

不可能發生的轉換情況

狀態轉換

說明阻塞態---->執行態

即使給阻塞程序分配cpu,也無法執行,作業系統載進行排程時不會載阻塞佇列進行挑選,其排程的選擇物件為就緒佇列。

就緒態---->阻塞態

因為就緒態根本就沒有被執行,何來進入阻塞態。

以上介紹的是程序的基本狀態,但是在作業系統的具體實現中,細化為以下5種狀態。見下表。

狀態說明

1.可執行態

執行態和就緒態的合併,表示程序正在執行或準備執行,linux 中使用task_running巨集表示此狀態。

2.淺度睡眠態

又名可中斷睡眠狀態。程序正在睡眠(被阻塞),等待資源到來時被喚醒,也可以通過其他程序訊號或時鐘中斷喚醒。喚醒後進入就緒佇列。linux 使用task_interruptible巨集表示此狀態。

3.深度睡眠態

又名不可中斷睡眠狀態。其和淺度睡眠基本類似,但有一點就是不可被其它程序訊號或時鐘中斷喚醒。該狀態的程序只能用wake_up()函式喚醒。linux 使用task_uninterruptible巨集表示此狀態。

4.暫停狀態

程序暫停執行接受某種處理。如正在接受除錯的程序處於這種狀態。linux 使用task_stopped巨集表示此狀態。

5.僵死狀態

程序已經結束但未釋放pcb。linux 使用task_zombie巨集表示此狀態。

linux程序間狀態轉換和核心呼叫**:

互斥:是指某一資源同時只允許乙個訪問者對其訪問,具有唯一性和排他性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。

同步:是指在互斥的基礎上(大多數情況),通過其他機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源。

簡單的說:同步體現的是一種協作性,呼哧體現的是一種排他性。

分類說明

管道(匿名管道、命名管道)

管道的實質是乙個核心緩衝區,管道的作用正如其名,需要通訊的兩個程序在管道的兩端,程序利用管道傳遞資訊。管道對於管道兩端的程序而言,就是乙個檔案,但是這個檔案比較特殊,它不屬於檔案系統並且只存在於記憶體中。

訊號訊號是軟體層次上對中斷機制的一種模擬,是一種非同步通訊方式,程序不必通過任何操作來等待訊號的到達。訊號可以在使用者空間程序和核心之間直接互動,核心可以利用訊號來通知使用者空間的程序發生了哪些系統事件。

訊號量訊號量實質上就是乙個標識可用資源數量的計數器,它的值總是非負整數。而只有0和1兩種取值的訊號量叫做二進位制訊號量(或二值訊號量),可用用來標識某個資源是否可用。主要作為程序間以及同一程序內不同執行緒之間的同步手段。

訊息佇列

訊息佇列是訊息的鍊錶,具有特定的格,存放在記憶體中並由訊息佇列識別符號標識,並且允許乙個或多個程序向它寫入與讀取訊息。訊息佇列克服了訊號傳遞訊息少,管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

共享記憶體

使得多個程序可以可以直接讀寫同一塊記憶體空間,是針對其他通訊機制執行效率較低而設計的。

套接字套接字是更為基礎的程序間通訊機制,與其他方式不同的是,套接字可用於不同機器之間的程序間通訊。

**先來先服務(fcfs,first-come-frist-served):**此演算法的原則是按照作業到達後備作業佇列(或程序進入就緒佇列)的先後次序來選擇作業(或程序)。

**短作業優先(sjf,shortest process next):**這種排程演算法主要用於作業排程,它從作業後備佇列中挑選所需執行時間(估計值)最短的作業進入主存執行。

**時間片輪轉排程演算法(rr,round-robin):**當某個程序執行的時間片用完時,排程程式便停止該程序的執行,並將它送入就緒佇列的末尾,等待分配下一時間片再執行。然後把處理機分配給就緒佇列中新的隊首程序,同時也讓它執行乙個時間片。這樣就可以保證就緒佇列中的所有程序,在一給定的時間內,均能獲得時間片處理機執行時間。

**高響應比優先(hrrn,highest response ratio next):**按照高響應比((已等待時間+要求執行時間)/ 要求執行時間)優先的原則,在每次選擇作業投入執行時,先計算此時後備作業佇列中每個作業的響應比rp然後選擇其值最大的作業投入執行。

優先權(priority)排程演算法:按照程序的優先權大小來排程,使高優先權程序得到優先處理的排程策略稱為優先權排程演算法。注意:優先數越多,優先權越小。

**多級佇列排程演算法:**多佇列排程是根據作業的性質和型別的不同,將就緒佇列再分為若干個子佇列,所有的作業(或程序)按其性質排入相應的佇列中,而不同的就緒佇列採用不同的排程演算法。

什麼是死鎖:在2個或多個併發程序中,如果每個程序持有某有資源而又都等待別的程序釋放它們現在保持的資源,在未改變這種狀態之前都不能向前推進,稱這一組程序產生了死鎖。通俗地講,就是2個或多個程序被無限期地阻塞、相互等待的一種狀態。

死鎖產生的原因:系統資源不足;程序推進順序非法。

產生死鎖的必要條件:(以下4個條件有乙個不成立,就不會產生死鎖)

如何預防死鎖(靜態策略):破壞產生死鎖的四個必要條件之一即可。

如何避免死鎖(動態策略):它不限制程序有關申請資源的命令,而是對程序所發出的每乙個申請資源命令加以動態地檢查,並根據檢查結果決定是否進行資源分配。就是說,在資源分配過程中若**有發生死鎖的可能性,則加以避免。這種方法的關鍵是確定資源分配的安全性。

採用的常用方法:

安全序列。安全序列是這樣組成的:若對於每乙個程序pi,它需要的附加資源可以被系統中當前可用資源加上所有程序pj當前占有資源之和所滿足,則為乙個安全序列,這時系統處於安全狀態,不會進入死鎖狀態。

銀行家演算法。銀行家演算法允許死鎖必要條件中的互斥條件、不可剝奪、占有且等待條件的存在。該方法允許程序動態地申請資源,系統在進行資源分配之前,先計算資源分配的安全性。若此次分配不會導致系統從安全狀態向不安全狀態轉換,便可將資源分配給程序;否則不分配資源,程序必須阻塞等待。從而避免發生死鎖。

如何解除死鎖

強制性地從系統中撤銷乙個或多個死鎖的程序以斷開迴圈等待鏈,並收回分配給終止程序的全部資源功剩下的程序使用。

使用乙個有效的掛起和解除機構來掛起一些死鎖的程序,其實質是從被掛起的程序那裡搶占資源以解除死鎖。

作業系統知識點總結

共享 系統中的資源可以被記憶體中多個併發執行的進執行緒共同使用 虛擬 通過時分復用 如分時系統 以及空分復用 如虛擬記憶體 技術實現把乙個物理實體虛擬為多個 非同步 系統中的程序是以走走停停的方式執行的,且以一種不可預知的速度推進 儲存器管理 或者記憶體管理 記憶體分配,記憶體保護,位址對映,記憶體...

作業系統知識點總結(十七)檔案系統知識點總結

引導控制塊 boot control block 包括系統從該分割槽引導作業系統所需要的資訊。如果 磁碟沒有作業系統,那麼這塊的內容為空。它通常為分割槽的第一塊。ufs稱之為引導塊 boot block ntfs 稱之為分割槽引導扇區 partition boot sector 分割槽控制塊 par...

作業系統知識點

tcp的擁塞控制由4個核心演算法組成。https 把資料進行非對稱加密,然後客戶端從第三方伺服器獲取證書 加密後的公鑰 http完整請求 建立tcp連線,傳送http命令請求頭,web伺服器應答,關閉tcp連線 tcp 三次握手 缺陷 洪氾攻擊 解決辦法 四次揮手 長連線 短連線 程序 執行緒 併發...