一、引言
在傳統的操作系統中,程序並不能獨立運行,作為資源分配和獨立運行的基本單位都是進程。操作系統所具有的四大特征也都是基於進程而形成的,並可從進程的觀點來研究操作系統。顯然,在操作系統中,進程是一個極其重要的概念。
二、程序的順序執行及其特征
順序執行:通常可以把一個應用程序分成若干個程序段,在各程序段之間,必須按照某種先后次序順序執行,僅當前一操作(程序段)執行完后,才能執行后繼操作。
程序順序執行時的特征
(1) 順序性:處理機的操作嚴格按照程序所規定的順序執行,即每一操作必須在上一個操作結束之后開始。
(2) 封閉性:程序是在封閉的環境下執行的,即程序運行時獨占全機資源,資源的狀態(除初始狀態外)只有本程序才能改變它。程序一旦開始執行,其執行結果不受外界因素影響。
(3) 可再現性:只要程序執行時的環境和初始條件相同,當程序重復執行時,不論它是從頭到尾不停頓地執行,還是“停停走走”地執行,都將獲得相同的結果。
程序順序執行時的特性,為程序員檢測和校正程序的錯誤帶來了很大的方便。
前趨圖
前趨圖(Precedence Graph)是一個有向無循環圖,記為DAG(Directed Acyclic Graph),用於描述進程之間執行的前后關系。圖中的每個結點可用於描述一個程序段或進程,乃至一條語句;結點間的有向邊則用於表示兩個結點之間存在的偏序(Partial Order,亦稱偏序關系)或前趨關系(Precedence Relation)“→”。 →={(Pi,Pj)|Pi must complete before Pj may start},如果(Pi,Pj)∈→,可寫成Pi→Pj,稱Pi是Pj的直接前趨,而稱Pj是Pi的直接后繼。在前趨圖中,把沒有前趨的結點稱為初始結點(Initial Node),把沒有后繼的結點稱為終止結點(Final Node)。此外,每個結點還具有一個重量(Weight),用於表示該結點所含有的程序量或結點的執行時間,前趨圖中必須不存在循環。
程序的並發執行及其特征
3.1 輸入程序在輸入第一個程序后,在計算程序對該程序進行計算的同時,可由輸入程序再輸入第二個程序,從而使第一個程序的計算操作可與第二個程序的輸入操作並發執行。一般來說,輸入程序在輸入第i+1個程序時,計算程序可能正在對第i個程序進行計算,而打印程序正在打印第i-1 個程序的計算結果。例如,我們有一批作業需要批改,但是需要對一個作業的輸入、計算和打印三個操作,必須順序執行。下圖表示出了輸入、計算和打印這三個程序對一批作業進行處理的情況。
在該例中存在下述前趨關系:Ii→Ci,Ii→Ii+1,Ci→Pi,Ci→Ci+1,Pi→Pi+1而 Ii+1和Ci及Pi-1是重迭的,亦即在Pi-1和Ci以及Ii+1 之間,可以並發執行。
程序並發執行時的特性
程序的並發執行,雖然提高了系統吞吐量,但也產生了下述一些與程序順序執行時不同的特征。
1) 間斷性
程序在並發執行時,由於它們共享系統資源,以及為完成同一項任務而相互合作,致使在這些並發執行的程序之間,形成了相互制約的關系。例如,圖2-3 中的I、C和P是三個相互合作的程序,當計算程序完成Ci-1的計算后,如果輸入程序I尚未完成Ii的處理,則計算程序就無法進行Ci的處理,致使計算程序必須暫停運行。又如,當打印程序完成Pi的打印后,若計算程序尚未完成Ci+1的計算,則打印程序就無法對Ci+1的計算結果進行打印。一旦使程序暫停的因素消失后(如Ii已處理完成),計算程序便可恢復執行對Ci的處理。簡而言之,相互制約將導致並發程序具有“執行—暫停—執行”這種間斷性的活動規律。
2) 失去封閉性
程序在並發執行時,是多個程序共享系統中的各種資源,因而這些資源的狀態將由多個程序來改變,致使程序的運行失去了封閉性。這樣,某程序在執行時,必然會受到其它程序的影響。例如,當處理機這一資源已被某個程序占有時,另一程序必須等待。
3) 不可再現性
程序在並發執行時,由於失去了封閉性,也將導致其再失去可再現性。例如,有兩個循環程序A 和B,它們共享一個變量N。程序A 每執行一次時,都要做N:=N+1 操作;程序B每執行一次時,都要執行Print(N)操作,然后再將N 置成“0”。程序A和B以不同的速度運行。這樣,可能出現下述三種情況(假定某時刻變量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:=N+1 在Print(N)和N:=0之間,此時得到的N值分別為n,n+1,0。
上述情況說明,程序在並發執行時,由於失去了封閉性,其計算結果已與並發程序的執行速度有關,從而使程序的執行失去了可再現性,亦即,程序經過多次執行后,雖然它們執行時的環境和初始條件相同,但得到的結果卻各不相同。