第四章——作業系統基本原理(6)

燕子去了發表於2024-05-07

第四章 作業系統基本原理

4.1 基本概念

計算機系統的層次結構:純硬體->作業系統->軟體/使用者

作業系統(Operating System,OS)是指控制和管理整個計算機系統的硬體和軟體資源,併合理地組織排程計算機的工作和資源的成分,以提供給使用者和其他軟體方便的介面和環境,它是計算機系統中最基本的系統軟體。
image

作業系統的功能和目標:

  • 作為系統資源的管理者
  • 向上層提供方便易用的服務
  • 作為最接近硬體的層次

作業系統的特徵:併發,共享,虛擬,非同步
併發:同一時間間隔發生,宏觀同時,微觀交替

作業系統的發展和分類:

  • 手工操作階段
  • 批處理階段
    • 單道批處理系統
    • 多道批處理系統(作業系統開始出現)
  • 分時作業系統:將CPU的工作劃分為很多很短的時間片
  • 實時作業系統:硬實時(導彈,銀行等)和軟實時()
  • 網路作業系統
  • 分散式作業系統
  • 個人計算機作業系統

4.2 程序管理

4.2.1 狀態管理圖

  1. 程序正在被建立時,它的狀態是“建立態”,在這個階段作業系統會為程序分配資源、初始化PCB
    程序被建立時作業系統會為該程序分配一個唯一的不重複的PID,作業系統記錄PID和程序所屬的使用者UID,還要記錄給程序分配了哪些資源,例如記憶體、IO裝置,記錄程序執行的情況,佔用CPU的時間,佔用磁碟網路的情況,這些資訊都被儲存在一個叫PCB的資料結構裡【程序 controller broker】
  2. 當程序建立完成後,便進入“就緒態”,處於就緒態的程序已經具備執行條件但由於沒有空閒CPU,就暫時不能執行。
  3. 如果一個程序此時在CPU上執行,那麼這個程序處於“執行態”,CPU會執行該程序對應的程式(執行指令序列)。
  4. 在程序執行的過程中,可能會請求等待某個事件的發生(如等待某種系統資源的分配,或者等待其他程序的響應)。在這個事件發生之前,程序無法繼續往下執行,此時作業系統會讓這個程序下CPU,並讓它進入“阻塞態”,當CPU空閒時又會選擇另一個“就緒態”程序上CPU執行。
  5. 一個程序可以執行exit系統呼叫,請求作業系統終止該程序。此時該程序會進“終止態”,作業系統會讓該程序下CPU,並回收記憶體空間等資源,最後還要回入收該程序的PCB。當終止程序的工作完成之後,這個程序就徹底消失了。

image

4.2.2 前驅圖

有向無環圖
前驅後繼

image

4.2.3 程序同步機制

程序具有非同步性的特徵。
非同步性是指各併發執行的程序以各自獨立的,不可預知的速度向前推進。
看一個例子:程序通訊一管道通訊
image
讀程序和寫程序併發地執行,由於併發必然導致非同步性,因此“寫資料”和“讀資料”兩個操作執行的先後順序是不確定的。而實際應用中又必須按照“寫資料->讀資料”的順序來執行的。
如何解決這種非同步問題,就是程序同步機制所討論的內容

同步亦稱直接制約關係,它是指為完成某種任務而建立的兩個或多個程序,這些程序因為需要在某些位置上協調它們的工作次序而產生的制約關係。程序間的直接制約關係就是源於它們之間的相互合作。

4.2.4 程序互斥機制

程序的“併發”需要“共享”的支援。各個併發執行的程序不可避免的需要共享一些系統資源(比如記憶體,又比如印表機、攝像頭這樣的I/0裝置)

我們把一個時間段內只允許一個程序使用的資源稱為臨界資源。許多物理裝置(比如攝像頭、印表機)就屬於臨界資源。此外還有許多變數、資料、記憶體緩衝區等都屬於臨界資源。

對臨界資源的訪問,必須互斥地進行。互斥,亦稱間接制約關係。程序互斥指當一個程序訪問某臨界資源時,另一個想要訪問該臨界資源的程序必須等待。當前訪問臨界資源的程序訪問結束,釋放該資源之後,另一個程序才能去訪問臨界資源。

對臨界資源的互斥訪問,可以在邏輯上分為如下四個部分:

do {
	entry section;   //進入區:負責檢查是否可進入臨界區,若可進入,則設定正在訪間臨界資源的標誌(可理解為“鎖”),以阻止其他程序同時進入臨界區
	critical section; // 臨界區:訪問臨界資源的那段程式碼
	exit section; //退出區:負貴解除正在訪問臨界資源的標誌(可理解為'解鎖")
	remainder section;  //剩餘區:做其他處理
}while(true)

注意:

臨界區是程序中訪問臨界資源的程式碼段。進入區和退出區是負責實現互斥的程式碼段。
臨界區也可稱為“臨界段”

如果一個程序暫時不能進入臨界區,那麼該程序是否應該一直佔著處理機?該程序有沒有可能一直進不了臨界區?
為了實現對臨界資源的互斥訪問,同時保證系統整體效能,需要遵循以下原則:

  1. 空閒讓進。臨界區空閒時,可以允許一個請求進入臨界區的程序立即進入臨界區
  2. 忙則等待。當己有程序進入臨界區時,其他試圖進入臨界區的程序必須等待,
  3. 有限等待。對請求訪問的程序,應保證能在有限時間內進入臨界區(保證不會飢餓),
  4. 讓權等待。當程序不能進入臨界區時,應立即釋放處理機,防止程序忙等待

4.2.5 訊號量機制

使用者程序可以透過使用作業系統提供的一對原語來對訊號量進行操作,從而很方便的實現了程序互斥、程序同步。

訊號量其實就是一個變數(可以是一個整數,也可以是更復雜的記錄型變數),可以用一個訊號量來表示系統中某種資源的數量,比如系統中只有一臺印表機,就可以設定一個初值為1的訊號量。

原語是一種特殊的程式段,其執行只能一氣呵成,不可被中斷。原語是由關中斷/開中斷指令實現的。軟體解決方案的主要問題是由“進入區的各種操作無法一氣呵成”,因此如果能把進入區、退出區的操作都用“原語”實現,使這些操作能“一氣呵成”就能避免問題。

一對原語: wait(S)原語和signal(S)原語,可以把原語理解為我們自己寫的函式,函式名分別為wait和signal,括號裡的訊號量S其實就是函式呼叫時傳入的一個引數。

wait、signal原語常簡稱為P、V操作(來自荷蘭語proberen和verhogen)。因此,做題的時候常把wait(S)、signal(S)兩個操作分別寫為P(S)、V(S)

訊號量機制的作用:

  • 實現程序互斥
  • 實現程序同步
  • 實現程序的前驅關係

不要一頭鑽到程式碼裡,要注意理解訊號量背後的含義:一個訊號量對應一種資源訊號量的值=這種資源的剩餘數量(訊號量的值如果小於0,說明此時有程序在等待這種資源)。

P(S):申請一個資源S,如果資源不夠就阻寒等待,即S-1。
V(S):釋放一個資源S,如果有程序在等待該資源,則喚醒一個程序,即S+1。

4.2.5 PV操作(6分左右)

4.2.5 PV操作實現前驅操作

4.2.6 死鎖

死鎖產生的必要條件:
產生死鎖必須同時滿足以下四個條件,只要其中任一條件不成立,死鎖就不會發生

  1. 互斥條件:只有對必須互斥使用的資源的爭搶才會導致死鎖(如哲學家的筷、子印表機裝置)。像記憶體、揚聲器這樣可以同時讓多個程序使用的資源是不會導致死鎖的(因為程序不用阻塞等待這種資源)。
  2. 不剝奪條件:程序所獲得的資源在未使用完之前,不能由其他程序強行奪走,只能主動釋放。
  3. 請求和保持條件:程序已經保持了至少一個資源,但又提出了新的資源請求,而該資源又被其他程序佔有,此時請求程序被阻塞,但又對自己已有的資源保持不放。
  4. 迴圈等待條件:存在一種程序資源的迴圈等待鏈,錢鏈中的每一個程序已獲得的資源同時被下一個程序所請求。

死鎖的處理策略:

  1. 預防死鎖:破壞死鎖產生的四個必要條件中的一個或幾個。
  2. 避免死鎖:用某種方法防止系統進入不安全狀態,從而避免死鎖(銀行家演算法)。
  3. 死鎖的檢測和解除。允許死鎖的發生,不過作業系統會負責檢測出死鎖的發生,然後採取某種措施解除死鎖。

某系統中有3個併發程序競爭資源R,每個程序都需要5個R,那麼至少有___個R,才能保證系統不會發生死鎖。

每個程序給4個,最後再加1個打破競爭,3*4+1=13

4.2.7 銀行家演算法

安全序列:指如果系統按照這種序列分配資源,則每個程序都能順利完成。只要能找出一個安全序列,系統就是安全狀態。當然,安全序列可能有多個。

如果分配了資源之後,系統中找不出任何一個安全序列,系統就進入了不安全狀態。這就意味著之後,可能所有程序都無法順利的執行下去。

如果系統處於安全狀態,就一定不會發生死鎖。如不安全狀態未必就是發生了死鎖,但發生死鎖時一定是在不安全狀態。

因此可以在資源分配之前預先判斷這次分配是否會導致系統進入不安全狀態,以此決定是否答應資源分配請求。這也是“銀行家演算法”的核心思想。

儲存管理

檔案管理

裝置管理

微核心作業系統

相關文章