第2章進程管理_第1頁
第2章進程管理_第2頁
第2章進程管理_第3頁
第2章進程管理_第4頁
第2章進程管理_第5頁
已閱讀5頁,還剩229頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第二章進 程 管 理 第二章進 程 管 理 2.1進程的基本概念進程的基本概念 2.2進程控制進程控制 2.3進程同步進程同步 2.4經典進程的同步問題經典進程的同步問題 2.5 進程通信進程通信 2.6線程線程 第二章進 程 管 理 2.1進程的基本概念進程的基本概念 2.1.1程序的順序執(zhí)行及其特征程序的順序執(zhí)行及其特征1. 程序的順序執(zhí)行程序的順序執(zhí)行通??梢园岩粋€應用程序分成若干個程序段,在各程序段之間,必須按照某種先后次序順序執(zhí)行,僅當前一操作(程序段)執(zhí)行完后,才能執(zhí)行后繼操作。例如,在進行計算時,總須先輸入用戶的程序和數(shù)據(jù),然后進行計算,最后才能打印計算結果。這里,我們用結點(N

2、ode)代表各程序段的操作(在圖2-1中用圓圈表示),其中,I代表輸入操作,C代表計算操作,P為打印操作;另外,用箭頭指示操作的先后次序。這樣,上述的三個程序段的執(zhí)行順序可示于圖2-1(a)中。對一個程序段中的多條語句來說,也有一個執(zhí)行順序問題,例如對于下述三條語句的程序段: 第二章進 程 管 理 S1: a:=x+y;S2: b:=a-5; S3: c:=b+1; 其中,語句S2必須在語句S1之后(即a被賦值)才能執(zhí)行;同樣,語句S3也只能在b被賦值后才能執(zhí)行。因此,這三條語句應按圖2-1(b)所示的順序執(zhí)行。 第二章進 程 管 理 圖 2-1程序的順序執(zhí)行 (a) 程序的順序執(zhí)行(b) 三

3、條語句的順序執(zhí)行I1C1P1I2C2P2S1S2S3第二章進 程 管 理 2. 程序順序執(zhí)行時的特征程序順序執(zhí)行時的特征(1) 順序性:處理機的操作嚴格按照程序所規(guī)定的順序執(zhí)行,即每一操作必須在上一個操作結束之后開始。(2) 封閉性:程序是在封閉的環(huán)境下執(zhí)行的,即程序運行時獨占全機資源,資源的狀態(tài)(除初始狀態(tài)外)只有本程序才能改變它。程序一旦開始執(zhí)行,其執(zhí)行結果不受外界因素影響。(3) 可再現(xiàn)性:只要程序執(zhí)行時的環(huán)境和初始條件相同,當程序重復執(zhí)行時,不論它是從頭到尾不停頓地執(zhí)行,還是“停停走走”地執(zhí)行,都將獲得相同的結果。程序順序執(zhí)行時的特性,為程序員檢測和校正程序的錯誤帶來了很大的方便。 第

4、二章進 程 管 理 2.1.2前趨圖前趨圖前趨圖(Precedence Graph)是一個有向無循環(huán)圖,記為DAG(Directed Acyclic Graph),用于描述進程之間執(zhí)行的前后關系。圖中的每個結點可用于描述一個程序段或進程,乃至一條語句;結點間的有向邊則用于表示兩個結點之間存在的偏序(Partial Order,亦稱偏序關系)或前趨關系(Precedence Relation)“”。 第二章進 程 管 理 =(Pi,Pj)|Pi must complete before Pj may start,如果(Pi,Pj),可寫成PiPj,稱Pi是Pj的直接前趨,而稱Pj是Pi的直接后繼

5、。在前趨圖中,把沒有前趨的結點稱為初始結點(Initial Node),把沒有后繼的結點稱為終止結點(Final Node)。此外,每個結點還具有一個重量(Weight),用于表示該結點所含有的程序量或結點的執(zhí)行時間。在圖2-1(a)和2-1(b)中分別存在著這樣的前趨關系: IiCiPi S1S2S3 和 第二章進 程 管 理 對于圖2-2(a)所示的前趨圖,存在下述前趨關系: P1P2,P1P3,P1P4,P2P5,P3P5,P4P6,P4P7,P5P8,P6P8,P7P9,P8P9或表示為:P=P1,P2,P3,P4,P5,P6,P7,P8,P9=(P1,P2),(P1,P3),(P1,

6、P4),(P2,P5),(P3,P5),(P4,P6),(P4,P7),(P5,P8),(P6,P8),(P7,P9),(P8,P9) 應當注意,前趨圖中必須不存在循環(huán),但在圖2-2(b)中卻有著下述的前趨關系: S2S3,S3S2 第二章進 程 管 理 圖 2-2前趨圖 P1P3P8P9P4P2P5P6P7S1S2S3(a) 具有九個結點的前趨圖(b) 具有循環(huán)的圖第二章進 程 管 理 2.1.3程序的并發(fā)執(zhí)行及其特征程序的并發(fā)執(zhí)行及其特征1程序的并發(fā)執(zhí)行程序的并發(fā)執(zhí)行在圖2-1中的輸入程序、計算程序和打印程序三者之間,存在著IiCiPi這樣的前趨關系,以至對一個作業(yè)的輸入、計算和打印三個操

7、作,必須順序執(zhí)行,但并不存在PiIi+1的關系,因而在對一批程序進行處理時,可使它們并發(fā)執(zhí)行。例如,輸入程序在輸入第一個程序后,在計算程序對該程序進行計算的同時,可由輸入程序再輸入第二個程序,從而使第一個程序的計算操作可與第二個程序的輸入操作并發(fā)執(zhí)行。一般來說,輸入程序在輸入第i+1個程序時,計算程序可能正在對第i個程序進行計算,而打印程序正在打印第i-1個程序的計算結果。圖2-3示出了輸入、計算和打印這三個程序對一批作業(yè)進行處理的情況。 第二章進 程 管 理 圖2-3 并發(fā)執(zhí)行時的前趨圖 P1P2P3P4I1I2I3I4C1C2C3C4第二章進 程 管 理 在該例中存在下述前趨關系: IiC

8、i,IiIi+1,CiPi,CiCi+1,PiPi+1 而Ii+1和Ci及Pi-1是重迭的,亦即在Pi-1和Ci以及Ii+1之間,可以并發(fā)執(zhí)行。對于具有下述四條語句的程序段:S1: a:=x+2S2: b:=y+4S3: c:=a+bS4: d:=c+b 第二章進 程 管 理 圖 2-4四條語句的前趨關系 S1S2S3S4第二章進 程 管 理 2 2程序并發(fā)執(zhí)行時的特征程序并發(fā)執(zhí)行時的特征1) 間斷性程序在并發(fā)執(zhí)行時,由于它們共享系統(tǒng)資源,以及為完成同一項任務而相互合作,致使在這些并發(fā)執(zhí)行的程序之間,形成了相互制約的關系。例如,圖2-3 中的I、C和P是三個相互合作的程序,當計算程序完成Ci1

9、的計算后,如果輸入程序I尚未完成Ii的處理,則計算程序就無法進行Ci的處理,致使計算程序必須暫停運行。又如,當打印程序完成Pi的打印后,若計算程序尚未完成Ci1的計算,則打印程序就無法對Ci1的計算結果進行打印。一旦使程序暫停的因素消失后(如Ii已處理完成),計算程序便可恢復執(zhí)行對Ci的處理。簡而言之,相互制約將導致并發(fā)程序具有“執(zhí)行暫停執(zhí)行”這種間斷性的活動規(guī)律。 第二章進 程 管 理 2) 失去封閉性程序在并發(fā)執(zhí)行時,是多個程序共享系統(tǒng)中的各種資源,因而這些資源的狀態(tài)將由多個程序來改變,致使程序的運行失去了封閉性。這樣,某程序在執(zhí)行時,必然會受到其它程序的影響。例如,當處理機這一資源已被某

10、個程序占有時,另一程序必須等待。 第二章進 程 管 理 3) 不可再現(xiàn)性程序在并發(fā)執(zhí)行時,由于失去了封閉性,也將導致其再失去可再現(xiàn)性。例如,有兩個循環(huán)程序A和B,它們共享一個變量N。程序A每執(zhí)行一次時,都要做N:=N+1操作;程序B每執(zhí)行一次時,都要執(zhí)行Print(N)操作,然后再將N置成“0”。程序A和B以不同的速度運行。這樣,可能出現(xiàn)下述三種情況(假定某時刻變量N的值為n)。 第二章進 程 管 理 (1) N:=N+1在Print(N)和N:=0之前,此時得到的N值分別為n+1,n+1,0。(2) N:=N+1在Print(N)和N:=0之后,此時得到的N值分別為n,0,1。(3) N:=

11、N+1在Print(N)和N:=0之間,此時得到的N值分別為n,n+1,0。上述情況說明,程序在并發(fā)執(zhí)行時,由于失去了封閉性,其計算結果已與并發(fā)程序的執(zhí)行速度有關,從而使程序的執(zhí)行失去了可再現(xiàn)性,亦即,程序經過多次執(zhí)行后,雖然它們執(zhí)行時的環(huán)境和初始條件相同,但得到的結果卻各不相同。 第二章進 程 管 理 2.1.42.1.4進程的特征與狀態(tài)進程的特征與狀態(tài)1. 1. 進程的特征和定義進程的特征和定義在多道程序環(huán)境下,程序的執(zhí)行屬于并發(fā)執(zhí)行,此時它們將失去其封閉性,并具有間斷性及不可再現(xiàn)性的特征。這決定了通常的程序是不能參與并發(fā)執(zhí)行的,因為程序執(zhí)行的結果是不可再現(xiàn)的。這樣,程序的運行也就失去了意

12、義。為使程序能并發(fā)執(zhí)行,且為了對并發(fā)執(zhí)行的程序加以描述和控制,人們引入了“進程”的概念。為了能較深刻地了解什么是進程,我們將先對進程的特征加以描述。 第二章進 程 管 理 1) 結構特征通常的程序是不能并發(fā)執(zhí)行的。為使程序(含數(shù)據(jù))能獨立運行,應為之配置一進程控制塊,即PCB(Process Control Block);而由程序段、相關的數(shù)據(jù)段和PCB三部分便構成了進程實體。在早期的UNIX版本中,把這三部分總稱為“進程映像”。值得指出的是,在許多情況下所說的進程,實際上是指進程實體,例如,所謂創(chuàng)建進程,實質上是創(chuàng)建進程實體中的PCB;而撤消進程,實質上是撤消進程的PCB,本教材中也是如此。

13、 第二章進 程 管 理 2) 動態(tài)性進程的實質是進程實體的一次執(zhí)行過程,因此,動態(tài)性是進程的最基本的特征。動態(tài)性還表現(xiàn)在:“它由創(chuàng)建而產生,由調度而執(zhí)行,由撤消而消亡”??梢?,進程實體有一定的生命期,而程序則只是一組有序指令的集合,并存放于某種介質上,其本身并不具有運動的含義,因而是靜態(tài)的。 第二章進 程 管 理 3) 并發(fā)性這是指多個進程實體同存于內存中,且能在一段時間內同時運行。并發(fā)性是進程的重要特征,同時也成為OS的重要特征。引入進程的目的也正是為了使其進程實體能和其它進程實體并發(fā)執(zhí)行;而程序(沒有建立PCB)是不能并發(fā)執(zhí)行的。4) 獨立性在傳統(tǒng)的OS中,獨立性是指進程實體是一個能獨立運

14、行、獨立分配資源和獨立接受調度的基本單位。凡未建立PCB的程序都不能作為一個獨立的單位參與運行。 第二章進 程 管 理 5) 異步性這是指進程按各自獨立的、 不可預知的速度向前推進,或說進程實體按異步方式運行?,F(xiàn)在我們再來討論進程的定義。曾有許多人從不同的角度對進程下過定義,其中較典型的進程定義有:(1) 進程是程序的一次執(zhí)行。(2) 進程是一個程序及其數(shù)據(jù)在處理機上順序執(zhí)行時所發(fā)生的活動。(3) 進程是程序在一個數(shù)據(jù)集合上運行的過程,它是系統(tǒng)進行資源分配和調度的一個獨立單位。 第二章進 程 管 理 2. 2. 進程的三種基本狀態(tài)進程的三種基本狀態(tài)進程執(zhí)行時的間斷性決定了進程可能具有多種狀態(tài)。

15、事實上,運行中的進程可能具有以下三種基本狀態(tài)。1) 就緒(Ready)狀態(tài)當進程已分配到除CPU以外的所有必要資源后,只要再獲得CPU,便可立即執(zhí)行,進程這時的狀態(tài)稱為就緒狀態(tài)。在一個系統(tǒng)中處于就緒狀態(tài)的進程可能有多個,通常將它們排成一個隊列,稱為就緒隊列。 第二章進 程 管 理 2) 執(zhí)行狀態(tài)進程已獲得CPU,其程序正在執(zhí)行。在單處理機系統(tǒng)中,只有一個進程處于執(zhí)行狀態(tài); 在多處理機系統(tǒng)中,則有多個進程處于執(zhí)行狀態(tài)。3) 阻塞狀態(tài)正在執(zhí)行的進程由于發(fā)生某事件而暫時無法繼續(xù)執(zhí)行時,便放棄處理機而處于暫停狀態(tài),亦即進程的執(zhí)行受到阻塞,把這種暫停狀態(tài)稱為阻塞狀態(tài),有時也稱為等待狀態(tài)或封鎖狀態(tài)。致使進

16、程阻塞的典型事件有:請求I/O,申請緩沖空間等。通常將這種處于阻塞狀態(tài)的進程也排成一個隊列。有的系統(tǒng)則根據(jù)阻塞原因的不同而把處于阻塞狀態(tài)的進程排成多個隊列。 第二章進 程 管 理 圖2-5 進程的三種基本狀態(tài)及其轉換 就緒阻塞執(zhí)行時間片完進程調度I/O完成I/O請求第二章進 程 管 理 3. 3. 掛起狀態(tài)掛起狀態(tài)1) 引入掛起狀態(tài)的原因在不少系統(tǒng)中進程只有上述三種狀態(tài),但在另一些系統(tǒng)中,又增加了一些新狀態(tài),最重要的是掛起狀態(tài)。引入掛起狀態(tài)的原因有:(1) 終端用戶的請求。當終端用戶在自己的程序運行期間發(fā)現(xiàn)有可疑問題時,希望暫時使自己的程序靜止下來。亦即,使正在執(zhí)行的進程暫停執(zhí)行;若此時用戶進

17、程正處于就緒狀態(tài)而未執(zhí)行,則該進程暫不接受調度,以便用戶研究其執(zhí)行情況或對程序進行修改。我們把這種靜止狀態(tài)稱為掛起狀態(tài)。 第二章進 程 管 理 (2) 父進程請求。有時父進程希望掛起自己的某個子進程,以便考查和修改該子進程,或者協(xié)調各子進程間的活動。(3) 負荷調節(jié)的需要。當實時系統(tǒng)中的工作負荷較重,已可能影響到對實時任務的控制時,可由系統(tǒng)把一些不重要的進程掛起,以保證系統(tǒng)能正常運行。(4) 操作系統(tǒng)的需要。操作系統(tǒng)有時希望掛起某些進程,以便檢查運行中的資源使用情況或進行記賬。 第二章進 程 管 理 2) 進程狀態(tài)的轉換在引入掛起狀態(tài)后,又將增加從掛起狀態(tài)(又稱為靜止狀態(tài))到非掛起狀態(tài)(又稱為

18、活動狀態(tài))的轉換;或者相反。可有以下幾種情況:(1) 活動就緒靜止就緒。當進程處于未被掛起的就緒狀態(tài)時,稱此為活動就緒狀態(tài),表示為Readya。當用掛起原語Suspend將該進程掛起后,該進程便轉變?yōu)殪o止就緒狀態(tài),表示為Readys,處于Readys狀態(tài)的進程不再被調度執(zhí)行。 第二章進 程 管 理 圖 2-6具有掛起狀態(tài)的進程狀態(tài)圖 活動就緒靜止就緒執(zhí)行掛起激活釋放掛起活動阻塞靜止阻塞掛起激活釋放請求I/O調度第二章進 程 管 理 (2) 活動阻塞靜止阻塞。當進程處于未被掛起的阻塞狀態(tài)時,稱它是處于活動阻塞狀態(tài),表示為Blockeda。當用Suspend原語將它掛起后,進程便轉變?yōu)殪o止阻塞狀態(tài)

19、,表示為Blockeds。處于該狀態(tài)的進程在其所期待的事件出現(xiàn)后,將從靜止阻塞變?yōu)殪o止就緒。(3) 靜止就緒活動就緒。處于Readys狀態(tài)的進程,若用激活原語Active激活后,該進程將轉變?yōu)镽eadya狀態(tài)。(4) 靜止阻塞活動阻塞。處于Blockeds狀態(tài)的進程,若用激活原語Active激活后,該進程將轉變?yōu)锽lockeda狀態(tài)。圖2-6示出了具有掛起狀態(tài)的進程狀態(tài)圖。 第二章進 程 管 理 4 4創(chuàng)建狀態(tài)和終止狀態(tài)創(chuàng)建狀態(tài)和終止狀態(tài)1) 創(chuàng)建狀態(tài)創(chuàng)建一個進程一般要通過兩個步驟:首先,為一個新進程創(chuàng)建PCB,并填寫必要的管理信息;其次,把該進程轉入就緒狀態(tài)并插入就緒隊列之中。當一個新進程被

20、創(chuàng)建時,系統(tǒng)已為其分配了PCB,填寫了進程標識等信息,但由于該進程所必需的資源或其它信息,如主存資源尚未分配等,一般而言,此時的進程已擁有了自己的PCB,但進程自身還未進入主存,即創(chuàng)建工作尚未完成,進程還不能被調度運行,其所處的狀態(tài)就是創(chuàng)建狀態(tài)。 第二章進 程 管 理 引入創(chuàng)建狀態(tài),是為了保證進程的調度必須在創(chuàng)建工作完成后進行,以確保對進程控制塊操作的完整性。同時,創(chuàng)建狀態(tài)的引入,也增加了管理的靈活性,操作系統(tǒng)可以根據(jù)系統(tǒng)性能或主存容量的限制,推遲創(chuàng)建狀態(tài)進程的提交。對于處于創(chuàng)建狀態(tài)的進程,獲得了其所必需的資源,以及對其PCB初始化工作完成后,進程狀態(tài)便可由創(chuàng)建狀態(tài)轉入就緒狀態(tài)。 第二章進 程

21、 管 理 2) 終止狀態(tài)進程的終止也要通過兩個步驟:首先等待操作系統(tǒng)進行善后處理,然后將其PCB清零,并將PCB空間返還系統(tǒng)。當一個進程到達了自然結束點,或是出現(xiàn)了無法克服的錯誤,或是被操作系統(tǒng)所終結,或是被其他有終止權的進程所終結,它將進入終止狀態(tài)。進入終止態(tài)的進程以后不能再執(zhí)行,但在操作系統(tǒng)中依然保留一個記錄,其中保存狀態(tài)碼和一些計時統(tǒng)計數(shù)據(jù),供其它進程收集。一旦其它進程完成了對終止狀態(tài)進程的信息提取之后,操作系統(tǒng)將刪除該進程。圖2-7示出了增加了創(chuàng)建狀態(tài)和終止狀態(tài)后,進程的三種基本狀態(tài)及轉換圖衍變?yōu)槲宸N狀態(tài)及轉換關系圖。 第二章進 程 管 理 圖2-7 進程的五種基本狀態(tài)及轉換 創(chuàng)建就緒

22、阻塞執(zhí)行終止許可I/O請求釋放I/O完成時間片完進程調度第二章進 程 管 理 圖2-8 具有創(chuàng)建、終止和掛起狀態(tài)的進程狀態(tài)圖 創(chuàng)建終止執(zhí)行活動就緒活動阻塞靜止阻塞靜止就緒許可許可請求I/O釋放激活掛起釋放掛起激活掛起釋放第二章進 程 管 理 如圖2-8所示,引進創(chuàng)建和終止狀態(tài)后,在進程狀態(tài)轉換時,相比較圖2-7所示的進程五狀態(tài)轉換而言,需要增加考慮下面的幾種情況。(1) NULL創(chuàng)建:一個新進程產生時,該進程處于創(chuàng)建狀態(tài)。(2) 創(chuàng)建活動就緒:在當前系統(tǒng)的性能和內存的容量均允許的情況下,完成對進程創(chuàng)建的必要操作后,相應的系統(tǒng)進程將進程的狀態(tài)轉換為活動就緒狀態(tài)。 第二章進 程 管 理 (3) 創(chuàng)

23、建靜止就緒:考慮到系統(tǒng)當前資源狀況和性能要求,并不分配給新建進程所需資源,主要是主存資源,相應的系統(tǒng)進程將進程狀態(tài)轉為靜止就緒狀態(tài),對換到外存,不再參與調度,此時進程創(chuàng)建工作尚未完成。(4) 執(zhí)行終止:當一個進程到達了自然結束點,或是出現(xiàn)了無法克服的錯誤,或是被操作系統(tǒng)所終結,或是被其他有終止權的進程所終結,進程即進終止狀態(tài)。 第二章進 程 管 理 2.1.52.1.5進程控制塊進程控制塊1 1進程控制塊的作用進程控制塊的作用為了描述和控制進程的運行,系統(tǒng)為每個進程定義了一個數(shù)據(jù)結構進程控制塊PCB(Process Control Block),它是進程實體的一部分,是操作系統(tǒng)中最重要的記錄型

24、數(shù)據(jù)結構。PCB中記錄了操作系統(tǒng)所需的、用于描述進程的當前情況以及控制進程運行的全部信息。進程控制塊的作用是使一個在多道程序環(huán)境下不能獨立運行的程序(含數(shù)據(jù)),成為一個能獨立運行的基本單位,一個能與其它進程并發(fā)執(zhí)行的進程。第二章進 程 管 理 或者說,OS是根據(jù)PCB來對并發(fā)執(zhí)行的進程進行控制和管理的。例如,當OS要調度某進程執(zhí)行時,要從該進程的PCB中查出其現(xiàn)行狀態(tài)及優(yōu)先級;在調度到某進程后,要根據(jù)其PCB中所保存的處理機狀態(tài)信息,設置該進程恢復運行的現(xiàn)場,并根據(jù)其PCB中的程序和數(shù)據(jù)的內存始址,找到其程序和數(shù)據(jù); 進程在執(zhí)行過程中,當需要和與之合作的進程實現(xiàn)同步、通信或訪問文件時,也都需要

25、訪問PCB;當進程由于某種原因而暫停執(zhí)行時,又須將其斷點的處理機環(huán)境保存在PCB中??梢?,在進程的整個生命期中,系統(tǒng)總是通過PCB對進程進行控制的,亦即,系統(tǒng)是根據(jù)進程的PCB而不是任何別的什么而感知到該進程的存在的。所以說,PCB是進程存在的惟一標志。 第二章進 程 管 理 當系統(tǒng)創(chuàng)建一個新進程時,就為它建立了一個PCB;進程結束時又回收其PCB,進程于是也隨之消亡。PCB可以被操作系統(tǒng)中的多個模塊讀或修改,如被調度程序、資源分配程序、中斷處理程序以及監(jiān)督和分析程序等讀或修改。因為PCB經常被系統(tǒng)訪問,尤其是被運行頻率很高的進程及分派程序訪問,故PCB應常駐內存。系統(tǒng)將所有的PCB組織成若干

26、個鏈表(或隊列),存放在操作系統(tǒng)中專門開辟的PCB區(qū)內。例如在Linux系統(tǒng)中用task_struct數(shù)據(jù)結構來描述每個進程的進程控制塊,在Windows操作系統(tǒng)中則使用一個執(zhí)行體進程塊(EPROCESS)來表示進程對象的基本屬性。 第二章進 程 管 理 2 2進程控制塊中的信息進程控制塊中的信息1) 進程標識符進程標識符用于惟一地標識一個進程。一個進程通常有兩種標識符:(1) 內部標識符。在所有的操作系統(tǒng)中,都為每一個進程賦予了一個惟一的數(shù)字標識符,它通常是一個進程的序號。設置內部標識符主要是為了方便系統(tǒng)使用。(2) 外部標識符。它由創(chuàng)建者提供,通常是由字母、數(shù)字組成,往往是由用戶(進程)在

27、訪問該進程時使用。為了描述進程的家族關系,還應設置父進程標識及子進程標識。此外,還可設置用戶標識,以指示擁有該進程的用戶。 第二章進 程 管 理 2) 處理機狀態(tài)處理機狀態(tài)信息主要是由處理機的各種寄存器中的內容組成的。處理機在運行時,許多信息都放在寄存器中。當處理機被中斷時,所有這些信息都必須保存在PCB中,以便在該進程重新執(zhí)行時,能從斷點繼續(xù)執(zhí)行。這些寄存器包括: 通用寄存器,又稱為用戶可視寄存器,它們是用戶程序可以訪問的,用于暫存信息,在大多數(shù)處理機中,有 832個通用寄存器,在RISC結構的計算機中可超過100個; 指令計數(shù)器,其中存放了要訪問的下一條指令的地址; 程序狀態(tài)字PSW,其中

28、含有狀態(tài)信息,如條件碼、執(zhí)行方式、中斷屏蔽標志等; 用戶棧指針,指每個用戶進程都有一個或若干個與之相關的系統(tǒng)棧,用于存放過程和系統(tǒng)調用參數(shù)及調用地址,棧指針指向該棧的棧頂。 第二章進 程 管 理 3) 進程調度信息在PCB中還存放一些與進程調度和進程對換有關的信息,包括: 進程狀態(tài),指明進程的當前狀態(tài),作為進程調度和對換時的依據(jù); 進程優(yōu)先級,用于描述進程使用處理機的優(yōu)先級別的一個整數(shù),優(yōu)先級高的進程應優(yōu)先獲得處理機; 進程調度所需的其它信息,它們與所采用的進程調度算法有關,比如,進程已等待CPU的時間總和、進程已執(zhí)行的時間總和等; 事件,指進程由執(zhí)行狀態(tài)轉變?yōu)樽枞麪顟B(tài)所等待發(fā)生的事件,即阻塞

29、原因。 第二章進 程 管 理 4) 進程控制信息進程控制信息包括: 程序和數(shù)據(jù)的地址,指進程的程序和數(shù)據(jù)所在的內存或外存地(首)址,以便再調度到該進程執(zhí)行時,能從PCB中找到其程序和數(shù)據(jù); 進程同步和通信機制,指實現(xiàn)進程同步和進程通信時必需的機制,如消息隊列指針、信號量等,它們可能全部或部分地放在PCB中; 資源清單,即一張列出了除CPU以外的、進程所需的全部資源及已經分配到該進程的資源的清單; 鏈接指針,它給出了本進程(PCB)所在隊列中的下一個進程的PCB的首地址。 第二章進 程 管 理 3. 3. 進程控制塊的組織方式進程控制塊的組織方式1) 鏈接方式這是把具有同一狀態(tài)的PCB,用其中的

30、鏈接字鏈接成一個隊列。這樣,可以形成就緒隊列、若干個阻塞隊列和空白隊列等。對其中的就緒隊列常按進程優(yōu)先級的高低排列,把優(yōu)先級高的進程的PCB排在隊列前面。此外,也可根據(jù)阻塞原因的不同而把處于阻塞狀態(tài)的進程的PCB排成等待I/O操作完成的隊列和等待分配內存的隊列等。圖2-9示出了一種鏈接隊列的組織方式。 第二章進 程 管 理 圖 2-9PCB鏈接隊列示意圖PCB14PCB2PCB3PCB4PCB5PCB6PCB7PCB8PCB93087901執(zhí)行指針就緒隊列指針阻塞隊列指針空閑隊列指針第二章進 程 管 理 2) 索引方式系統(tǒng)根據(jù)所有進程的狀態(tài)建立幾張索引表。例如,就緒索引表、阻塞索引表等,并把各

31、索引表在內存的首地址記錄在內存的一些專用單元中。在每個索引表的表目中,記錄具有相應狀態(tài)的某個PCB在PCB表中的地址。圖2-10示出了索引方式的PCB組織。 第二章進 程 管 理 圖 2-10按索引方式組織PCB 執(zhí)行指針就緒索引表PCB1PCB2PCB3PCB4PCB5PCB6PCB7阻塞索引表就緒表指針阻塞表指針第二章進 程 管 理 2.2進進 程程 控控 制制 進程控制是進程管理中最基本的功能。它用于創(chuàng)建一個新進程,終止一個已完成的進程,或終止一個因出現(xiàn)某事件而使其無法運行下去的進程,還可負責進程運行中的狀態(tài)轉換。如當一個正在執(zhí)行的進程因等待某事件而暫時不能繼續(xù)執(zhí)行時,將其轉換為阻塞狀態(tài)

32、,而當該進程所期待的事件出現(xiàn)時,又將該進程轉換為就緒狀態(tài)等等。進程控制一般是由OS的內核中的原語來實現(xiàn)的。 第二章進 程 管 理 原語(Primitive)是由若干條指令組成的,用于完成一定功能的一個過程。它與一般過程的區(qū)別在于:它們是“原子操作(Action Operation)”。所謂原子操作,是指一個操作中的所有動作要么全做,要么全不做。換言之,它是一個不可分割的基本單位,因此,在執(zhí)行過程中不允許被中斷。原子操作在管態(tài)下執(zhí)行,常駐內存。 第二章進 程 管 理 圖2-11 進程樹 DEFGBCIJKMALH第二章進 程 管 理 2.2.12.2.1進程的創(chuàng)建進程的創(chuàng)建1 1進程圖進程圖(P

33、rocess Graph)(Process Graph)進程圖是用于描述一個進程的家族關系的有向樹,如圖2-11所示。圖中的結點(圓圈)代表進程。在進程D創(chuàng)建了進程I之后,稱D是I的父進程(Parent Process),I是D的子進程(Progeny Process)。 第二章進 程 管 理 2 2引起創(chuàng)建進程的事件引起創(chuàng)建進程的事件在多道程序環(huán)境中,只有(作為)進程(時)才能在系統(tǒng)中運行。因此,為使程序能運行,就必須為它創(chuàng)建進程。導致一個進程去創(chuàng)建另一個進程的典型事件,可有以下四類:(1) 用戶登錄。在分時系統(tǒng)中,用戶在終端鍵入登錄命令后,如果是合法用戶,系統(tǒng)將為該終端建立一個進程,并把它

34、插入就緒隊列中。(2) 作業(yè)調度。在批處理系統(tǒng)中,當作業(yè)調度程序按一定的算法調度到某作業(yè)時,便將該作業(yè)裝入內存,為它分配必要的資源,并立即為它創(chuàng)建進程,再插入就緒隊列中。 第二章進 程 管 理 (3) 提供服務。當運行中的用戶程序提出某種請求后,系統(tǒng)將專門創(chuàng)建一個進程來提供用戶所需要的服務,例如,用戶程序要求進行文件打印,操作系統(tǒng)將為它創(chuàng)建一個打印進程,這樣,不僅可使打印進程與該用戶進程并發(fā)執(zhí)行,而且還便于計算出為完成打印任務所花費的時間。 第二章進 程 管 理 (4) 應用請求。在上述三種情況下,都是由系統(tǒng)內核為它創(chuàng)建一個新進程;而第4類事件則是基于應用進程的需求,由它自己創(chuàng)建一個新進程,以

35、便使新進程以并發(fā)運行方式完成特定任務。例如,某應用程序需要不斷地從鍵盤終端輸入數(shù)據(jù),繼而又要對輸入數(shù)據(jù)進行相應的處理,然后,再將處理結果以表格形式在屏幕上顯示。該應用進程為使這幾個操作能并發(fā)執(zhí)行,以加速任務的完成,可以分別建立鍵盤輸入進程、表格輸出進程。 第二章進 程 管 理 3 3進程的創(chuàng)建進程的創(chuàng)建(Creation of Process)(Creation of Process)一旦操作系統(tǒng)發(fā)現(xiàn)了要求創(chuàng)建新進程的事件后,便調用進程創(chuàng)建原語Creat( )按下述步驟創(chuàng)建一個新進程。(1) 申請空白PCB。為新進程申請獲得惟一的數(shù)字標識符,并從PCB集合中索取一個空白PCB。 第二章進 程

36、管 理 (2) 為新進程分配資源。為新進程的程序和數(shù)據(jù)以及用戶棧分配必要的內存空間。顯然,此時操作系統(tǒng)必須知道新進程所需內存的大小。對于批處理作業(yè),其大小可在用戶提出創(chuàng)建進程要求時提供。若是為應用進程創(chuàng)建子進程,也應是在該進程提出創(chuàng)建進程的請求中給出所需內存的大小。對于交互型作業(yè),用戶可以不給出內存要求而由系統(tǒng)分配一定的空間。如果新進程要共享某個已在內存的地址空間(即已裝入內存的共享段),則必須建立相應的鏈接。 第二章進 程 管 理 (3) 初始化進程控制塊。PCB的初始化包括: 初始化標識信息,將系統(tǒng)分配的標識符和父進程標識符填入新PCB中; 初始化處理機狀態(tài)信息,使程序計數(shù)器指向程序的入口

37、地址,使棧指針指向棧頂; 初始化處理機控制信息,將進程的狀態(tài)設置為就緒狀態(tài)或靜止就緒狀態(tài),對于優(yōu)先級,通常是將它設置為最低優(yōu)先級,除非用戶以顯式方式提出高優(yōu)先級要求。(4) 將新進程插入就緒隊列,如果進程就緒隊列能夠接納新進程,便將新進程插入就緒隊列。 第二章進 程 管 理 2.2.22.2.2進程的終止進程的終止1 1引起進程終止的事件引起進程終止的事件1) 正常結束在任何計算機系統(tǒng)中,都應有一個用于表示進程已經運行完成的指示。例如,在批處理系統(tǒng)中,通常在程序的最后安排一條Holt指令或終止的系統(tǒng)調用。當程序運行到Holt指令時,將產生一個中斷,去通知OS本進程已經完成。在分時系統(tǒng)中,用戶可

38、利用Logs off去表示進程運行完畢,此時同樣可產生一個中斷,去通知OS進程已運行完畢。 第二章進 程 管 理 2) 異常結束在進程運行期間,由于出現(xiàn)某些錯誤和故障而迫使進程終止(Termination of Process)。這類異常事件很多,常見的有下述幾種:(1) 越界錯誤。這是指程序所訪問的存儲區(qū)已越出該進程的區(qū)域。(2) 保護錯。這是指進程試圖去訪問一個不允許訪問的資源或文件,或者以不適當?shù)姆绞竭M行訪問,例如,進程試圖去寫一個只讀文件。(3) 非法指令。這是指程序試圖去執(zhí)行一條不存在的指令。出現(xiàn)該錯誤的原因,可能是程序錯誤地轉移到數(shù)據(jù)區(qū),把數(shù)據(jù)當成了指令。 第二章進 程 管 理 (

39、4) 特權指令錯。這是指用戶進程試圖去執(zhí)行一條只允許OS執(zhí)行的指令。(5) 運行超時。這是指進程的執(zhí)行時間超過了指定的最大值。(6) 等待超時。這是指進程等待某事件的時間超過了規(guī)定的最大值。(7) 算術運算錯。這是指進程試圖去執(zhí)行一個被禁止的運算,例如被0除。(8) I/O故障。這是指在I/O過程中發(fā)生了錯誤等。 第二章進 程 管 理 3) 外界干預外界干預并非指在本進程運行中出現(xiàn)了異常事件,而是指進程應外界的請求而終止運行。這些干預有:(1) 操作員或操作系統(tǒng)干預。由于某種原因,例如,發(fā)生了死鎖,由操作員或操作系統(tǒng)終止該進程。(2) 父進程請求。由于父進程具有終止自己的任何子孫進程的權力,因

40、而當父進程提出請求時,系統(tǒng)將終止該進程。(3) 父進程終止。當父進程終止時,OS也將它的所有子孫進程終止。 第二章進 程 管 理 2 2進程的終止過程進程的終止過程如果系統(tǒng)中發(fā)生了上述要求終止進程的某事件,OS便調用進程終止原語,按下述過程去終止指定的進程。(1) 根據(jù)被終止進程的標識符,從PCB集合中檢索出該進程的PCB,從中讀出該進程的狀態(tài)。(2) 若被終止進程正處于執(zhí)行狀態(tài),應立即終止該進程的執(zhí)行,并置調度標志為真,用于指示該進程被終止后應重新進行調度。 第二章進 程 管 理 (3) 若該進程還有子孫進程,還應將其所有子孫進程予以終止,以防它們成為不可控的進程。(4) 將被終止進程所擁有

41、的全部資源,或者歸還給其父進程,或者歸還給系統(tǒng)。(5) 將被終止進程(PCB)從所在隊列(或鏈表)中移出,等待其他程序來搜集信息。 第二章進 程 管 理 2.2.32.2.3進程的阻塞與喚醒進程的阻塞與喚醒1. 1. 引起進程阻塞和喚醒的事件引起進程阻塞和喚醒的事件有下述幾類事件會引起進程阻塞或被喚醒。1) 請求系統(tǒng)服務當正在執(zhí)行的進程請求操作系統(tǒng)提供服務時,由于某種原因,操作系統(tǒng)并不立即滿足該進程的要求時,該進程只能轉變?yōu)樽枞麪顟B(tài)來等待。例如,一進程請求使用某資源,如打印機,由于系統(tǒng)已將打印機分配給其他進程而不能分配給請求進程,這時請求者進程只能被阻塞,僅在其他進程在釋放出打印機的同時,才將

42、請求進程喚醒。 第二章進 程 管 理 2) 啟動某種操作當進程啟動某種操作后,如果該進程必須在該操作完成之后才能繼續(xù)執(zhí)行,則必須先使該進程阻塞,以等待該操作完成。例如,進程啟動了某I/O設備,如果只有在I/O設備完成了指定的I/O操作任務后進程才能繼續(xù)執(zhí)行,則該進程在啟動了I/O操作后,便自動進入阻塞狀態(tài)去等待。在I/O操作完成后,再由中斷處理程序或中斷進程將該進程喚醒。 第二章進 程 管 理 3) 新數(shù)據(jù)尚未到達對于相互合作的進程,如果其中一個進程需要先獲得另一(合作)進程提供的數(shù)據(jù)后才能對數(shù)據(jù)進行處理,則只要其所需數(shù)據(jù)尚未到達,該進程只有(等待)阻塞。例如,有兩個進程,進程A用于輸入數(shù)據(jù),

43、進程B對輸入數(shù)據(jù)進行加工。假如A尚未將數(shù)據(jù)輸入完畢,則進程B將因沒有所需的處理數(shù)據(jù)而阻塞;一旦進程A把數(shù)據(jù)輸入完畢,便可去喚醒進程B。 第二章進 程 管 理 4) 無新工作可做系統(tǒng)往往設置一些具有某特定功能的系統(tǒng)進程,每當這種進程完成任務后,便把自己阻塞起來以等待新任務到來。例如,系統(tǒng)中的發(fā)送進程,其主要工作是發(fā)送數(shù)據(jù),若已有的數(shù)據(jù)已全部發(fā)送完成而又無新的發(fā)送請求,這時(發(fā)送)進程將使自己進入阻塞狀態(tài); 僅當又有進程提出新的發(fā)送請求時,才將發(fā)送進程喚醒。 第二章進 程 管 理 2 2進程阻塞過程進程阻塞過程正在執(zhí)行的進程,當發(fā)現(xiàn)上述某事件時,由于無法繼續(xù)執(zhí)行,于是進程便通過調用阻塞原語bloc

44、k把自己阻塞??梢?,進程的阻塞是進程自身的一種主動行為。進入block過程后,由于此時該進程還處于執(zhí)行狀態(tài),所以應先立即停止執(zhí)行,把進程控制塊中的現(xiàn)行狀態(tài)由“執(zhí)行”改為“阻塞”,并將PCB插入阻塞隊列。如果系統(tǒng)中設置了因不同事件而阻塞的多個阻塞隊列,則應將本進程插入到具有相同事件的阻塞(等待)隊列。最后,轉調度程序進行重新調度,將處理機分配給另一就緒進程并進行切換,亦即,保留被阻塞進程的處理機狀態(tài)(在PCB中),再按新進程的PCB中的處理機狀態(tài)設置CPU的環(huán)境。 第二章進 程 管 理 3 3進程喚醒過程進程喚醒過程當被阻塞進程所期待的事件出現(xiàn)時,如I/O完成或其所期待的數(shù)據(jù)已經到達,則由有關進

45、程(比如用完并釋放了該I/O設備的進程)調用喚醒原語wakeup( ),將等待該事件的進程喚醒。喚醒原語執(zhí)行的過程是:首先把被阻塞的進程從等待該事件的阻塞隊列中移出,將其PCB中的現(xiàn)行狀態(tài)由阻塞改為就緒,然后再將該PCB插入到就緒隊列中。應當指出,block原語和wakeup原語是一對作用剛好相反的原語。因此,如果在某進程中調用了阻塞原語,則必須在與之相合作的另一進程中或其他相關的進程中安排喚醒原語,以能喚醒阻塞進程;否則,被阻塞進程將會因不能被喚醒而長久地處于阻塞狀態(tài),從而再無機會繼續(xù)運行。 第二章進 程 管 理 2.2.42.2.4進程的掛起與激活進程的掛起與激活1 1進程的掛起進程的掛起

46、當出現(xiàn)了引起進程掛起的事件時,比如,用戶進程請求將自己掛起,或父進程請求將自己的某個子進程掛起,系統(tǒng)將利用掛起原語suspend( )將指定進程或處于阻塞狀態(tài)的進程掛起。掛起原語的執(zhí)行過程是:首先檢查被掛起進程的狀態(tài),若處于活動就緒狀態(tài),便將其改為靜止就緒; 對于活動阻塞狀態(tài)的進程,則將之改為靜止阻塞。為了方便用戶或父進程考查該進程的運行情況而把該進程的PCB復制到某指定的內存區(qū)域。最后,若被掛起的進程正在執(zhí)行,則轉向調度程序重新調度。 第二章進 程 管 理 2 2進程的激活過程進程的激活過程當發(fā)生激活進程的事件時,例如,父進程或用戶進程請求激活指定進程,若該進程駐留在外存而內存中已有足夠的空

47、間時,則可將在外存上處于靜止就緒狀態(tài)的該進程換入內存。這時,系統(tǒng)將利用激活原語active( )將指定進程激活。激活原語先將進程從外存調入內存,檢查該進程的現(xiàn)行狀態(tài),若是靜止就緒,便將之改為活動就緒;若為靜止阻塞,便將之改為活動阻塞。假如采用的是搶占調度策略,則每當有新進程進入就緒隊列時,應檢查是否要進行重新調度,即由調度程序將被激活進程與當前進程進行優(yōu)先級的比較,如果被激活進程的優(yōu)先級更低,就不必重新調度;否則,立即剝奪當前進程的運行,把處理機分配給剛被激活的進程。 第二章進 程 管 理 2.3進進 程程 同同 步步 2.3.12.3.1進程同步的基本概念進程同步的基本概念1 1兩種形式的制

48、約關系兩種形式的制約關系在多道程序環(huán)境下,當程序并發(fā)執(zhí)行時,由于資源共享和進程合作,使同處于一個系統(tǒng)中的諸進程之間可能存在著以下兩種形式的制約關系。(1) 間接相互制約關系。同處于一個系統(tǒng)中的進程,通常都共享著某種系統(tǒng)資源,如共享CPU、共享I/O設備等。所謂間接相互制約即源于這種資源共享,例如,有兩個進程A和B,如果在A進程提出打印請求時,系統(tǒng)已將惟一的一臺打印機分配給了進程B,則此時進程A只能阻塞;一旦進程B將打印機釋放,則A進程才能由阻塞改為就緒狀態(tài)。 第二章進 程 管 理 (2) 直接相互制約關系。這種制約主要源于進程間的合作。例如,有一輸入進程A通過單緩沖向進程B提供數(shù)據(jù)。當該緩沖空

49、時,計算進程因不能獲得所需數(shù)據(jù)而阻塞,而當進程A把數(shù)據(jù)輸入緩沖區(qū)后,便將進程B喚醒;反之,當緩沖區(qū)已滿時,進程A因不能再向緩沖區(qū)投放數(shù)據(jù)而阻塞,當進程B將緩沖區(qū)數(shù)據(jù)取走后便可喚醒A。 第二章進 程 管 理 2. 2. 臨界資源臨界資源在第一章中我們曾經介紹過,許多硬件資源如打印機、磁帶機等,都屬于臨界資源(Critical Resouce),諸進程間應采取互斥方式,實現(xiàn)對這種資源的共享。下面我們將通過一個簡單的例子來說明這一過程。 第二章進 程 管 理 生產者-消費者(producer-consumer)問題是一個著名的進程同步問題。它描述的是:有一群生產者進程在生產產品,并將這些產品提供給消

50、費者進程去消費。為使生產者進程與消費者進程能并發(fā)執(zhí)行,在兩者之間設置了一個具有n個緩沖區(qū)的緩沖池,生產者進程將它所生產的產品放入一個緩沖區(qū)中;消費者進程可從一個緩沖區(qū)中取走產品去消費。盡管所有的生產者進程和消費者進程都是以異步方式運行的,但它們之間必須保持同步,即不允許消費者進程到一個空緩沖區(qū)去取產品,也不允許生產者進程向一個已裝滿產品且尚未被取走的緩沖區(qū)中投放產品。 第二章進 程 管 理 我們可利用一個數(shù)組來表示上述的具有n個(0,1,n-1)緩沖區(qū)的緩沖池。用輸入指針in來指示下一個可投放產品的緩沖區(qū),每當生產者進程生產并投放一個產品后,輸入指針加1;用一個輸出指針out來指示下一個可從中

51、獲取產品的緩沖區(qū),每當消費者進程取走一個產品后,輸出指針加1。由于這里的緩沖池是組織成循環(huán)緩沖的,故應把輸入指針加1表示成 in:= (in+1)mod n; 輸出指針加1表示成out:= (out+1) mod n。當 (in+1) mod n=out時表示緩沖池滿;而in=out則表示緩沖池空。此外,還引入了一個整型變量counter,其初始值為0。每當生產者進程向緩沖池中投放一個產品后,使counter加1;反之,每當消費者進程從中取走一個產品時,使counter減1。生產者和消費者兩進程共享下面的變量: 第二章進 程 管 理 Var n,integer;type item=;var b

52、uffer: array0,1,n-1 of item;in,out: 0,1,n-1;counter: 0,1,n; 第二章進 程 管 理 指針in和out初始化為1。在生產者和消費者進程的描述中,noop是一條空操作指令,while condition do no-op語句表示重復的測試條件(condication),重復測試應進行到該條件變?yōu)閒alse(假),即到該條件不成立時為止。在生產者進程中使用一局部變量nextp,用于暫時存放每次剛生產出來的產品;而在消費者進程中,則使用一個局部變量nextc,用于存放每次要消費的產品。 第二章進 程 管 理 producer: repeat p

53、roduce an item in nextp;while counter=n do no-op;bufferin:=nextp;in:=in+1 mod n;counter:=counter+1;until false; 第二章進 程 管 理 consumer: repeat while counter=0 do no-op;nextc:=bufferout;out:=(out+1) mod n;counter:=counter-1;consumer the item in nextc; until false; 第二章進 程 管 理 雖然上面的生產者程序和消費者程序在分別看時都是正確的,而

54、且兩者在順序執(zhí)行時其結果也會是正確的,但若并發(fā)執(zhí)行時就會出現(xiàn)差錯,問題就在于這兩個進程共享變量counter。生產者對它做加1操作,消費者對它做減1操作,這兩個操作在用機器語言實現(xiàn)時, 常可用下面的形式描述: register1:=counter; register2:=counter;register1:=register1+1;register2:=register2-1;counter:=register1; counter:=register2; 第二章進 程 管 理 假設counter的當前值是5。如果生產者進程先執(zhí)行左列的三條機器語言語句,然后消費者進程再執(zhí)行右列的三條語句,則最后

55、共享變量counter的值仍為5; 反之,如果讓消費者進程先執(zhí)行右列的三條語句,然后再讓生產者進程執(zhí)行左列的三條語句,則counter值也還是5,但是,如果按下述順序執(zhí)行: 第二章進 程 管 理 register1:=counter; (register1=5)register1:=register1+1; (register1=6)register2:=counter; (register2=5)register2:=register2-1; (register2=4)counter:=register1; (counter=6)counter:=register2; (counter=4)

56、 第二章進 程 管 理 正確的counter值應當是5,但現(xiàn)在是4。讀者可以自己試試,倘若再將兩段程序中各語句交叉執(zhí)行的順序改變,將可看到又可能得到counter=6的答案,這表明程序的執(zhí)行已經失去了再現(xiàn)性。為了預防產生這種錯誤,解決此問題的關鍵是應把變量counter作為臨界資源處理,亦即,令生產者進程和消費者進程互斥地訪問變量counter。 第二章進 程 管 理 3臨界區(qū)臨界區(qū)由前所述可知,不論是硬件臨界資源,還是軟件臨界資源,多個進程必須互斥地對它進行訪問。人們把在每個進程中訪問臨界資源的那段代碼稱為臨界區(qū)(critical section)。顯然,若能保證諸進程互斥地進入自己的臨界區(qū)

57、,便可實現(xiàn)諸進程對臨界資源的互斥訪問。為此,每個進程在進入臨界區(qū)之前,應先對欲訪問的臨界資源進行檢查,看它是否正被訪問。如果此刻該臨界資源未被訪問,進程便可進入臨界區(qū)對該資源進行訪問,并設置它正被訪問的標志;如果此刻該臨界資源正被某進程訪問,則本進程不能進入臨界區(qū)。因此,必須在臨界區(qū)前面增加一段用于進行上述檢查的代碼,把這段代碼稱為進入?yún)^(qū)(entry section)。相應地,在臨界區(qū)后面也要加上一段稱為退出區(qū)(exit section)的代碼,用于將臨界區(qū)正被訪問的標志恢復為未被訪問的標志。 第二章進 程 管 理 進程中除上述進入?yún)^(qū)、臨界區(qū)及退出區(qū)之外的其它部分的代碼,在這里都稱為剩余區(qū)。這

58、樣,可把一個訪問臨界資源的循環(huán)進程描述如下:repeatentry sectioncritical section;exit sectionremainder section;until false; 第二章進 程 管 理 4同步機制應遵循的規(guī)則同步機制應遵循的規(guī)則為實現(xiàn)進程互斥地進入自已的臨界區(qū),可用軟件方法,更多的是在系統(tǒng)中設置專門的同步機構來協(xié)調各進程間的運行。所有同步機制都應遵循下述四條準則:(1) 空閑讓進。當無進程處于臨界區(qū)時,表明臨界資源處于空閑狀態(tài),應允許一個請求進入臨界區(qū)的進程立即進入自己的臨界區(qū),以有效地利用臨界資源。(2) 忙則等待。當已有進程進入臨界區(qū)時,表明臨界資源正

59、在被訪問,因而其它試圖進入臨界區(qū)的進程必須等待,以保證對臨界資源的互斥訪問。 第二章進 程 管 理 (3) 有限等待。對要求訪問臨界資源的進程,應保證在有限時間內能進入自己的臨界區(qū),以免陷入“死等”狀態(tài)。(4) 讓權等待。當進程不能進入自己的臨界區(qū)時,應立即釋放處理機,以免進程陷入“忙等”狀態(tài)。 第二章進 程 管 理 2.3.2信號量機制信號量機制1整型信號量整型信號量最初由Dijkstra把整型信號量定義為一個用于表示資源數(shù)目的整型量S,它與一般整型量不同,除初始化外,僅能通過兩個標準的原子操作(Atomic Operation) wait(S)和signal(S)來訪問。很長時間以來,這兩

60、個操作一直被分別稱為P、V操作。Wait(S)和signal(S)操作可描述為:wait(S): while S=0 do no-op;S:=S-1;signal(S):S:=S+1; 第二章進 程 管 理 wait(S)和signal(S)是兩個原子操作,因此,它們在執(zhí)行時是不可中斷的。亦即,當一個進程在修改某信號量時,沒有其他進程可同時對該信號量進行修改。此外,在wait操作中,對S值的測試和做S:=S-1操作時都不可中斷。 第二章進 程 管 理 2記錄型信號量記錄型信號量在整型信號量機制中的wait操作,只要是信號量S0,就會不斷地測試。因此,該機制并未遵循“讓權等待”的準則,而是使進程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論