進程是計算機進行資源分配和獨立運行的基本單位
進程的引入
引入進程是為了使多道程序並發執行
程序的順序執行
一個程序通常由若干個程序段所組成它們必須按照某種先後次序來執行僅當前一個操作執行完後才能執行後繼操作這類計算過程就是程序的順序執行過程
例如先輸入→再計算→最後輸出即I→C →P
程序順序執行時的特征
順序性處理機的操作嚴格按照程序所規定的順序執行即每一個操作必須在下一個操作開始之前結束
封閉性程序一旦開始運行其執行結果不受外界因素影響
可再現性只要程序執行時的初始條件和執行環境相同當程序重復執行時都將獲得相同的結果
程序的並發執行
程序的並發執行是指若干個程序(或程序段)同時在系統中運行這些程序(或程序段)的執行在時間上是重疊的一個程序(或程序段)的執行尚未結束另一個程序(或程序段)的執行已經開始
前驅圖
前驅圖是一個有向無循環圖圖中的每個結點可以表示一條語句一個程序段或進程結點間的有向邊表示語句或程序段的執行次序
程序並發執行例
進程並發執行對每個進程而言其輸入計算和輸出這三個操作必須順序執行它們之間存在如下先後關系
I先於C和I C先於P和C P先於P
I和C I C和P可以並發
與時間有關的錯誤例
程序並發執行時可能出現與時間有關的錯誤
例
進程r=x; 進程r=x;
r++; r++;
x=r; x=r;
設在兩進程運行之前x的值為則兩進程運行結束後x值可為
Bernstein條件
讀集語句執行期間要引用的變量集合記為R(Si)={a…am}
寫集語句執行期間要改變的變量集合記為W(Si)={b…bn}
Bernstein條件能保證兩條相繼的語句並發執行而不會產生與時間有關的錯誤
R(Si)∩ W(Sj)={ }
R(Sj)∩ W(Si)={ }
W(Si)∩ W(Sj)={ }
例
考慮下面是條語句
Sa=x+y Sb=z+
Sc=ab Sd=c+
R(S)={xy} R(S)={z} R(S)={ab}
W(S)={a} W(S)={b} W(S)={c}
因R(S)∩ W(S)∪R(S)∩ W(S)∪W(S)∩W(S)={ }故S和S可以並發執行
因R(S)∩ W(S)∪R(S)∩ W(S)∪W(S)∩W(S)={b}故S和S不能並發執行
並發語句的描述方式
cobegin
S;S;…Sn;
coend
對應的前驅圖如右其中S和Sn+分別是cobegin和coend語句前後的兩條語句
程序並發執行時的特征
間斷性並發程序具有執行暫停執行這種間斷性的活動規律
失去封閉性多個程序共享系統中的資源這些資源的狀態將由多個程序來改變致使程序之間相互影響
不可再現性在初始條件相同的情況下程序的執行結果依賴於執行的次序
並發程序的其他特征
資源分配動態性多道程序在運行過程中可根據需要隨時提出分配資源的請求
程序並發執行的相互制約並發程序執行時相互影響相互制約其相互制約關系分為
直接制約合作進程之間的相互制約
間接制約因資源共享產生的相互制約
相互通信的可能多個進程之間可能需要相互傳遞信息
同步與互斥的必要並發進程之間需要調整相對執行速度許多資源需要互斥使用
[] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/czxt/201311/24172.html