第2章進(jìn)程管理下_第1頁(yè)
第2章進(jìn)程管理下_第2頁(yè)
第2章進(jìn)程管理下_第3頁(yè)
第2章進(jìn)程管理下_第4頁(yè)
第2章進(jìn)程管理下_第5頁(yè)
已閱讀5頁(yè),還剩79頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、12.3 進(jìn)程同步進(jìn)程同步 進(jìn)程同步的主要任務(wù):進(jìn)程同步的主要任務(wù):對(duì)對(duì)多個(gè)相關(guān)進(jìn)程在執(zhí)行次序上進(jìn)行多個(gè)相關(guān)進(jìn)程在執(zhí)行次序上進(jìn)行協(xié)調(diào),以協(xié)調(diào),以使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資源共享資源和和相相互合作互合作,從而使程序的執(zhí)行具有可再現(xiàn)性,從而使程序的執(zhí)行具有可再現(xiàn)性。2.3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念1. 兩種形式的制約關(guān)系兩種形式的制約關(guān)系(1) (1) 間接相互制約關(guān)系間接相互制約關(guān)系 源于資源共享(互斥方式)源于資源共享(互斥方式)(2) (2) 直接相互制約關(guān)系直接相互制約關(guān)系 源于進(jìn)程合作(同步方式)源于進(jìn)程合作(同步方式)2n互斥互斥

2、:同步的特例,多個(gè)操作決不能同時(shí)執(zhí)行,如:同步的特例,多個(gè)操作決不能同時(shí)執(zhí)行,如:進(jìn)程和進(jìn)程共用一臺(tái)打印機(jī)的情形。進(jìn)程和進(jìn)程共用一臺(tái)打印機(jī)的情形。n同步同步:對(duì)于進(jìn)程操作的時(shí)間順序所加的某種限制,:對(duì)于進(jìn)程操作的時(shí)間順序所加的某種限制,如如輸入進(jìn)程輸入進(jìn)程I I和計(jì)算進(jìn)程和計(jì)算進(jìn)程C C共用一個(gè)緩沖區(qū)的情形共用一個(gè)緩沖區(qū)的情形, ,輸輸入進(jìn)程入進(jìn)程I I必須在計(jì)算進(jìn)程必須在計(jì)算進(jìn)程C C之前完成。之前完成。2.3 進(jìn)程同步進(jìn)程同步 A打印機(jī)打印機(jī)B I緩沖區(qū)緩沖區(qū)C3 必須互斥訪問的資源稱為臨界資源必須互斥訪問的資源稱為臨界資源 2. 臨界資源臨界資源互斥訪問互斥訪問例如:有兩個(gè)進(jìn)程共享一個(gè)例

3、如:有兩個(gè)進(jìn)程共享一個(gè)count變量,當(dāng)兩個(gè)進(jìn)程按以下順變量,當(dāng)兩個(gè)進(jìn)程按以下順序執(zhí)行時(shí):序執(zhí)行時(shí):P1P2n1=count;n2=count;n1=n1+1;n2=n2+1;count=n1; count=n2;假定假定count初值為初值為0,如果先執(zhí)行,如果先執(zhí)行P1,后執(zhí)行,后執(zhí)行P2,最后,最后count變量的值為變量的值為24但如果按下列順序并發(fā)執(zhí)行:P1:n1=count;P2:n2=count;P1:n1=n1+1;count=n1;P2:n2=n2+1;count=n2; 盡管P1與P2都有各自對(duì)count做了加1操作,但最后的count卻是增加1,即發(fā)生了與執(zhí)行順序有關(guān)的錯(cuò)

4、誤。 為防止這種錯(cuò)誤,對(duì)臨界資源為防止這種錯(cuò)誤,對(duì)臨界資源count必須互斥必須互斥訪問。即訪問。即P1訪問訪問count變量,變量,P2就不能訪問;當(dāng)就不能訪問;當(dāng)P1訪問結(jié)束時(shí),才允許訪問結(jié)束時(shí),才允許P2訪問訪問count變量。變量。 2. 臨界資源臨界資源互斥訪問互斥訪問5 每個(gè)進(jìn)程中訪問臨界資源的那段代碼每個(gè)進(jìn)程中訪問臨界資源的那段代碼對(duì)欲訪問的臨界資源進(jìn)行檢查,對(duì)欲訪問的臨界資源進(jìn)行檢查, 進(jìn)入?yún)^(qū)進(jìn)入?yún)^(qū)若此刻未被訪問,設(shè)正在訪問的標(biāo)志若此刻未被訪問,設(shè)正在訪問的標(biāo)志訪問臨界資源訪問臨界資源 臨界區(qū)臨界區(qū)將正在訪問的標(biāo)志恢復(fù)為未被訪問的標(biāo)志將正在訪問的標(biāo)志恢復(fù)為未被訪問的標(biāo)志退出區(qū)退

5、出區(qū)其余部分其余部分 剩余區(qū)剩余區(qū)repeat entry section critical section exit section remainder sectionuntil false3. 臨界區(qū)臨界區(qū)63. 臨界區(qū)臨界區(qū)對(duì)臨界資源設(shè)一訪問標(biāo)志對(duì)臨界資源設(shè)一訪問標(biāo)志flag對(duì)對(duì)flag檢查,看是否被訪問?檢查,看是否被訪問? 該進(jìn)程可以進(jìn)入臨界區(qū),該進(jìn)程可以進(jìn)入臨界區(qū),并設(shè)置已被訪問標(biāo)志并設(shè)置已被訪問標(biāo)志該進(jìn)程不能進(jìn)入臨界區(qū)該進(jìn)程不能進(jìn)入臨界區(qū)YN進(jìn)入臨界區(qū)流程74. 同步機(jī)制應(yīng)遵循的準(zhǔn)則同步機(jī)制應(yīng)遵循的準(zhǔn)則 空閑讓進(jìn)空閑讓進(jìn) 無(wú)進(jìn)程處于臨界區(qū)內(nèi)時(shí),可讓一個(gè)申請(qǐng)進(jìn)入該無(wú)進(jìn)程處于臨界區(qū)內(nèi)

6、時(shí),可讓一個(gè)申請(qǐng)進(jìn)入該臨界區(qū)的進(jìn)程進(jìn)入。臨界區(qū)的進(jìn)程進(jìn)入。 忙則等待忙則等待 臨界區(qū)內(nèi)有進(jìn)程時(shí),申請(qǐng)進(jìn)入臨界區(qū)的進(jìn)程必臨界區(qū)內(nèi)有進(jìn)程時(shí),申請(qǐng)進(jìn)入臨界區(qū)的進(jìn)程必須等待。須等待。 有限等待有限等待 進(jìn)程進(jìn)入臨界區(qū)的請(qǐng)求,必須在有限的時(shí)間內(nèi)進(jìn)程進(jìn)入臨界區(qū)的請(qǐng)求,必須在有限的時(shí)間內(nèi)滿足。滿足。 讓權(quán)等待讓權(quán)等待 等待進(jìn)入臨界區(qū)的進(jìn)程,必須立即放等待進(jìn)入臨界區(qū)的進(jìn)程,必須立即放CPU。8信號(hào)量機(jī)制信號(hào)量機(jī)制中心街道 樓宇 1小區(qū)A小區(qū) B城市公路進(jìn)程92.3.2 解決方法解決方法信號(hào)量機(jī)制信號(hào)量機(jī)制 1、信號(hào)量機(jī)制、信號(hào)量機(jī)制 1965年荷蘭學(xué)者年荷蘭學(xué)者Dijkstra 提出信號(hào)量機(jī)制,是一個(gè)提出信號(hào)

7、量機(jī)制,是一個(gè)卓有卓有成效成效的進(jìn)程同步機(jī)制。的進(jìn)程同步機(jī)制。2、信號(hào)量的發(fā)展、信號(hào)量的發(fā)展 整型信號(hào)量、記錄型信號(hào)量、整型信號(hào)量、記錄型信號(hào)量、AND型信號(hào)量和信號(hào)量集型信號(hào)量和信號(hào)量集機(jī)制。機(jī)制。 102.3.2 解決方法解決方法信號(hào)量機(jī)制信號(hào)量機(jī)制 11整型信號(hào)量整型信號(hào)量整型量,除初始化外,僅能通過兩個(gè)原子操作來(lái)訪問。整型量,除初始化外,僅能通過兩個(gè)原子操作來(lái)訪問。P P操作操作 wait(S):wait(S): While S=0 do no-op; While S0S0表示可獲得這個(gè)臨界資源的進(jìn)程個(gè)數(shù)表示可獲得這個(gè)臨界資源的進(jìn)程個(gè)數(shù) S=0S=0表示等待該臨界資源的進(jìn)程個(gè)數(shù)表示等待

8、該臨界資源的進(jìn)程個(gè)數(shù)P P操作:申請(qǐng)資源操作:申請(qǐng)資源 V V操作:釋放資源操作:釋放資源2.3.2 解決方法解決方法信號(hào)量機(jī)制信號(hào)量機(jī)制12 整型信號(hào)量未遵循整型信號(hào)量未遵循“讓權(quán)等待讓權(quán)等待”原則,導(dǎo)致忙等原則,導(dǎo)致忙等 引入整型變量引入整型變量value(value(代表資源數(shù)目代表資源數(shù)目) )、進(jìn)程鏈、進(jìn)程鏈表指針表指針L(L(鏈接所有等待進(jìn)程鏈接所有等待進(jìn)程) )2 2 記錄型信號(hào)量記錄型信號(hào)量其中:其中: 信信 號(hào)號(hào) 量量 值值 表示某種資源的數(shù)量。表示某種資源的數(shù)量。 等待隊(duì)列指針等待隊(duì)列指針當(dāng)信號(hào)量值為負(fù)時(shí),表示該類資源已分配完,當(dāng)信號(hào)量值為負(fù)時(shí),表示該類資源已分配完,等待該

9、類資源的進(jìn)程排在等待隊(duì)列中。等待該類資源的進(jìn)程排在等待隊(duì)列中。L L為指向該信號(hào)量等待為指向該信號(hào)量等待隊(duì)列的指針。隊(duì)列的指針。 定義:定義: type semaphore=recordtype semaphore=record value value:integerinteger; 信號(hào)量值信號(hào)量值 L L:list of processlist of process 信號(hào)量等待隊(duì)列指針信號(hào)量等待隊(duì)列指針 endend;13定義:定義:VAR S:Semaphore; 1. P操作(操作(wait 原語(yǔ))原語(yǔ)) 每作一次每作一次P操作,申請(qǐng)分配一個(gè)單位的資源。操作,申請(qǐng)分配一個(gè)單位的資源。

10、P(S) 對(duì)信號(hào)量對(duì)信號(hào)量S 進(jìn)行進(jìn)行P操作。操作。 S.value := S.Value - 1; 若若 S.Value 0 進(jìn)程繼續(xù)執(zhí)行。進(jìn)程繼續(xù)執(zhí)行。 若若 S.Value 0S.Value 0 進(jìn)程繼續(xù)執(zhí)行。進(jìn)程繼續(xù)執(zhí)行。 若若 S.Value 0S.Value 0 則釋放則釋放S S等待隊(duì)列中的一個(gè)進(jìn)程,等待隊(duì)列中的一個(gè)進(jìn)程, 使之轉(zhuǎn)為使之轉(zhuǎn)為就緒就緒狀態(tài)。狀態(tài)。2 2 記錄型信號(hào)量記錄型信號(hào)量P、V操作原語(yǔ)操作原語(yǔ)14 P 操作操作 Procedure P(s) Var s:semaphore; begin s.value:= s.value-1; if s.value 0 the

11、n block(s.L); end; V操作操作 Procedure V(s) Var s:semaphore; begin s.value:= s.value+1; if s.value 0 then wakeup(s.L); end;P P、V V操作的算法描述操作的算法描述2 記錄型信號(hào)量記錄型信號(hào)量15 說明:說明: S.Value 0S.Value 0 時(shí),其值表示某類資源可用數(shù)量。時(shí),其值表示某類資源可用數(shù)量。 S.ValueS.Value 0 0 時(shí),其絕對(duì)值表示在信號(hào)量隊(duì)列中等待時(shí),其絕對(duì)值表示在信號(hào)量隊(duì)列中等待 該資源的進(jìn)程數(shù)。該資源的進(jìn)程數(shù)。 P P、V V操作有嚴(yán)格的不可

12、分割性;執(zhí)行過程不允許中斷;操作有嚴(yán)格的不可分割性;執(zhí)行過程不允許中斷; P P、V V操作成對(duì)出現(xiàn)。操作成對(duì)出現(xiàn)。(根據(jù)同步機(jī)制的原則,分析(根據(jù)同步機(jī)制的原則,分析P P、V V操作的特點(diǎn),)操作的特點(diǎn),)?問題?問題?如何使用如何使用P P、V V操作實(shí)現(xiàn)同步機(jī)制?操作實(shí)現(xiàn)同步機(jī)制?實(shí)現(xiàn)同步機(jī)制實(shí)現(xiàn)同步機(jī)制基本思想是:加基本思想是:加鎖、解鎖鎖、解鎖 考慮:考慮: 如何控制互斥地使用臨界資源?如何控制互斥地使用臨界資源? 如何控制進(jìn)程并發(fā)執(zhí)行的時(shí)序?如何控制進(jìn)程并發(fā)執(zhí)行的時(shí)序?2 記錄型信號(hào)量記錄型信號(hào)量163 信號(hào)量的應(yīng)用信號(hào)量的應(yīng)用 1. 利用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥利用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥

13、 例例1:用P(wait)、V(signal)原語(yǔ)實(shí)現(xiàn)3個(gè)進(jìn)程(A、B、C)互斥進(jìn)入臨界區(qū)。設(shè)互斥信號(hào)量mutex=1A B C P(mutex) P(mutex) P(mutex)CSA CSB CSCV(mutex) V(mutex) V(mutex) 17序號(hào)調(diào)用進(jìn)程被調(diào)用操作進(jìn)入臨界區(qū)運(yùn)行的進(jìn)程mutex值在mutex上等待的進(jìn)程112AP(mutex)A03BP(mutex)A-1B4CP(mutex)A-2BC5AV(mutex)B-1C6BV(mutex)C07CV(mutex)13 信號(hào)量的應(yīng)用信號(hào)量的應(yīng)用 18 例例2:以計(jì)算進(jìn)程C和打印進(jìn)程P為例來(lái)描述兩個(gè)進(jìn)程的合作關(guān)系,試

14、用P、V原語(yǔ)實(shí)現(xiàn)。 設(shè):計(jì)算進(jìn)程與打印進(jìn)程共用一個(gè)緩沖區(qū),為此可設(shè)置兩個(gè)信號(hào)量:full表示緩沖區(qū)滿,令full=0;empty表示緩沖區(qū)空,令empty=13 信號(hào)量的應(yīng)用信號(hào)量的應(yīng)用 19計(jì)算進(jìn)程與打印進(jìn)程的P、V描述如下: 計(jì)算進(jìn)程C 產(chǎn)生一個(gè)數(shù)據(jù)P(empty);往緩沖區(qū)送數(shù)據(jù)V(full); 打印進(jìn)程P P(full);從緩沖區(qū)取數(shù)V(empty);輸出結(jié)果 3 信號(hào)量的應(yīng)用信號(hào)量的應(yīng)用 20S1S2S3S4S5S6abcdegf例例3:S1,S2,S3,S4,S5,S6為一組合作進(jìn)程為一組合作進(jìn)程,其前趨圖如其前趨圖如圖圖,試用試用P、V原語(yǔ)實(shí)現(xiàn)這原語(yǔ)實(shí)現(xiàn)這6個(gè)進(jìn)程的同步。個(gè)進(jìn)程的

15、同步。3 信號(hào)量的應(yīng)用信號(hào)量的應(yīng)用 213 信號(hào)量的應(yīng)用信號(hào)量的應(yīng)用 22思考:利用信號(hào)量實(shí)現(xiàn)前趨關(guān)系思考:利用信號(hào)量實(shí)現(xiàn)前趨關(guān)系(p57)P1P3P4P2P5P63 信號(hào)量的應(yīng)用信號(hào)量的應(yīng)用 232.3 進(jìn)程同步進(jìn)程同步4. AND型信號(hào)量型信號(hào)量上述進(jìn)程互斥問題,多個(gè)進(jìn)程共享一個(gè)臨界資源。上述進(jìn)程互斥問題,多個(gè)進(jìn)程共享一個(gè)臨界資源。兩個(gè)進(jìn)程兩個(gè)進(jìn)程A A和和B B,共享數(shù)據(jù),共享數(shù)據(jù)D D和和E E,為其分別設(shè)置互斥信號(hào),為其分別設(shè)置互斥信號(hào)量量DmutexDmutex和和EmutexEmutex,初值為,初值為1 1。Process A: wait(Dmutex); wait(Emute

16、x);Process B: wait(Emutex); wait(Dmutex);Process A: wait(Dmutex); 于是于是Dmutex=0Process B: wait(Emutex); 于是于是Emutex=0Process A: wait(Emutex); 于是于是Emutex=-1 A阻塞阻塞Process B: wait(Dmutex); 于是于是Dmutex=-1 B阻塞阻塞設(shè)執(zhí)行過程為設(shè)執(zhí)行過程為共享的資源越多,死鎖的可能越大共享的資源越多,死鎖的可能越大242.3 進(jìn)程同步進(jìn)程同步 AND同步機(jī)制的基本思想:將進(jìn)程在整個(gè)同步機(jī)制的基本思想:將進(jìn)程在整個(gè)運(yùn)行過程中

17、需要的所有資源,一次性全部分配給運(yùn)行過程中需要的所有資源,一次性全部分配給進(jìn)程,待進(jìn)程使用完后再一起釋放。只要尚有一進(jìn)程,待進(jìn)程使用完后再一起釋放。只要尚有一個(gè)資源未能分配給進(jìn)程,其他所有可能為之分配個(gè)資源未能分配給進(jìn)程,其他所有可能為之分配的資源,也不分配給它。即對(duì)臨界資源的分配采的資源,也不分配給它。即對(duì)臨界資源的分配采取原子操作。取原子操作。Swait(S1, S2, , Sn) if S1 =1 and and Sn=1 then for i:=1 to n do Si:= Si -1 ; endfor else Place the process in the waiting que

18、ue associated with the first Si found with Si 0)個(gè)單元的緩)個(gè)單元的緩沖區(qū)。沖區(qū)。P1每次用每次用produce()生成一個(gè)正整數(shù)并用()生成一個(gè)正整數(shù)并用put()送入緩()送入緩沖區(qū)某一空單元中;沖區(qū)某一空單元中;P2每次用每次用getodd()從該緩沖區(qū)中取出一個(gè)()從該緩沖區(qū)中取出一個(gè)奇數(shù)并用奇數(shù)并用countodd()統(tǒng)計(jì)奇數(shù)個(gè)數(shù);()統(tǒng)計(jì)奇數(shù)個(gè)數(shù);P3每次用每次用geteven()從()從該緩沖區(qū)中取出一個(gè)偶數(shù)并用該緩沖區(qū)中取出一個(gè)偶數(shù)并用counteven()統(tǒng)計(jì)偶數(shù)個(gè)數(shù)。請(qǐng)()統(tǒng)計(jì)偶數(shù)個(gè)數(shù)。請(qǐng)用信號(hào)量機(jī)制實(shí)現(xiàn)這三個(gè)進(jìn)程的同步與互斥

19、活動(dòng),并說明所定義用信號(hào)量機(jī)制實(shí)現(xiàn)這三個(gè)進(jìn)程的同步與互斥活動(dòng),并說明所定義的信號(hào)量的含義。要求用偽代碼描述。的信號(hào)量的含義。要求用偽代碼描述。 60定義信號(hào)量定義信號(hào)量S1控制控制P1與與P2之間的同步;之間的同步;S2控制控制P1與與P3之間的同步;之間的同步;empty控制控制生產(chǎn)者與消費(fèi)者之間的同步;生產(chǎn)者與消費(fèi)者之間的同步;mutex控制進(jìn)程間互斥使用緩沖區(qū)。程序如下控制進(jìn)程間互斥使用緩沖區(qū)。程序如下: Var s1=0,s2=0,empty=N,mutex=1; Parbegin P1:begin X=produce(); P(empty); P(mutex); Put(); If

20、x%2=0 V(s2); else V(s1); V(mutex); end. P2:begin P(s1); P(mutex); Getodd(); Countodd():=countodd()+1; V(mutex); V(empty); end. P3:begin P(s2) P(mutex); Geteven(); Counteven():=counteven()+1; V(mutex); V(empty); end. Parend. 612.5 進(jìn)程通信進(jìn)程通信 進(jìn)程通信是指進(jìn)程之間的信息交換。進(jìn)程通信是指進(jìn)程之間的信息交換。 進(jìn)程之間的互斥和同步進(jìn)程之間的互斥和同步低級(jí)通信(因其低

21、級(jí)通信(因其所交換的信息最少)所交換的信息最少)u如在進(jìn)程互斥中,進(jìn)程通過只修改信號(hào)量來(lái)向其如在進(jìn)程互斥中,進(jìn)程通過只修改信號(hào)量來(lái)向其它進(jìn)程表明臨界資源是否可用它進(jìn)程表明臨界資源是否可用u在生產(chǎn)者在生產(chǎn)者-消費(fèi)者問題中,生產(chǎn)者通過緩沖池將所消費(fèi)者問題中,生產(chǎn)者通過緩沖池將所生產(chǎn)的產(chǎn)品傳送給消費(fèi)者。生產(chǎn)的產(chǎn)品傳送給消費(fèi)者。 信號(hào)量機(jī)制作為通信工具的缺點(diǎn):信號(hào)量機(jī)制作為通信工具的缺點(diǎn): (1)效率低效率低 (2)通信對(duì)用戶不透明通信對(duì)用戶不透明。低級(jí)通信中共享數(shù)據(jù)的設(shè)置,數(shù)據(jù)的傳送,進(jìn)程的互斥都是由低級(jí)通信中共享數(shù)據(jù)的設(shè)置,數(shù)據(jù)的傳送,進(jìn)程的互斥都是由程序員去實(shí)現(xiàn),操作系統(tǒng)只提供共享存儲(chǔ)器,因此非

22、常不方便程序員去實(shí)現(xiàn),操作系統(tǒng)只提供共享存儲(chǔ)器,因此非常不方便622.5 進(jìn)程通信進(jìn)程通信 高級(jí)進(jìn)程通信是指用戶可直接利用操高級(jí)進(jìn)程通信是指用戶可直接利用操作系統(tǒng)所提供的一組作系統(tǒng)所提供的一組通信命令通信命令,高效地傳,高效地傳送大量數(shù)據(jù)的一種通信方式。操作系統(tǒng)隱送大量數(shù)據(jù)的一種通信方式。操作系統(tǒng)隱藏了進(jìn)程通信的細(xì)節(jié),對(duì)用戶透明,減少藏了進(jìn)程通信的細(xì)節(jié),對(duì)用戶透明,減少了通信程序編制上的復(fù)雜性了通信程序編制上的復(fù)雜性 。632.5 進(jìn)程通信進(jìn)程通信2.5.1 進(jìn)程通信的類型進(jìn)程通信的類型 低級(jí)通信低級(jí)通信高級(jí)通信高級(jí)通信(三大類三大類)共享存儲(chǔ)器系統(tǒng)共享存儲(chǔ)器系統(tǒng)消息傳遞系統(tǒng)消息傳遞系統(tǒng)(主要

23、用于網(wǎng)絡(luò))(主要用于網(wǎng)絡(luò))管道通信管道通信(首創(chuàng)于(首創(chuàng)于Unix系統(tǒng))系統(tǒng)) 642.5 進(jìn)程通信進(jìn)程通信 1. 1. 共享存儲(chǔ)器系統(tǒng)共享存儲(chǔ)器系統(tǒng) 在共享存儲(chǔ)器系統(tǒng)中,相互通信的進(jìn)程共享某在共享存儲(chǔ)器系統(tǒng)中,相互通信的進(jìn)程共享某些數(shù)據(jù)結(jié)構(gòu)或共享存儲(chǔ)區(qū),進(jìn)程之間能夠通過些數(shù)據(jù)結(jié)構(gòu)或共享存儲(chǔ)區(qū),進(jìn)程之間能夠通過這些空間進(jìn)行通信。這些空間進(jìn)行通信。 (1) 基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式 (2) 基于共享存儲(chǔ)區(qū)的通信方式基于共享存儲(chǔ)區(qū)的通信方式652.5 進(jìn)程通信進(jìn)程通信 基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式 在這種通信方式中,諸進(jìn)程公用某些數(shù)據(jù)結(jié)構(gòu),借以實(shí)現(xiàn)諸進(jìn)程間的信息交換。 程

24、序員:公用數(shù)據(jù)結(jié)構(gòu)的設(shè)置及對(duì)進(jìn)程間同步的處理 操作系統(tǒng):提供共享存儲(chǔ)器(如緩沖池、緩沖區(qū)) 特點(diǎn):低效,只適合傳遞相對(duì)少量的數(shù)據(jù),屬于低級(jí)通信。662.5 進(jìn)程通信進(jìn)程通信 基于共享存儲(chǔ)區(qū)的通信方式 在存儲(chǔ)器中劃出了一塊共享存儲(chǔ)區(qū),諸進(jìn)程可通過對(duì)共享存儲(chǔ)區(qū)中數(shù)據(jù)的讀或?qū)憗?lái)實(shí)現(xiàn)通信。 672.5 進(jìn)程通信進(jìn)程通信2. 消息傳遞系統(tǒng)消息傳遞系統(tǒng)(主要用于網(wǎng)絡(luò))(主要用于網(wǎng)絡(luò)) 操作系統(tǒng)隱藏了通信的實(shí)現(xiàn)細(xì)節(jié),簡(jiǎn)化了通信程序編制的復(fù)雜性。682.5 進(jìn)程通信進(jìn)程通信直接通信方式發(fā)送進(jìn)程直接把消息發(fā)送給目標(biāo)進(jìn)程發(fā)送進(jìn)程和接收進(jìn)程都以顯式方式分別提供對(duì)方的標(biāo)識(shí)符系統(tǒng)提供兩條通信原語(yǔ)Send(Receive

25、r,message);Receive(Sender,message);例如:Send(P2,m1); Receive(P1,m1);試用直接通信方式解決生產(chǎn)者-消費(fèi)者問題692.5 進(jìn)程通信進(jìn)程通信解決生產(chǎn)者一消費(fèi)者問題解決生產(chǎn)者一消費(fèi)者問題repeat produce an item in nextp; Send(consumer,nextp);until false; repeat Receive(producer, nextp); Consumer the item in nextc;until false;702.5 進(jìn)程通信進(jìn)程通信間接通信方式v進(jìn)程之間的通信需要通過某種中間實(shí)體,該

26、實(shí)體用來(lái)暫存發(fā)送進(jìn)程發(fā)送給目標(biāo)進(jìn)程的消息;接收進(jìn)程則從該實(shí)體中取出對(duì)方發(fā)給自己的消息。v這種中間實(shí)體成為信箱這種中間實(shí)體成為信箱v消息在信箱中可以安全地保存,只允許核準(zhǔn)的目標(biāo)消息在信箱中可以安全地保存,只允許核準(zhǔn)的目標(biāo)用戶隨時(shí)讀取,故可實(shí)現(xiàn)非實(shí)時(shí)通信。用戶隨時(shí)讀取,故可實(shí)現(xiàn)非實(shí)時(shí)通信。71間接通信方式間接通信方式 信箱可由操作系統(tǒng)創(chuàng)建,也可由用戶進(jìn)程創(chuàng)建,創(chuàng)建者是信箱信箱可由操作系統(tǒng)創(chuàng)建,也可由用戶進(jìn)程創(chuàng)建,創(chuàng)建者是信箱的擁有者。據(jù)此,可把信箱分為以下三類。的擁有者。據(jù)此,可把信箱分為以下三類。1) 私用信箱私用信箱v用戶進(jìn)程建立,作為該進(jìn)程的一部分。用戶進(jìn)程建立,作為該進(jìn)程的一部分。v擁有者

27、有權(quán)讀消息,其它用戶只能發(fā)送。擁有者有權(quán)讀消息,其它用戶只能發(fā)送。v采用單向通信鏈路。采用單向通信鏈路。v進(jìn)程結(jié)束時(shí)信箱也消失。進(jìn)程結(jié)束時(shí)信箱也消失。2.5 進(jìn)程通信進(jìn)程通信722) 公用信箱公用信箱v它由操作系統(tǒng)創(chuàng)建。它由操作系統(tǒng)創(chuàng)建。v提供給系統(tǒng)中的所有核準(zhǔn)進(jìn)程使用。提供給系統(tǒng)中的所有核準(zhǔn)進(jìn)程使用。v進(jìn)程既發(fā)送也可取出。進(jìn)程既發(fā)送也可取出。v采用雙向通信鏈路的信箱來(lái)實(shí)現(xiàn)。采用雙向通信鏈路的信箱來(lái)實(shí)現(xiàn)。v系統(tǒng)運(yùn)行期間始終存在。系統(tǒng)運(yùn)行期間始終存在。3) 共享信箱共享信箱v它由某進(jìn)程創(chuàng)建,創(chuàng)建指出共享進(jìn)程它由某進(jìn)程創(chuàng)建,創(chuàng)建指出共享進(jìn)程(用戶用戶)的名字。的名字。v信箱的擁有者和共享者,都有權(quán)

28、從信箱中取走發(fā)送給自己的信箱的擁有者和共享者,都有權(quán)從信箱中取走發(fā)送給自己的 消息。消息。 2.5 進(jìn)程通信進(jìn)程通信73 在利用信箱通信時(shí),在發(fā)送進(jìn)程和接收進(jìn)程之間,存在以在利用信箱通信時(shí),在發(fā)送進(jìn)程和接收進(jìn)程之間,存在以下四種關(guān)系:下四種關(guān)系: (1) 一對(duì)一關(guān)系一對(duì)一關(guān)系。這時(shí)可為發(fā)送進(jìn)程和接收進(jìn)程建立一條兩。這時(shí)可為發(fā)送進(jìn)程和接收進(jìn)程建立一條兩者專用的通信鏈路,使兩者之間的交互不受其他進(jìn)程的干擾。者專用的通信鏈路,使兩者之間的交互不受其他進(jìn)程的干擾。 (2) 多對(duì)一關(guān)系多對(duì)一關(guān)系。允許提供服務(wù)的進(jìn)程與多個(gè)用戶進(jìn)程之間。允許提供服務(wù)的進(jìn)程與多個(gè)用戶進(jìn)程之間進(jìn)行交互,也稱為客戶進(jìn)行交互,也稱

29、為客戶/服務(wù)器交互服務(wù)器交互(client/server interaction)。 (3) 一對(duì)多關(guān)系一對(duì)多關(guān)系。允許一個(gè)發(fā)送進(jìn)程與多個(gè)接收進(jìn)程進(jìn)行。允許一個(gè)發(fā)送進(jìn)程與多個(gè)接收進(jìn)程進(jìn)行交互,使發(fā)送進(jìn)程可用廣播方式,向接收者交互,使發(fā)送進(jìn)程可用廣播方式,向接收者(多個(gè)多個(gè))發(fā)送消息。發(fā)送消息。 (4) 多對(duì)多關(guān)系多對(duì)多關(guān)系。允許建立一個(gè)公用信箱,讓多個(gè)進(jìn)程都。允許建立一個(gè)公用信箱,讓多個(gè)進(jìn)程都能向信箱中投遞消息;也可從信箱中取走屬于自己的消息。能向信箱中投遞消息;也可從信箱中取走屬于自己的消息。 2.5 進(jìn)程通信進(jìn)程通信743. 管道通信管道通信(首創(chuàng)于(首創(chuàng)于Unix系統(tǒng))系統(tǒng)) 所謂所謂“

30、管道管道”,是指用于連接一個(gè)讀進(jìn)程和一個(gè)寫進(jìn)程以,是指用于連接一個(gè)讀進(jìn)程和一個(gè)寫進(jìn)程以實(shí)現(xiàn)他們之間通信的一個(gè)實(shí)現(xiàn)他們之間通信的一個(gè)共享文件共享文件,又名,又名pipepipe文件。文件。 向管道提供輸入的進(jìn)程(稱寫進(jìn)程),以字符流的形式將大量數(shù)據(jù)送入管道,而接受管道輸出的進(jìn)程(讀進(jìn)程)可從管道中接收數(shù)據(jù)。該方式首創(chuàng)于UNIX,它能傳送大量數(shù)據(jù),被廣泛采用。 發(fā)送進(jìn)程發(fā)送進(jìn)程接收進(jìn)程接收進(jìn)程字符流方式寫入讀出字符流方式寫入讀出先進(jìn)先出順序先進(jìn)先出順序2.5 進(jìn)程通信進(jìn)程通信752.5 進(jìn)程通信進(jìn)程通信762.6 線程線程n引入進(jìn)程的目的引入進(jìn)程的目的是為了使多個(gè)程序并發(fā)執(zhí)行,是為了使多個(gè)程序并發(fā)

31、執(zhí)行,以提高資源利用率和系統(tǒng)吞吐量。以提高資源利用率和系統(tǒng)吞吐量。n引入線程引入線程則是為了減少程序并發(fā)執(zhí)行時(shí)的所則是為了減少程序并發(fā)執(zhí)行時(shí)的所付出的時(shí)空開銷,使付出的時(shí)空開銷,使OSOS具有更好的并發(fā)性。具有更好的并發(fā)性。n線程主要用于線程主要用于多多CPUCPU和和網(wǎng)絡(luò)操作系統(tǒng)網(wǎng)絡(luò)操作系統(tǒng)77進(jìn)程的兩個(gè)基本屬性進(jìn)程的兩個(gè)基本屬性 回憶:回憶: (1)進(jìn)程是一個(gè)擁有資源的基本單位。)進(jìn)程是一個(gè)擁有資源的基本單位。 (2 2)進(jìn)程同時(shí)又是一個(gè)可獨(dú)立調(diào)度和分派的基本單位。)進(jìn)程同時(shí)又是一個(gè)可獨(dú)立調(diào)度和分派的基本單位。 進(jìn)程作為一個(gè)資源擁有者,在創(chuàng)建、撤消、切換中,進(jìn)程作為一個(gè)資源擁有者,在創(chuàng)建、

32、撤消、切換中,系統(tǒng)必須為之付出較大時(shí)空開銷。所以系統(tǒng)中進(jìn)程的數(shù)系統(tǒng)必須為之付出較大時(shí)空開銷。所以系統(tǒng)中進(jìn)程的數(shù)量不宜過多,進(jìn)程切換的頻率不宜過高,但這也就限制量不宜過多,進(jìn)程切換的頻率不宜過高,但這也就限制了并發(fā)程度的進(jìn)一步提高。了并發(fā)程度的進(jìn)一步提高。78 為解決此問題,人們想到將進(jìn)程的上述兩個(gè)屬性分為解決此問題,人們想到將進(jìn)程的上述兩個(gè)屬性分開,即對(duì)作為調(diào)度和分派的基本單位,不同時(shí)作為開,即對(duì)作為調(diào)度和分派的基本單位,不同時(shí)作為獨(dú)立分配資源的單位,應(yīng)該獨(dú)立分配資源的單位,應(yīng)該“輕裝上陣輕裝上陣”;對(duì)擁有;對(duì)擁有資源的單位,不對(duì)之進(jìn)行頻繁切換。資源的單位,不對(duì)之進(jìn)行頻繁切換。 線程因而產(chǎn)生線

33、程因而產(chǎn)生。2.6 線程線程79線程的屬性線程的屬性 輕型實(shí)體。線程中的實(shí)體基本上不擁有系輕型實(shí)體。線程中的實(shí)體基本上不擁有系統(tǒng)資源統(tǒng)資源 獨(dú)立調(diào)度和分派的基本單位。線程的切換獨(dú)立調(diào)度和分派的基本單位。線程的切換非常迅速、開銷小。非常迅速、開銷小。 可并發(fā)執(zhí)行??刹l(fā)執(zhí)行。 共享進(jìn)程資源共享進(jìn)程資源。2.6 線程線程80 進(jìn)程與程序的區(qū)別 進(jìn)程是動(dòng)態(tài)的,程序是靜態(tài)的;進(jìn)程具有并進(jìn)程是動(dòng)態(tài)的,程序是靜態(tài)的;進(jìn)程具有并發(fā)性,而程序具有順序性;進(jìn)程具有獨(dú)立性,發(fā)性,而程序具有順序性;進(jìn)程具有獨(dú)立性,是資源分配和調(diào)度的基本單位,而程序無(wú)此是資源分配和調(diào)度的基本單位,而程序無(wú)此特性;進(jìn)程和程序間沒有一一

34、對(duì)應(yīng)關(guān)系;進(jìn)特性;進(jìn)程和程序間沒有一一對(duì)應(yīng)關(guān)系;進(jìn)程異步運(yùn)行,會(huì)相互制約,程序不具備此特程異步運(yùn)行,會(huì)相互制約,程序不具備此特性。性。2.6 線程線程81 12. 設(shè)與某資源相關(guān)聯(lián)的信號(hào)量初值為設(shè)與某資源相關(guān)聯(lián)的信號(hào)量初值為3,當(dāng)前值為,當(dāng)前值為1,若,若M表示該資表示該資源的可用個(gè)數(shù),源的可用個(gè)數(shù),N表示等待資源的進(jìn)程數(shù),則表示等待資源的進(jìn)程數(shù),則M,N分別是(分別是( ) A. 0,1 B. 1,0 C. 1,2 D. 2,0解:解:B829在生產(chǎn)者在生產(chǎn)者消費(fèi)者問題中,能否將生產(chǎn)者進(jìn)程的消費(fèi)者問題中,能否將生產(chǎn)者進(jìn)程的wait(empty)和和wait(mutex)語(yǔ)句互換,為什么?語(yǔ)句互換,為什么?不能。(不能。(2分)分)因?yàn)檫@樣可能導(dǎo)致系統(tǒng)死鎖。當(dāng)系統(tǒng)中沒有空緩沖時(shí),生產(chǎn)者進(jìn)程的因?yàn)檫@樣可能導(dǎo)致系統(tǒng)死鎖。當(dāng)系統(tǒng)中沒有空緩沖時(shí),生產(chǎn)者進(jìn)程的wait(mutex)操作獲取了緩沖隊(duì)列的控制權(quán),而操作獲取了緩沖隊(duì)列的控制權(quán),而wait(empty) 導(dǎo)致生產(chǎn)者進(jìn)程導(dǎo)致生產(chǎn)者進(jìn)程阻塞,這時(shí)消費(fèi)者進(jìn)程也無(wú)法執(zhí)行。(阻塞

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論