計(jì)算機(jī)操作系統(tǒng)——進(jìn)程管理.ppt_第1頁(yè)
計(jì)算機(jī)操作系統(tǒng)——進(jìn)程管理.ppt_第2頁(yè)
計(jì)算機(jī)操作系統(tǒng)——進(jìn)程管理.ppt_第3頁(yè)
計(jì)算機(jī)操作系統(tǒng)——進(jìn)程管理.ppt_第4頁(yè)
計(jì)算機(jī)操作系統(tǒng)——進(jìn)程管理.ppt_第5頁(yè)
已閱讀5頁(yè),還剩121頁(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、,第二章 進(jìn)程管理,第二章 進(jìn)程管理,本章內(nèi)容 2.1 進(jìn)程的基本概念 2.2 進(jìn)程控制 2.3 進(jìn)程同步 2.4 經(jīng)典進(jìn)程的同步問題 2.5 進(jìn)程通信 2.6 線程,第二章 進(jìn)程管理,目的及要求 領(lǐng)會(huì)程序順序執(zhí)行和并發(fā)執(zhí)行的特征; 掌握進(jìn)程的概念和特征、進(jìn)程的基本狀態(tài)及轉(zhuǎn)換 理解進(jìn)程控制塊PCB的作用、包含信息和組織方式;,2.1 進(jìn)程的基本概念,2.1.1 程序的順序執(zhí)行及其特征 1.程序的順序執(zhí)行 一個(gè)程序由若干個(gè)程序段組成,而這些程序段的執(zhí)行必須是順序的,這種程序執(zhí)行的方式就稱為程序的順序執(zhí)行。,2.1 進(jìn)程的基本概念,例:討論單道系統(tǒng)的工作情況 對(duì)用戶作業(yè)的處理 首先輸入用戶的程序和

2、數(shù)據(jù) Input 然后進(jìn)行計(jì)算 Caculate 最后打印計(jì)算結(jié)果 Print 即有三個(gè)順序執(zhí)行的操作 I:輸入操作 C:計(jì)算操作 P:輸出操作,2.1 進(jìn)程的基本概念,2. 程序順序執(zhí)行時(shí)的特征 (1) 順序性 處理機(jī)的操作嚴(yán)格按照程序所規(guī)定的順序執(zhí)行。 (2) 封閉性 程序一旦開始執(zhí)行,其計(jì)算結(jié)果不受外界因素的影響。 (3) 可再現(xiàn)性 程序執(zhí)行的結(jié)果與它的執(zhí)行速度無關(guān)(即與時(shí)間無關(guān)),而只與初始條件有關(guān)。,2.1 進(jìn)程的基本概念,2.1.2 前趨圖 前趨圖是一個(gè)有向無循環(huán)圖(DAG),用于描述進(jìn)程之間執(zhí)行的前后關(guān)系 結(jié)點(diǎn):描述一個(gè)程序段或進(jìn)程,或一條語(yǔ)句 有向邊:結(jié)點(diǎn)之間的偏序或前序關(guān)系“

3、” =(Pi,Pj) Pi must complete before Pj may start 若(Pi,Pj),記為PiPj,則 Pi是Pj的直接前趨,Pj是Pi的直接后繼,2.1 進(jìn)程的基本概念,前趨關(guān)系: 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,P4),( P2,P5),( P3,P5),( P4,P6),(P4,P7),( P5,P8),( P6,P8),( P7,P9),(

4、 P8,P9),名詞:初始結(jié)點(diǎn); 終止結(jié)點(diǎn); 重量,2.1 進(jìn)程的基本概念,注意:前趨圖中禁止存在循環(huán),前趨關(guān)系:S2S3, S3S2,不可能滿足,2.1 進(jìn)程的基本概念,2.1.3 程序的并發(fā)執(zhí)行及其特征 1. 程序的并發(fā)執(zhí)行 例: 在系統(tǒng)中有n個(gè)作業(yè),每個(gè)作業(yè)都有三個(gè)處理步驟,輸入數(shù)據(jù)、處理、輸出,即Ii,Ci,Pi (i=1,2,3,.,n)。,2.1.3 程序的并發(fā)執(zhí)行及其特征,例如: I1、C1、P1的執(zhí)行必須嚴(yán)格按照I1,C1,P1的順序; 而C1與I2,P1與C2、I3是可以同時(shí)執(zhí)行的。,又如:四個(gè)程序段 S1: a:=x+2 S2: b:=y+4 S3: c:=a+b S4:

5、d:=c+b,2. 程序并發(fā)執(zhí)行時(shí)的特征 (1)間斷性 在多道程序設(shè)計(jì)的環(huán)境下,程序的并發(fā)執(zhí)行,以及為完成一項(xiàng)任務(wù)而相互合作,這些程序之間要共享系統(tǒng)的資源,形成了相互制約的關(guān)系。 相互制約導(dǎo)致并發(fā)程序具有“執(zhí)行暫停執(zhí)行”這種間斷性的活動(dòng)規(guī)律。,2.1.2 程序的并發(fā)執(zhí)行及其特征,(1)間斷性 (2)失去封閉性 程序在并發(fā)執(zhí)行時(shí),系統(tǒng)的資源狀態(tài)由多道程序來改變,程序運(yùn)行失去封閉性。一程序的運(yùn)行受到其他程序的影響。 (3)不可再現(xiàn)性 程序在并發(fā)執(zhí)行時(shí),多次運(yùn)行初始條件相同的同一程序會(huì)得出不同的運(yùn)行結(jié)果。 例:共享公共變量的兩個(gè)程序,它們執(zhí)行時(shí)可能產(chǎn)生不同結(jié)果。,程序順序執(zhí)行時(shí)的特征 (1) 順序性

6、 (2) 封閉性 (3) 可再現(xiàn)性,2.1.3 程序的并發(fā)執(zhí)行及其特征,并發(fā)程序失去可再現(xiàn)性的例子,n:=0,例:討論共享公共變量的兩個(gè)程序, 它們執(zhí)行時(shí)可能產(chǎn)生的不同結(jié)果。,2.1 進(jìn)程的基本概念,2.1.4 進(jìn)程的特征與狀態(tài) 1. 進(jìn)程的特征和定義 在多道程序設(shè)計(jì)的環(huán)境下,為了描述程序在計(jì)算機(jī)系統(tǒng)內(nèi)的執(zhí)行情況,必須引入新的概念-進(jìn)程。 1)進(jìn)程的定義 進(jìn)程:程序關(guān)于某個(gè)數(shù)據(jù)集合的一次執(zhí)行過程。,2.1 進(jìn)程的基本概念,行為的一個(gè)規(guī)則叫做程序,程序在處理機(jī)上執(zhí)行時(shí)所發(fā)生的活動(dòng)稱為進(jìn)程(Dijkstra)。 進(jìn)程是這樣的計(jì)算部分,它是可以和其它計(jì)算并行的一個(gè)計(jì)算。(Donovan) 進(jìn)程(有時(shí)

7、稱為任務(wù))是一個(gè)程序與其數(shù)據(jù)一道通過處理機(jī)的執(zhí)行所發(fā)生的活動(dòng)。(Alan.C. Shaw) 進(jìn)程是執(zhí)行中的程序。(Ken Thompson and Dennis Ritchie ),進(jìn)程的其它定義,2)進(jìn)程的特征(與程序比較) (1) 結(jié)構(gòu)特征 進(jìn)程控制塊(PCB) + 程序 + 數(shù)據(jù) = 進(jìn)程實(shí)體 (2) 動(dòng)態(tài)性-最基本特征 進(jìn)程:進(jìn)程實(shí)體的一次執(zhí)行過程,有生命周期 程序:程序是一組有序指令的集合,是靜態(tài)的概念。,(3) 并發(fā)性 (4) 獨(dú)立性 (5) 異步性 進(jìn)程按各自獨(dú)立的、不可預(yù)知的速度向前推進(jìn),1. 進(jìn)程的特征和定義,2. 進(jìn)程的三種基本狀態(tài) (1)就緒狀態(tài)(Ready) 進(jìn)程已獲得

8、除CPU之外的所有必需的資源,一旦得到CPU控制權(quán),立即可以運(yùn)行。 (2)運(yùn)行狀態(tài)(Running) 進(jìn)程已獲得運(yùn)行所必需的資源,它的程序正在處理機(jī)上執(zhí)行。 (3)阻塞狀態(tài)(Blocked) 正在執(zhí)行的進(jìn)程由于發(fā)生某事件而暫時(shí)無法執(zhí)行時(shí),便放棄處理機(jī)而處于暫停狀態(tài),稱該進(jìn)程處于阻塞狀態(tài)或等待狀態(tài)。 就緒隊(duì)列與阻塞隊(duì)列,2.1.4 進(jìn)程的特征與狀態(tài),進(jìn)程的三種基本狀態(tài)以及各狀態(tài)之間的轉(zhuǎn)換,2.1.4 進(jìn)程的特征與狀態(tài),3. 掛起狀態(tài) 1) 引起掛起狀態(tài)的原因: 終端用戶的請(qǐng)求 父進(jìn)程請(qǐng)求 負(fù)荷調(diào)節(jié)的需要 操作系統(tǒng)的需要 2) 進(jìn)程狀態(tài)的轉(zhuǎn)換 引入掛起狀態(tài)后,增加了掛起狀態(tài)(靜止?fàn)顟B(tài))到非掛起狀態(tài)

9、(活動(dòng)狀態(tài))的轉(zhuǎn)換,或者相反。,2.1.4 進(jìn)程的特征與狀態(tài),1.活動(dòng)就緒靜止就緒,2.活動(dòng)阻塞靜止阻塞,3.靜止就緒活動(dòng)就緒,4.靜止阻塞活動(dòng)阻塞,2.1.4 進(jìn)程的特征與狀態(tài),readya,readys,blockeda,blockeds,2.1 進(jìn)程的基本概念,2.1.5 進(jìn)程控制塊(PCB) 1. 進(jìn)程控制塊的作用 2. 進(jìn)程控制塊中的信息 3. 進(jìn)程控制塊的組織方式,2.1 進(jìn)程的基本概念,2.1.5 進(jìn)程控制塊(PCB) 1. 進(jìn)程控制塊的作用 存放進(jìn)程管理和控制信息的數(shù)據(jù)結(jié)構(gòu)稱為進(jìn)程控制塊。它是進(jìn)程管理和控制的最重要的數(shù)據(jù)結(jié)構(gòu),在創(chuàng)建時(shí),建立PCB,并伴隨進(jìn)程運(yùn)行的全過程,直到進(jìn)

10、程撤消而撤消。PCB就象我們的戶口。 PCB是進(jìn)程存在的唯一標(biāo)志。 系統(tǒng)的所有PCB組織成鏈表或隊(duì)列,常駐內(nèi)存的PCB區(qū)。,2.1.5 進(jìn)程控制塊(PCB),2. 進(jìn)程控制塊中的信息 1) 進(jìn)程標(biāo)示符 每個(gè)進(jìn)程都必須有一個(gè)唯一的標(biāo)識(shí)符 內(nèi)部標(biāo)示符 外部標(biāo)示符 2) 處理機(jī)狀態(tài) 處理機(jī)狀態(tài)信息主要由處理機(jī)的各種寄存器中的內(nèi)容組成。處理機(jī)運(yùn)行時(shí)的信息存放在寄存器中,當(dāng)被中斷時(shí)這些信息要存放在PCB中。,2.1.5 進(jìn)程控制塊(PCB),3) 進(jìn)程調(diào)度信息 進(jìn)程狀態(tài) 進(jìn)程優(yōu)先級(jí) 進(jìn)程調(diào)度所需的其他信息 事件 4) 進(jìn)程控制信息 程序和數(shù)據(jù)的地址 進(jìn)程通信和同步機(jī)制 資源清單 鏈接指針,2.1.5 進(jìn)

11、程控制塊(PCB),3.進(jìn)程控制塊的組織方式 1) 鏈接方式 把具有同一狀態(tài)的PCB用其中的鏈接字鏈接成一個(gè)隊(duì)列。 就緒隊(duì)列; 若干個(gè)阻塞隊(duì)列;,2.1.5 進(jìn)程控制塊(PCB),3.進(jìn)程控制塊的組織方式 2) 索引方式 系統(tǒng)根據(jù)所有進(jìn)程的狀態(tài)建立幾張索引表,把各表的內(nèi)存首地址記錄在內(nèi)存的專用單元中。索引表的表目中記錄了相應(yīng)狀態(tài)的某個(gè)PCB在PCB表中的地址。,第二章 進(jìn)程管理,本章內(nèi)容 2.1 進(jìn)程的基本概念 2.2 進(jìn)程控制 2.3 進(jìn)程同步 2.4 經(jīng)典進(jìn)程的同步問題 2.5 管程機(jī)制 2.6 進(jìn)程通信 2.7 線程,2.2 進(jìn)程控制,對(duì)系統(tǒng)中的全部進(jìn)程實(shí)施有效的管理,包括進(jìn)程創(chuàng)建、終止

12、、進(jìn)程阻塞和喚醒。 2.2.1進(jìn)程的創(chuàng)建 1.進(jìn)程圖 描述進(jìn)程的家族關(guān)系的有向樹,2.進(jìn)程的創(chuàng)建 操作系統(tǒng)發(fā)現(xiàn)要求創(chuàng)建新進(jìn)程的事件后,調(diào)用進(jìn)程創(chuàng)建原語(yǔ)Creat()創(chuàng)建新進(jìn)程。,1.引起進(jìn)程終止的事件 1)正常結(jié)束 2)異常結(jié)束 越界錯(cuò)誤、非法指令 等 3)外界干預(yù) 操作員或操作系統(tǒng)干預(yù); 父進(jìn)程請(qǐng)求; 父進(jìn)程終止,2.2.2 進(jìn)程的終止,2.進(jìn)程的終止過程,2.2.2 進(jìn)程的終止,1.引起進(jìn)程阻塞和喚醒的事件 1)請(qǐng)求系統(tǒng)服務(wù) 2)啟動(dòng)某種操作 3)新數(shù)據(jù)尚未到達(dá) 4)無新工作可做 2.進(jìn)程阻塞過程,2.2.3 進(jìn)程的阻塞與喚醒,調(diào)用阻塞原語(yǔ)阻塞自己; 將PCB中的狀態(tài)改為 阻塞,并加入阻塞

13、隊(duì)列; 轉(zhuǎn)進(jìn)程調(diào)度。,3.進(jìn)程喚醒過程 把阻塞進(jìn)程從等待該事件的阻塞隊(duì)列中移出; 置進(jìn)程狀態(tài)為就緒態(tài),將PCB插入到就緒隊(duì)列中。 阻塞原語(yǔ)與喚醒原語(yǔ)作用相反,成對(duì)使用,阻塞進(jìn)程等待的事件發(fā)生,有關(guān)進(jìn)程調(diào)用喚醒原語(yǔ) wakeup()喚醒等待該事件的進(jìn)程,2.2.4 進(jìn)程的掛起與激活,1.進(jìn)程的掛起過程 檢查被掛起進(jìn)程的狀態(tài): 若處于活動(dòng)就緒,則改為靜止就緒; 若處于活動(dòng)阻塞,則改為靜止阻塞; 若掛起的進(jìn)程正在執(zhí)行,則重新進(jìn)行進(jìn)程調(diào)度。,當(dāng)出現(xiàn)引起進(jìn)程掛起的事件時(shí),系統(tǒng)利用掛起原語(yǔ)suspend()將指定進(jìn)程或處于阻塞的進(jìn)程掛起。,2.2.4 進(jìn)程的掛起與激活,2.進(jìn)程的激活過程 1) 激活原語(yǔ)先

14、將進(jìn)程從外存調(diào)入內(nèi)存; 2) 檢查該進(jìn)程的狀態(tài): 若為靜止就緒,則改為活動(dòng)就緒; 若為靜止阻塞,則改為活動(dòng)阻塞。,當(dāng)發(fā)生激活進(jìn)程的事件時(shí),系統(tǒng)利用激活原語(yǔ)active()將指定進(jìn)程激活。,作業(yè),課本 P.81 2、3、5、6,第二章 進(jìn)程管理,本章內(nèi)容 2.1 進(jìn)程的基本概念 2.2 進(jìn)程控制 2.3 進(jìn)程同步 2.4 經(jīng)典進(jìn)程的同步問題 2.5 進(jìn)程通信 2.6 線程,第二章 進(jìn)程管理,目的及要求,理解臨界資源和臨界區(qū)的概念; 熟練掌握利用信號(hào)量機(jī)制解決進(jìn)程同步問題;,2.3 進(jìn)程同步,2.3.1 進(jìn)程的同步基本概念 2.3.2 信號(hào)量機(jī)制 2.3.3 信號(hào)量的應(yīng)用,對(duì)多個(gè)相關(guān)進(jìn)程在執(zhí)行次序

15、上進(jìn)行協(xié)調(diào),使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資源和相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性。,進(jìn)程同步的主要任務(wù):,2.3.1 進(jìn)程同步的基本概念,1.進(jìn)程間兩種形式的制約關(guān)系 (1) 間接相互制約關(guān)系 - 源于資源共享 (2) 直接相互制約關(guān)系 - 源于進(jìn)程合作,臨界資源(Critical Resource):把一段時(shí)間內(nèi)只允許一個(gè)進(jìn)程訪問的資源稱為臨界資源或獨(dú)占資源 臨界區(qū)(Critical Section):每個(gè)進(jìn)程中訪問臨界資源的那段代碼稱為臨界區(qū),2. 臨界資源,2. 臨界資源 生產(chǎn)者消費(fèi)者問題:,2.3.1 進(jìn)程同步的基本概念,生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程都以異步方式運(yùn)行,但它們之間必須

16、保持同步。,2.3 進(jìn)程同步,生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程共享的變量: Var n, integer; type item=; var buffer: array0, 1, , n-1 of item; in, out: 0, 1, , n-1; counter:0, 1, , n;,用數(shù)組表示具有n個(gè)緩沖區(qū)的緩沖池,注意:緩沖池組織為循環(huán)緩沖,輸入指針 加1表示為in:=(in+1)mod n,輸出指針 加1表示為out:=(out+1)mod n,當(dāng) (in+1)mod n=out時(shí)表示緩沖池滿, in=out表示緩沖池空。,初始值為0,放入產(chǎn)品使其加1,取出產(chǎn)品使其減1,輸入指針in指示下一個(gè)

17、可投放產(chǎn)品的緩沖區(qū),輸出指針out指示下一個(gè)可從中獲取產(chǎn)品的緩沖區(qū),初值均為1。,Producer: repeat produce 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 ne

18、xtc; until false;,重復(fù)的測(cè)試條件,生產(chǎn)者消費(fèi)者問題:,2.3 進(jìn)程同步,并發(fā)執(zhí)行出錯(cuò)counter (初值為5) 生產(chǎn)者對(duì)它加1,消費(fèi)者對(duì)它減1 機(jī)器語(yǔ)言實(shí)現(xiàn):,counter應(yīng)當(dāng)為5 解決方法:把counter作為臨界資源,對(duì)其互斥訪問,3. 臨界區(qū) 臨界區(qū):進(jìn)程中訪問臨界資源的那段代碼 訪問臨界區(qū)的程序設(shè)計(jì)為: 對(duì)欲訪問的臨界資源進(jìn)行檢查, 若此刻未被訪問,設(shè)正在訪問的標(biāo)志 進(jìn)入?yún)^(qū) 訪問臨界資源 臨界區(qū) 將正在訪問的標(biāo)志恢復(fù)為未被訪問的標(biāo)志 退出區(qū) 其余部分 剩余區(qū),2.3.1進(jìn)程同步的基本概念,進(jìn)程互斥:兩進(jìn)程不能同時(shí)進(jìn)入同一臨界區(qū),Repeat entry secti

19、on critical section exit section remainder section until false,4.同步機(jī)制應(yīng)遵循的規(guī)則 空閑讓進(jìn) 忙則等待 有限等待 讓權(quán)等待,2.3 進(jìn)程同步,2.3.1 進(jìn)程同步的基本概念 2.3.2 信號(hào)量機(jī)制 2.3.3 信號(hào)量的應(yīng)用,1965年荷蘭Dijkstra提出的信號(hào)量(Semaphores)是一種卓有成效的進(jìn)程同步工具,在長(zhǎng)期的應(yīng)用中,得到了很大的發(fā)展,從整型信號(hào)量經(jīng)過記錄型信號(hào)量,進(jìn)而發(fā)展為“信號(hào)量集”機(jī)制。 信號(hào)量就是OS提供的管理公有資源的有效手段。 信號(hào)量代表可用資源實(shí)體的數(shù)量。,2.3.2 信號(hào)量機(jī)制,2.3.2 信號(hào)

20、量機(jī)制,1. 整型信號(hào)量 定義:把整型信號(hào)量定義為一個(gè)用于表示資源數(shù)目的整型量S,除初始化外,僅能通過兩個(gè)原子操作wait(S),signal(S)來訪問。 P操作 wait(S): While S=0 do no-op; S:=S-1; V操作 signal(S): S:=S+1; P、V操作是原子操作,不可中斷。,P(S),V(S),未遵循“讓權(quán)等待”原則,導(dǎo)致忙等,2.3 進(jìn)程同步,2. 記錄型信號(hào)量 引入整型變量value(代表資源數(shù)目)、進(jìn)程鏈表L (鏈接所有等待進(jìn)程) 記錄型數(shù)據(jù)結(jié)構(gòu): type semaphore=record value: integer; L: list of

21、 process; end;,Wait 操作: -申請(qǐng)資源,減量操作,S.value:=S.value-1 -當(dāng)S.value0時(shí),表示資源分配完,進(jìn)行自我阻塞。 Signal操作: -釋放資源,增量操作,S.value:=S.value+1 -當(dāng)S.value0,喚醒S.L鏈表中的等待進(jìn)程。,2.3 進(jìn)程同步,2. 記錄型信號(hào)量,type semaphore=record value: integer; L: list of process; end; S: semaphore;,2.3 進(jìn)程同步,3.AND型信號(hào)量,兩個(gè)進(jìn)程A和B,共享數(shù)據(jù)D和E,為其分別設(shè)置互斥信號(hào)量Dmutex和Emu

22、tex,初值均為1。,共享的資源越多,死鎖的可能越大,Process A: wait(Dmutex); 于是Dmutex=0 Process B: wait(Emutex); 于是Emutex=0 Process A: wait(Emutex); 于是Emutex=-1 A阻塞 Process B: wait(Dmutex); 于是Dmutex=-1 B阻塞,2.3 進(jìn)程同步,AND同步機(jī)制的基本思想:將進(jìn)程在整個(gè)運(yùn)行過程中需要的所有資源,一次性全部分配給進(jìn)程,待進(jìn)程使用完后再一起釋放。只要尚有一個(gè)資源未能分配給進(jìn)程,其他所有可能為之分配的資源,也不分配給它。即對(duì)臨界資源的分配采取原子操作。稱

23、為同時(shí)wait操作即Swait(),3.AND型信號(hào)量,Swait(S1, S2, , Sn) if Si =1 and and Sn=1 then for i:=1 to n do Si:= Si -1 ; endfor else Place the process in the waiting queue ssociated with the first Si found with Si 1,and set the progress count of this process to the beginning of Swait operation endif,Ssignal(S1, S2,

24、 , Sn) for i:=1 to n do Si:= Si +1 ; Remove all the process waiting in the queue associated with Si into the ready queue endfor,2.3 進(jìn)程同步,4.信號(hào)量集 記錄型信號(hào)量機(jī)制: 每次只能獲得或釋放一個(gè)單位的資源,低效 每次分配前必須測(cè)試資源數(shù)量,看其是否大于其下界值,對(duì)AND信號(hào)量機(jī)制加以擴(kuò)充 S 為信號(hào)量;t 為下限值;d 為需求值,Swait(S1, t1, d1, , Sn, tn, dn) if Si = t1 and and Sn= tn then for

25、 i:=1 to n do Si:= Si - di ; endfor else Place the executing process in the waiting queue of the first Si with Si ti and set its program counter to the beginning of the Swait Operation endif,Ssignal(S1, d1, , Sn, dn) for i:=1 to n do Si:= Si +di ; Remove all the process waiting in the queue associat

26、ed with Si into the ready queue endfor,一般信號(hào)量集的幾種特殊情況: Swait(S, d, d),只有一個(gè)信號(hào)量S,允許每次申請(qǐng)d個(gè)資源,若現(xiàn)有資源數(shù)少于d,不予分配。 Swait(S, 1, 1),蛻化為一般的記錄型信號(hào)量(S1時(shí))或互斥信號(hào)量(S=1時(shí))。 Swait(S, 1, 0),當(dāng)S=1時(shí),允許多個(gè)進(jìn)程進(jìn)入某特定區(qū),當(dāng)S變?yōu)?后,阻止任何進(jìn)程進(jìn)入特定區(qū),相當(dāng)于可控開關(guān)。,2.3 進(jìn)程同步,2.3.1 進(jìn)程同步的基本概念 2.3.2 信號(hào)量機(jī)制 2.3.3 信號(hào)量的應(yīng)用,2.3.3 信號(hào)量的應(yīng)用,1.利用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥(模式) 為使多個(gè)進(jìn)程

27、互斥的訪問某臨界資源,須為該資源設(shè)置一互斥信號(hào)量mutex,并設(shè)其初始值為1,然后將各進(jìn)程訪問資源的臨界區(qū)CS置于wait(mutex)和signal(mutex)之間即可。,Var mutex: semaphore :=1; begin parbegin process 1: begin repeat wait(mutex); critical section signal(mutex); remainder section until false; end process 2: begin repeat wait(mutex); critical section signal(mutex)

28、; remainder section until false; end parend,wait(mutex)和signal(mutex)必須成對(duì)出現(xiàn),用信號(hào)量機(jī)制實(shí)現(xiàn)互斥的模式,Var mutex: semaphore :=1; /表示打印機(jī) begin parbegin p1: begin repeat wait(mutex); 使用打印機(jī) signal(mutex); until false; end p2: begin repeat wait(mutex); 使用打印機(jī) signal(mutex); until false; end parend,例:用記錄型信號(hào)量實(shí)現(xiàn)兩個(gè) 進(jìn)程互斥使

29、用一臺(tái)打印機(jī),練習(xí):用記錄型信號(hào)量實(shí)現(xiàn) 三個(gè)進(jìn)程互斥使用一 臺(tái)打印機(jī),p3: begin repeat wait(mutex); 使用打印機(jī) signal(mutex); until false; end,2.3 進(jìn)程同步,2.利用信號(hào)量實(shí)現(xiàn)前驅(qū)關(guān)系(模式),設(shè)有兩個(gè)并發(fā)執(zhí)行的進(jìn)程P1和P2,P1中有語(yǔ)句S1,P2中有語(yǔ)句S2,希望在S1執(zhí)行后再執(zhí)行S2。,Var a, b, c, d, e, f, g; semaphore :=0, 0, 0, 0, 0, 0, 0; begin parbegin begin S1; signal(a); signal(b); end; begin wait

30、(a); S2; signal(c); signal(d); end; begin wait(b); S3; signal(e); end; begin wait(c); S4; signal(f); end; begin wait(d); S5; signal(g); end; begin wait(e); wait(f); wait(g); S6; end; parend end,第二章 進(jìn)程管理,本章內(nèi)容 2.1 進(jìn)程的基本概念 2.2 進(jìn)程控制 2.3 進(jìn)程同步 2.4 經(jīng)典進(jìn)程的同步問題 2.5 進(jìn)程通信 2.6 線程,第二章 進(jìn)程管理,目的及要求,理解經(jīng)典進(jìn)程同步問題 掌握進(jìn)程的通

31、信機(jī)制,2.4 經(jīng)典進(jìn)程的同步問題,2.4.1 生產(chǎn)者-消費(fèi)者問題 2.4.2 哲學(xué)家進(jìn)餐問題 2.4.3 讀者-寫者問題,生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程都以異步方式運(yùn)行,但它們之間必須保持同步。,2.4.1 生產(chǎn)者-消費(fèi)者問題,1. 利用記錄型信號(hào)量解決生產(chǎn)者-消費(fèi)者問題 可利用互斥信號(hào)量mutex實(shí)現(xiàn)諸進(jìn)程對(duì)緩沖池的互斥使用;利用信號(hào)量empty和full分別表示緩沖池中空緩沖池和滿緩沖池的數(shù)量。,生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程都以異步方式運(yùn)行,但它們之間必須保持同步。,2.4.1 生產(chǎn)者消費(fèi)者問題,1. 利用記錄型信號(hào)量解決生產(chǎn)者消費(fèi)者問題 可利用互斥信號(hào)量mutex實(shí)現(xiàn)諸進(jìn)程對(duì)緩沖池的互斥使用;利用信

32、號(hào)量empty和full分別表示緩沖池中空緩沖池和滿緩沖池的數(shù)量。 假定這些生產(chǎn)者和消費(fèi)者相互等效,相互合作的進(jìn)程關(guān)系的一種抽象。,Var mutex, empty, full: semaphore :=1, n, 0; buffer: array 0, , n-1 of item; in, out: integer :=0, 0; begin parbegin producer : begin repeat 生產(chǎn)一個(gè)產(chǎn)品放入nextp; wait(empty); wait(mutex); buffer(in):=nextp; in:=(in+1) mod n; signal(mutex);

33、signal(full); until false; end,mutex:生產(chǎn)者間,消費(fèi)者 間互斥使用緩沖區(qū) empty: 緩沖區(qū)的空閑容量 full: 緩沖區(qū)的已占容量,注意: 每個(gè)程序中用于實(shí)現(xiàn)互斥的wait(mutex)和signal(mutex)必須成對(duì)地出現(xiàn)。 對(duì)資源信號(hào)量empty和full的wait和signal操作,同樣需要成對(duì)地出現(xiàn),但處于不同的程序中。 在每個(gè)程序中的多個(gè)wait操作順序不能顛倒。應(yīng)先執(zhí)行對(duì)資源信號(hào)量的wait操作,再執(zhí)行對(duì)互斥信號(hào)量的wait操作,否則可能引起進(jìn)程死鎖。,2. 利用AND信號(hào)量解決生產(chǎn)者-消費(fèi)者問題,2.4.1 生產(chǎn)者-消費(fèi)者問題,2.4

34、經(jīng)典進(jìn)程的同步問題,2. 利用AND信號(hào)量解決生產(chǎn)者消費(fèi)者問題,Var mutex, empty, full: semaphore :=1, n, 0; buffer: array 0, , n-1 of item; in, out: integer :=0, 0; begin parbegin producer : begin repeat 生產(chǎn)一個(gè)產(chǎn)品 nextp; Swait(empty, mutex); buffer(in):=nextp; in:=(in+1) mod n; Ssignal(mutex, full); until false; end parend end,mutex

35、:生產(chǎn)者間,消費(fèi)者 間互斥使用緩沖區(qū) empty: 緩沖區(qū)的空閑容量 full: 緩沖區(qū)的已占容量,用AND型信號(hào)量解決生產(chǎn)者消費(fèi)者問題,2.4.2 哲學(xué)家進(jìn)餐問題,五個(gè)哲學(xué)家共用一張圓桌,分別坐在周圍的五張椅子上,在桌子上有五只碗和五支筷子,他們的生活方式是交替地進(jìn)行思考和進(jìn)餐。平時(shí),一個(gè)哲學(xué)家進(jìn)行思考,饑餓時(shí)便試圖取用其左右最靠近他的筷子,只有在他拿到兩只筷子時(shí)才能進(jìn)餐。進(jìn)餐畢,放下筷子繼續(xù)思考。,可見:相鄰兩位不能同時(shí)進(jìn)餐; 最多只能有兩人同時(shí)進(jìn)餐。,1.利用記錄型信號(hào)量解決哲學(xué)家進(jìn)餐問題,2.4.2 哲學(xué)家進(jìn)餐問題,放在桌子上的筷子是臨界資源,在一段時(shí)間內(nèi)只允許一個(gè)哲學(xué)家使用。為實(shí)現(xiàn)對(duì)

36、筷子的互斥使用,用一個(gè)信號(hào)量表示一只筷子,五個(gè)信號(hào)量構(gòu)成信號(hào)量數(shù)組。,Var chopstick: array 0, , 4 of semaphore:=1; 所有信號(hào)量均被初始化為1。,2.4.2 哲學(xué)家進(jìn)餐問題,放在桌子上的筷子是臨界資源,在一段時(shí)間內(nèi)只允許一個(gè)哲學(xué)家使用。為實(shí)現(xiàn)對(duì)筷子的互斥使用,用一個(gè)信號(hào)量表示一只筷子,五個(gè)信號(hào)量構(gòu)成信號(hào)量數(shù)組。,Var chopstick: array 0, , 4 of semaphore; 所有信號(hào)量均被初始化為1。,Var chopstick: array 0, , 4 of semaphore:=1; 第i 位哲學(xué)家的活動(dòng)可描述為: repea

37、t wait(chopstick i ); wait(chopstick ( i +1) mod 5 ); eat; signal(chopstick i ); signal(chopstick(i +1)mod 5); think; until false;,算法雖能保證相鄰兩位不會(huì)同時(shí)進(jìn)餐,但有可能引起死鎖。,假如五位哲學(xué)家同時(shí)饑餓而各自拿起左邊的筷子時(shí),就會(huì)使五個(gè)信號(hào)量chopstick均為0,當(dāng)他們?cè)僭噲D去拿右邊的筷子時(shí),都將因無筷子可拿而無限等待。,解決方法: 至多只允許有四位哲學(xué)家同時(shí)去拿左邊的筷子,最終能保證至少有一位哲學(xué)家能夠進(jìn)餐,并在用畢后釋放出他用過的兩只筷子,從而使更多的

38、哲學(xué)家能夠進(jìn)餐。 僅當(dāng)哲學(xué)家的左右兩只筷子均可用時(shí),才允許他拿起筷子進(jìn)餐。 規(guī)定奇數(shù)號(hào)哲學(xué)家先拿他左邊的筷子,然后再去拿右邊的筷子;偶數(shù)號(hào)哲學(xué)家則相反。,Var chopstick: array 0, , 4 of semaphore:=1; Var count: semaphore :=4; repeat wait(count); wait(chopstick i ); wait(chopstick ( i +1) mod 5 ); eat; signal(chopstick i ); signal(chopstick(i +1)mod 5); signal(count); think; u

39、ntil false;,Var chopstick: array 0, , 4 of semaphore:=1; Var count:=4; repeat if i mod 2=1 then begin wait(chopstick i ); wait(chopstick ( i +1) mod 5 ) end else begin wait(chopstick ( i +1) mod 5 ); wait(chopstick i ) end eat; signal(chopstick i ); signal(chopstick(i +1)mod 5); think; until false;,

40、2.利用AND信號(hào)量機(jī)制解決哲學(xué)家進(jìn)餐問題,在哲學(xué)家進(jìn)餐問題中,要求每個(gè)哲學(xué)家先獲得兩個(gè)臨界資源(筷子)后方能進(jìn)餐。本質(zhì)上是AND同步問題。,Var chopstick: array 0, , 4 of semaphore:=(1, 1, 1, 1, 1); Philosopher i repeat think; Swait(chopstick(i+1)mod 5,chopsticki ); eat; Ssignal(chopstick(i+1)mod 5, chopsticki ); until false;,2.4.2 哲學(xué)家進(jìn)餐問題,表示chopsticki可用,2.4.3 讀者-寫者問

41、題,一個(gè)數(shù)據(jù)文件或記錄可被多個(gè)進(jìn)程共享。 只要求讀文件的進(jìn)程稱為“Reader進(jìn)程”,其它進(jìn)程則稱為“Writer進(jìn)程”。 允許多個(gè)進(jìn)程同時(shí)讀一個(gè)共享對(duì)象,但不允許一個(gè)Writer進(jìn)程和其他Reader進(jìn)程或Writer進(jìn)程同時(shí)訪問共享對(duì)象 “讀者-寫者問題”是保證一個(gè)Writer進(jìn)程必須與其他進(jìn)程互斥地訪問共享對(duì)象的同步問題。,讀、讀共享; 寫、寫互斥; 寫、讀互斥,1.利用記錄型信號(hào)量解決讀者-寫者問題,互斥信號(hào)量wmutex: 實(shí)現(xiàn)Reader與Writer進(jìn)程間在讀或?qū)憰r(shí)的互斥,整型變量Readcount: 表示正在讀的進(jìn)程數(shù)目;,由于只要有一個(gè)Reader進(jìn)程在讀,便不允許Write

42、r進(jìn)程寫。 所以,僅當(dāng)Readcount=0,即無Reader進(jìn)程在讀時(shí),Reader才需要執(zhí)行Wait(wmutex)操作。若Wait(wmutex)操作成功,Reader進(jìn)程便可去讀,相應(yīng)地,做Readcount+1操作。,2.4.3 讀者-寫者問題,同理,僅當(dāng)Reader進(jìn)程在執(zhí)行了Readcount減1操作后其值為0時(shí),才需執(zhí)行signal(wmutex)操作,以便讓W(xué)rite進(jìn)程寫,互斥信號(hào)量rmutex: Reader進(jìn)程間互斥訪問Readcount,Var wmutex, rmutex :semaphore :=1, 1; Readcount :integer :=0; begi

43、n parbegin Reader : begin repeat wait(rmutex); if Readcount=0 then wait(wmutex); Readcount :=Readcount +1; signal(rmutex); 讀; wait(rmutex); Readcount :=Readcount -1; if Readcount=0 then signal(wmutex); signal(rmutex); until false; end parend end,Wmutex: 讀、寫互斥;寫、寫互斥 Rmutex: 讀間訪問Readcount互斥 Readcount:

44、 記錄讀者進(jìn)程數(shù),評(píng)價(jià):能實(shí)現(xiàn)讀者寫者問題 但讀優(yōu)先,對(duì)寫者不公平,2.利用信號(hào)量集機(jī)制解決讀者-寫者問題,增加一個(gè)限制:最多只允許RN個(gè)讀者同時(shí)讀。,引入信號(hào)量L,并賦予其初值RN,通過執(zhí)行Swait(L, 1, 1)操作,來控制讀者的數(shù)目。 每當(dāng)有一個(gè)讀者進(jìn)入時(shí),就要先執(zhí)行Swait(L, 1, 1)操作,使L的值減1。當(dāng)有RN個(gè)讀者進(jìn)入讀后,L便減為0,第RN +1個(gè)讀者要進(jìn)入讀時(shí),必然會(huì)因Swait(L, 1, 1)操作失敗而阻塞。,2.4 經(jīng)典進(jìn)程的同步問題,2. 利用信號(hào)量集機(jī)制解決讀者寫者問題,增加一個(gè)限制:最多只允許RN個(gè)讀者同時(shí)讀。,因此,引入信號(hào)量L,并賦予其初值RN,通過

45、執(zhí)行wait(L, 1, 1)操作,來控制讀者的數(shù)目。每當(dāng)有一個(gè)讀者進(jìn)入時(shí),就要先執(zhí)行wait(L, 1, 1)操作,使L的值減1。當(dāng)有RN個(gè)讀者進(jìn)入讀后,L便減為0,第RN +1個(gè)讀者要進(jìn)入讀時(shí),必然會(huì)因wait(L, 1, 1)操作失敗而阻塞。,Var RN integer; L, mx: semaphore :=RN, 1; begin parbegin reader : begin repeat Swait(L, 1, 1); Swait(mx, 1, 0); 讀; Ssignal(L, 1); until false; end parend end,L: 控制讀進(jìn)程的數(shù)目RN Mx:

46、 實(shí)現(xiàn)讀、寫互斥;寫、寫互斥,Swait(mx, 1, 0)語(yǔ)句起著開關(guān)的作用。只要無writer進(jìn)程進(jìn)入寫,mx=1,reader進(jìn)程就都可以進(jìn)入讀。但只要一旦有writer進(jìn)程進(jìn)入寫時(shí),mx=0,則任何reader進(jìn)程就都無法進(jìn)入讀。,Swait(mx, 1, 1; L, RN, 0)語(yǔ)句表示僅當(dāng)既無writer進(jìn)程在寫(mx=1),又無reader進(jìn)程在讀(L=RN),writer進(jìn)程才能進(jìn)入臨界區(qū)寫。,第二章 進(jìn)程管理,本章內(nèi)容 2.1 進(jìn)程的基本概念 2.2 進(jìn)程控制 2.3 進(jìn)程同步 2.4 經(jīng)典進(jìn)程的同步問題 2.5 進(jìn)程通信 2.6 線程,2.5 進(jìn)程通信,進(jìn)程通信:指進(jìn)程之間

47、的信息交換。 低級(jí)通信:進(jìn)程間僅交換一些狀態(tài)和少量數(shù)據(jù)。 進(jìn)程之間的互斥和同步低級(jí)通信 信號(hào)量機(jī)制作為通信工具的缺點(diǎn): (1)效率低 (2)通信對(duì)用戶不透明 高級(jí)通信:進(jìn)程間可交換大量數(shù)據(jù)。用戶可直接利用操作系統(tǒng)所提供的一組通信命令,高效地傳送大量數(shù)據(jù)的一種通信方式。 操作系統(tǒng)隱藏了進(jìn)程通信的細(xì)節(jié),對(duì)用戶透明,減少了通信程序編制上的復(fù)雜性。,2.5 進(jìn)程通信(高級(jí)通信),2.5.1 進(jìn)程通信的類型 2.5.2 消息傳遞通信的實(shí)現(xiàn)方法 2.5.3 消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問題 2.5.4 消息緩沖隊(duì)列通信機(jī)制,高級(jí)通信機(jī)制可歸結(jié)為三大類: 共享存儲(chǔ)器系統(tǒng) 消息傳遞系統(tǒng) 管道通信系統(tǒng),2.5.1

48、進(jìn)程通信的類型,2.5.1 進(jìn)程通信的類型,一、共享存儲(chǔ)器系統(tǒng) 相互通信的進(jìn)程間共享某些數(shù)據(jù)結(jié)構(gòu)或共享存儲(chǔ)區(qū),通過這些空間進(jìn)行通信。,1.基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式 進(jìn)程公用某些數(shù)據(jù)結(jié)構(gòu),借以實(shí)現(xiàn)諸進(jìn)程間的信息交換。 實(shí)現(xiàn):公用數(shù)據(jù)結(jié)構(gòu)的設(shè)置及對(duì)進(jìn)程間同步的處理,都是程 序員的職責(zé)。 操作系統(tǒng)-提供共享存儲(chǔ)器 特點(diǎn):低效。只適合傳遞相對(duì)少量的數(shù)據(jù)。,2.基于共享存儲(chǔ)區(qū)的通信方式 在存儲(chǔ)器中劃出一塊共享存儲(chǔ)區(qū),諸進(jìn)程可通過對(duì)共享存儲(chǔ)區(qū)中數(shù)據(jù)的讀或?qū)憗韺?shí)現(xiàn)通信。屬于高級(jí)通信,二、消息傳遞系統(tǒng) 進(jìn)程間的數(shù)據(jù)交換,以格式化的消息為單位。 程序員直接利用系統(tǒng)提供的一組通信命令(原語(yǔ))進(jìn)行通信。 例:計(jì)算

49、機(jī)網(wǎng)絡(luò):網(wǎng)絡(luò)報(bào)文 三、管道通信 管道:指用于連接一個(gè)讀進(jìn)程和一個(gè)寫進(jìn)程以實(shí)現(xiàn)他們之間 通信的一個(gè)打開的共享文件,又名pipe文件。,2.5.1 進(jìn)程通信的類型,管道機(jī)制提供的協(xié)調(diào)能力:互斥;同步;確定對(duì)方是否存在,2.5.2 消息傳遞通信的實(shí)現(xiàn)方法,進(jìn)程間通信時(shí),源進(jìn)程可以直接或間接地將消息傳送給目標(biāo)進(jìn)程,由此可將進(jìn)程通信分為直接通信和間接通信。 1.直接通信方式 發(fā)送進(jìn)程利用OS提供的發(fā)送命令,直接把消息發(fā)送給目標(biāo)進(jìn)程。發(fā)送進(jìn)程和接收進(jìn)程都以顯式方式提供對(duì)方的標(biāo)識(shí)符。,通信原語(yǔ): Send(Receiver, message); 發(fā)送一個(gè)消息給接收進(jìn)程 Receive(Sender, mes

50、sage); 接收Sender發(fā)來的消息,利用直接通信原語(yǔ)解決生產(chǎn)者-消費(fèi)者問題 當(dāng)生產(chǎn)者生產(chǎn)出一個(gè)產(chǎn)品(消息)后,便用Send原語(yǔ)將消息發(fā)送給消費(fèi)者進(jìn)程;而消費(fèi)者進(jìn)程則利用Receive原語(yǔ)來得到一個(gè)消息。若消息尚未產(chǎn)生出來,消費(fèi)者必須等待,直至生產(chǎn)者進(jìn)程將消息發(fā)送過來。,Producer: repeat produce an item in nextp; send(consumer, nextp); until false; Consumer: repeat receive(producer, nextc); consume the item in nextc; until false;,

51、2.間接通信方式 -通過信箱通信 信箱用來暫存發(fā)送進(jìn)程發(fā)送給目標(biāo)進(jìn)程的消息,接收進(jìn)程則從信箱中取出發(fā)送給自己的消息。 消息在信箱中可安全保存,只允許核準(zhǔn)的目標(biāo)用戶隨時(shí)讀取 利用信箱通信方式,既可實(shí)時(shí)通信,又可非實(shí)時(shí)通信。,2.5.2 消息傳遞通信的實(shí)現(xiàn)方法,信箱可由操作系統(tǒng)創(chuàng)建,也可由用戶進(jìn)程創(chuàng)建,創(chuàng)建者是信箱的擁有者。 信箱分類: 私用信箱 公用信箱 共享信箱,2.5.3 消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問題,1. 通信鏈路 分類: (1)根據(jù)通信鏈路的建立方式: 顯示連接:先用 “建立連接”命令(原語(yǔ)) 建立一條通信鏈路; 通信; 用顯式方式拆除鏈路。用于計(jì)算機(jī)網(wǎng)絡(luò),隱式連接:發(fā)送進(jìn)程無須明確提出

52、建立鏈路的要求,直接利用系統(tǒng)提供的發(fā)送命令(原語(yǔ)),系統(tǒng)會(huì)自動(dòng)地為之建立一條鏈路。用于單機(jī)系統(tǒng),為使發(fā)送進(jìn)程和接收進(jìn)程能夠通信,必須在發(fā)送 進(jìn)程和接收進(jìn)程之間建立一條通信鏈路,(2)根據(jù)通信鏈路的連接方法 (3)根據(jù)通信方式的不同,(4)根據(jù)通信鏈路容量的不同,2. 消息的格式 單機(jī)系統(tǒng)環(huán)境:環(huán)境相同,消息格式簡(jiǎn)單 計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境:環(huán)境不同,消息的傳輸距離很遠(yuǎn) 消息格式比較復(fù)雜。,2.5.3 消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問題,消息格式: 從消息長(zhǎng)度分類:,2.5.3 消息傳遞系統(tǒng)實(shí)現(xiàn)中的若干問題,3.進(jìn)程同步方式 在進(jìn)程之間進(jìn)行通信時(shí),輔以進(jìn)程同步機(jī)制,使諸進(jìn)程間能協(xié)調(diào)通信。 發(fā)送進(jìn)程或接收進(jìn)程在

53、完成消息的發(fā)送或接收后,都存在兩種可能性:進(jìn)程或者繼續(xù)發(fā)送(接收)或者阻塞。 發(fā)送進(jìn)程阻塞、接收進(jìn)程阻塞 發(fā)送進(jìn)程不阻塞、接收進(jìn)程阻塞 發(fā)送進(jìn)程和接收進(jìn)程均不阻塞,2.5.4 消息緩沖隊(duì)列通信機(jī)制,發(fā)送進(jìn)程利用Send原語(yǔ),將消息直接發(fā)送給接收進(jìn)程;接收進(jìn)程利用Receive原語(yǔ)接收消息。用于本地進(jìn)程間通信,消息緩沖隊(duì)列通信機(jī)制中的數(shù)據(jù)結(jié)構(gòu) 消息緩沖隊(duì)列通信方式中,主要利用的數(shù)據(jù)結(jié)構(gòu)是消息緩沖區(qū) (1)消息緩沖區(qū),type message buffer =record sender; 發(fā)送者進(jìn)程標(biāo)識(shí)符 size; 消息長(zhǎng)度 text; 消息正文 next; 指向下一個(gè)消息緩沖區(qū)的指針 end,

54、type processcontrol block =record mq; 消息隊(duì)列隊(duì)首指針 mutex; 消息隊(duì)列互斥信號(hào)量 sm; 消息隊(duì)列資源信號(hào)量 end,(2)PCB中有關(guān)通信的數(shù)據(jù)項(xiàng) 應(yīng)該在進(jìn)程的PCB中增加消息隊(duì)列隊(duì)首指針,用于對(duì)消息隊(duì)列進(jìn)行操作,以及用于實(shí)現(xiàn)同步的互斥信號(hào)量mutex和信號(hào)量sm,2.5.4 消息緩沖隊(duì)列通信機(jī)制,2. 發(fā)送原語(yǔ),procedure send(receiver, a) /將發(fā)送區(qū)a的內(nèi)容發(fā)給receiver begin getbuf(a.size, i); /根據(jù)a.size申請(qǐng)緩沖區(qū)i i.sender :=a.sender; /將發(fā)送區(qū)a中的

55、信息復(fù)制 i.size :=a.size; /到消息緩沖區(qū)i中 i.text :=a.text; i.next :=0; getid(PCB set, receiver.j); /取接收進(jìn)程內(nèi)部標(biāo)識(shí)符放于j wait(j.mutex); /將消息緩沖區(qū)插入消息隊(duì)列 insert(j.mq, i); signal(j.mutex); signal(j.sm); end,2.5.4 消息緩沖隊(duì)列通信機(jī)制,3. 接收原語(yǔ),procedure receive(b) /從進(jìn)程自己的消息接收隊(duì)列中取 begin /消息i放入消息接收區(qū)b中 j:=internal name; /j為接收進(jìn)程內(nèi)部標(biāo)識(shí)符 wa

56、it(j.sm); wait(j.mutex); remove(j.mq, i); /將消息隊(duì)列中的第一個(gè)消息移出 signal(j.mutex); b.sender :=i.sender; /將消息緩沖區(qū)i中的信息 b.size :=i.size; /復(fù)制到接收區(qū)b b.text :=i.text; end,2.5.4 消息緩沖隊(duì)列通信機(jī)制,2.5 進(jìn)程通信,第二章 進(jìn)程管理,本章內(nèi)容 2.1 進(jìn)程的基本概念 2.2 進(jìn)程控制 2.3 進(jìn)程同步 2.4 經(jīng)典進(jìn)程的同步問題 2.5 進(jìn)程通信 2.6 線程,2.6 線程,2.6.1 線程的基本概念 2.6.2 線程間的同步和通信 2.6.3 線程的實(shí)現(xiàn)方式,目的及要求 掌握線程的基本概念; 理解線程間的同步和通信 了解線程的實(shí)現(xiàn)方式;,2.6.1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論