第二章 操作系統 - 1、進程管理

一、進程管理 - 進程的概念

進程是程序在一個數據集合上運行的過程,它是系統進行資源分配和調度的一個獨立單位。

它由程序塊進程控制塊(PCB)數據塊三部分組成

進程和程序的區別:

進程是動態的,程序是靜態的。程序存儲在硬盤上一直都會存在,而進程的話,只有在程序運行的時候纔有,程序關閉時,進程就會消亡。

進程是程序的一次執行過程,沒有程序就沒有進程

程序是完成某個特定功能的一系列程序語句的集合,只要不被破壞就永遠存在。

程序是一個靜態的概念,而進程是一個動態的概念,它由創造而產生,完成任務後因撤銷而消亡;

進程是系統進行資源分配和調度的獨立單位,而程序不是。

這裏出題一般都是概念性的考察

二、進程管理 - 進程的狀態


重點掌握三態模型

1、進程的三態模型



等待又稱之爲:阻塞

狀態之間的切換

1、就緒 → 運行

就緒狀態就是所有準備工作的都做好了,只等待 CPU 的運行資源,得到了 CPU 的運行資源之後,就轉變成立了運行狀態

2、運行 → 等待

等待某一個事件的發生,比如:輸入設備的輸入等。等到對應事件發生之後,就會從等待狀態變爲就緒狀態

3、運行 → 就緒

有兩種情況會發生這種狀態的轉換:

1、CPU 時間片用完

2、有比當前的進程優先級更高的新進程進入。該進程只能釋放 CPU 資源,讓優先級更高的進程進行使用

4、等待 → 就緒

等待的事件發生完畢之後,進程就進入到了就緒狀態

總的來說,只有運行和就緒兩種狀態之間可以相互轉換,其他的狀態之間只能單向進行轉換。

2、進程的五態模型




五態模型到三態模型,多添加了兩個靜止狀態:靜止就緒狀態靜止阻塞狀態

一般從運行到靜止就緒,從活躍阻塞到靜止阻塞的掛起都是通過人爲進行操作的

三、進程管理 - 進程的同步與互斥

1、同步

同步是合作進程之間直接的制約關係




比如上圖,張三和李四要同時到達終點 B ,因爲李四速度快,所以在運行期間李四需要等待張三

2、互斥

互斥是一個進程或者多個進程之間,形成的間接的制約關係。

它們相互之間進行制約的原因,是因爲他們之間需要去爭奪臨界資源




比如上圖的獨木橋就是一個臨界資源,每一次只能有一個人通過,不能同時有兩個人使用獨木橋。

四、進程管理 - PV 操作

1、PV 操作的解釋

臨界資源:諸進程間需要互斥方式對其進行共享的資源,如打印機磁帶機等

臨界區:每個進程中訪問臨界資源的那段代碼稱爲臨界區

信號量:是一種特殊的變量

P是荷蘭語的 Passeren,V是荷蘭語的 Verhoog



P 操作是一個申請資源的操作

V 操作是一個是釋放資源的操作。

圖中的 S 代表信號量


P 操作:
進行資源申請操作時,先對信號量 S 進行減 1 的操作,然後對 S 進行判斷。

如果 S < 0 ,則說明此時沒有資源可以供使用,需要將進程進行掛起,使進程進入阻塞進程隊列進行等待。

如果 S > 0 ,則說明有資源可以供使用,進程就可以獲取資源,執行後面的步驟。

S 操作:
釋放資源時,對信號量 S 進行加 1 操作,然後對 S 進行判斷。

如果 S <= 0,說明阻塞進程隊列中有進程正在等待資源進行後續的操作,而此時系統將喚醒等待的進程,來申請資源進行之後的操作。

如果 S > 0 則說明可以進行後面的操作,不會形成阻塞。

2、互斥模型

多個進程對臨界資源進行爭奪。

例子:多個進程共享一臺打印機問題(互斥模型)




  比如只有一臺打印機,多個進程進行共享時,必須進行資源的爭奪。因爲只有一臺打印機,因此只有等上一個進程使用完畢之後,下一個進程才能進行使用,因此在這種情況下,P( S ) 操作和 V( S ) 是需要成對出現的。

3、同步模型




該模型的前提是單緩衝區。模型中存在兩個信號量 S1 和 S2 。
其中初始值爲:S1 = 1,S2 = 0 。

首先生產者生一個產品,需要對信號量 S1 進行減 1 操作 P( S1 ),當產品生產完成以後,送到緩衝區後,對信號量 S2 進行加 1 操作。

而在消費者這端,首先對信號量 S2 進行判斷,如果不爲 0 ,則說明緩衝區中有產品可以進行消費。從緩衝區取出產品,將信號量 S2 進行減 1操作 P( S2 ) ,此時進行消費,將信號量 S1 進行加 1 操作。

該模型中通過 S1 和 S2 兩個信號量來進行同步互斥的控制。其中信號量 S1 用來阻塞控制生產者,而信號量 S2 用來阻塞控制消費者。

生產者在生產時,需要先判斷信號量 S1 是否爲 0,如果爲 0,則說明市場上有產品,此時不需要進行生產,生產者被阻塞

而消費者在消費完成以後,通過對信號量 S1 進行加 1 操作,從而可以喚醒生產者進行生產。

同樣生產者在生產完成以後,將產品放入緩衝區中,需要對信號量 S2 進行加 1 的操作,從而去喚醒消費者此時可以從緩衝區中取產品。

而消費者從緩衝區中取出產品後,需要對緩衝區的信號量 S2 進行減 1 的操作。如果信號量 S2 爲 0,則說明此時緩衝區中沒有產品可供取出,消費者被阻塞


習題 1:



分析:

先從最簡單的情況開始分析,因爲只有一個收銀員,因此從收銀員這一端開始分析。並且信號量 S1 和 S2 代表的是沒一個需要進行買單的顧客。

在沒有人來付款的時候,收銀員是處於一個阻塞的狀態,因此 b1 是一個 P(減)的操作。完成收費以後,需要叫下一個顧客來進行付款操作,需要對某一個進行增加的操作,因此 b2 是一個 V (加)的操作。

通過這樣分析可以排除第二空的 B 選項。因爲收銀員是要處理第一個人的付款操作,因此 b1 是 P( S1 ),只有有人需要進行買單,收銀員纔開始工作,因此 b1 是完成了對於收銀員的阻塞操作。而在完成付款之後需要喚醒下一個消費者,因此 b2 是 V( S2 )。

對應的購書者的進程,當第一個消費者需要進行買單時,需要喚醒收銀員,因此需要對信號量 S1 進行加的操作,即:a1 是 V( S1 ),在判斷完成了付款之後,購書者才能進行通過 a2 P( S2 )的操作離開書店。

a1 和 a2 兩個操作是爲了控制購書者在完成了所有的付款操作之後才能離開書店,因此 a2 操作是阻塞了購書者。

在這個模型中 a1 和 a2 對應的是一對 PV 操作,b1 和 b2 對應的是另外一對 PV 操作。

因此答案是 A 和 C


習題 2:
通過前趨圖來考察 PV 操作的應用。前趨圖中每一個圓圈代表的是一個進程,箭頭代表上一個進程驅動下一個進程。

這種題目的突破口是尋找入度最多的那個進程,一般入度最多的,它一般是需要進行 P 操作。如下圖:




該題中進程 D 的入度最多,因此是該題的突破口。因此進程 D 需要做的是 P 操作。對應的是 P(Sa)、 P(Sb)、 P(Sc)。

因此對應的 A、B、C 操作是進行 V 操作。

而最後的操作 E,則需要在 D 完成之後才能進行,因此是 P 操作。

五、死鎖問題

1、死鎖的概念

進程管理是操作系統的核心,但如果設計不當,就會出現死鎖的問題。

如果一個進程在等待件不可能發生的事,則進程就死鎖了。而如果一個或多個進程產生死鎖,就會造成系統死鎖。

例題:

系統有5個進程:A、B、C、D、E 。這 5 個進程都需要 4 個系統資源。如果系統至少有多少個資源,則不可能發生死鎖。

解析:

系統不會產生死鎖的情況是:

給每一個進程分配它所需要的資源少一個,然後系統再留有一個資源,這樣系統就不會發生死鎖。

針對上面的題目,先對 A、B、C、D、E 每一個分配 3 個資源,然後系統再留有一個資源,一共是 15 + 1 = 16 個資源,當至少有 16 個資源時,系統就不會發生死鎖。

2、死鎖形成的四個必要條件



1、進程間形成了互斥,只有互斥纔會產生資源的爭奪。

2、保持和等待資源,從而就會產生進程的掛起。

3、進程已經佔有的資源在進程完成任務之前不會被剝奪,不會釋放給其他的進程。

4、環路等待,形成一條迴路。

3、死鎖的預防:

打破四大條件

4、死鎖的避免

有序資源分配法銀行家算法

a. 有序資源分配法:
按照順序,每一個進程需要多少資源就對應分配多少資源,這樣可以避免死鎖,但是資源浪費比較嚴重。

比如上面的例子,A、B、C、D、E 五個進程,我們按照順序,對應給每個進程分配對應所需要的 4 個資源,這樣就可以避免這五個進程產生死鎖,但是這種分配方式也會造成資源的浪費。


b. 銀行家算法:
分配資源的原則:

  • 當一個進程對資源的最大需求量不超過系統中的資源數時可以接納該進程

  • 進程可以分期請求資源,但請求的總數不能超過最大需求量。

  • 當系統現有的資源不能滿足進程尚需資源數時,對進程的請求可以推遲分配,但總能使進程在有限的時間裏得到資源。

銀行家算法例子:

假設系統中有三類互斥資源 R1、、R2、R3,可用資源分別是9、8、5,在 T0時刻系統中有 P1、P2、P3、P4和P5 五個進程,這些進程對資源的最大需求量和已分配資源數如下所示,如果進程按()序列執行,那麼系統狀態是安全的。


分析:

首先統計出每一個進程已經分配了對應多少的資源,以及對應的資源還剩多少。

對照每一個進程還需要的資源數,可以知道剩餘的資源數滿足進程 P 2 接下倆的需求。

等 P 2 執行完成,釋放資源之後,系統擁有的資源數對應爲:4、2、1 ,此時滿足進程 P 4 的資源需求,可以讓 P 4 進行執行。

P 4 執行完成以後,系統擁有的資源數對應爲:5、4、1,此時滿足進程 P 1 和 P 5 的資源需求,可以選擇其中一個進程進行執行。

所以安全的執行順序爲:

P2 → P4 → P1 → P5 → P3 或者是 P2 → P4 → P5 → P1 → P3

P1 和 P5 可以調換執行的順序,因此選 B

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章