計(jì)算機(jī)操作系統(tǒng)之進(jìn)程管理_第1頁
計(jì)算機(jī)操作系統(tǒng)之進(jìn)程管理_第2頁
計(jì)算機(jī)操作系統(tǒng)之進(jìn)程管理_第3頁
計(jì)算機(jī)操作系統(tǒng)之進(jìn)程管理_第4頁
計(jì)算機(jī)操作系統(tǒng)之進(jìn)程管理_第5頁
已閱讀5頁,還剩81頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第二章

進(jìn)程管理2.1.1

程序的順序執(zhí)行及特征一、程序執(zhí)行有固定的時(shí)序。(圖2-1p27)二、特征:順序性、封閉性、可再現(xiàn)性2.1進(jìn)程的基本概念I(lǐng)1C1P1I2C2P22007年1月2.1.2前趨圖定義有向無循環(huán)圖表示方式: (1)p1--->p2(2)--->={(p1,p2)|p1必須在p2開始前完成}(圖2-2P27)節(jié)點(diǎn)表示:一條語句,一個(gè)程序段,一進(jìn)程。P1P1P1P12007年1月2.1.3程序的并發(fā)執(zhí)行一、多個(gè)程序的并發(fā)執(zhí)行(可能性分析)I1I2I3I4C1C2C3C4P1P2P3P4t2007年1月程序的并發(fā)執(zhí)行(2)二、特征間斷性失去封閉性:主要由共享資源引起不可再現(xiàn)性:P29例,設(shè)N的初值為n。有2個(gè)循環(huán)程序A和B,它們共享一個(gè)變量N,程序A每執(zhí)行一次時(shí),都要做N:=N+1;B則每次要執(zhí)行Print(N),然后再做N:=0.若程序A,B以不同的速度運(yùn)行有以下三種不同的結(jié)果2007年1月程序的并發(fā)執(zhí)行(3)N:=N+1在print(N)和N:=0之前,則N值分別為n+1,n+1,0.N:=N+1在print(N)和N:=0之后,則N值分別為n,0,1.N:=N+1在print(N)和N:=0之間,則N值分別為n,n+1,0.

2007年1月2.1.4進(jìn)程的特征和狀態(tài)1.進(jìn)程的特征和定義一、定義:程序的一次執(zhí)行過程1.結(jié)構(gòu)特征進(jìn)程:由程序段、數(shù)據(jù)段及進(jìn)程控制塊三部分構(gòu)成,總稱“進(jìn)程映像”。2.動(dòng)態(tài)性由“創(chuàng)建”而產(chǎn)生,由“調(diào)度”而執(zhí)行;由得不到資源而阻塞;由撤消而消亡。(而程序是靜態(tài)的)。2007年1月2.1.4進(jìn)程的特征和狀態(tài)(2)3.并發(fā)性只有建立了進(jìn)程,才能并發(fā)執(zhí)行。4.獨(dú)立性。獨(dú)立運(yùn)行,獨(dú)立獲得資源。5.異步性:(間斷性)2007年1月2.1.4進(jìn)程的特征和狀態(tài)(3)2.進(jìn)程的三種基本狀態(tài)(圖2-5p31)就緒狀態(tài)執(zhí)行狀態(tài)阻塞狀態(tài)就緒阻塞執(zhí)行時(shí)間片完進(jìn)程調(diào)度I/O請(qǐng)求I/O完成圖2-5進(jìn)程的三種基本狀態(tài)及其轉(zhuǎn)換2007年1月2.1.4進(jìn)程的特征和狀態(tài)(4)3.掛起狀態(tài)(被換出內(nèi)存的狀態(tài))引入原因終端用戶請(qǐng)求父進(jìn)程請(qǐng)求負(fù)荷調(diào)節(jié)需要操作系統(tǒng)需要進(jìn)程狀態(tài)的轉(zhuǎn)換(圖2-6)活動(dòng)就緒

靜止就緒活動(dòng)阻塞

靜止阻塞靜止就緒

活動(dòng)就緒靜止阻塞

活動(dòng)阻塞2007年1月圖2-6具有掛起狀態(tài)的進(jìn)程狀態(tài)圖執(zhí)行活動(dòng)就緒靜止就緒活動(dòng)阻塞靜止阻塞激活掛起激活掛起釋放釋放掛起請(qǐng)求I/O2007年1月實(shí)驗(yàn)寫一個(gè)程序描述進(jìn)程狀態(tài)遷移過程。要求:提供導(dǎo)致進(jìn)程狀態(tài)變化的調(diào)用接口,包括創(chuàng)建、刪除、調(diào)度、阻塞、時(shí)間到、掛起、激活等。實(shí)現(xiàn)進(jìn)程列表顯示的接口。注:這里設(shè)計(jì)的進(jìn)程是一個(gè)假設(shè)的對(duì)象實(shí)體,是由程序自己創(chuàng)建和刪除,不是系統(tǒng)維護(hù)的進(jìn)程。2007年1月2.1.5進(jìn)程控制塊1.進(jìn)程控制塊的作用是進(jìn)程存在的唯一標(biāo)志;PCB(process

controlblock)常駐內(nèi)存2.進(jìn)程控制塊中的信息標(biāo)識(shí)、處理機(jī)狀態(tài),進(jìn)程調(diào)度信息,進(jìn)程控制信息pid進(jìn)程狀態(tài)現(xiàn)場(chǎng)優(yōu)先級(jí)阻塞原因程序地址同步機(jī)制資源清單鏈接指針2007年1月2.1.5進(jìn)程控制塊(2)3.PCB的組織鏈接(p33圖2-7)索引(p34圖2-8)PCB14PCB23PCB30PCB48PCB5PCB67PCB79PCB80PCB91執(zhí)行指針就緒隊(duì)列指針阻塞隊(duì)列指針空閑隊(duì)列指針2007年1月等待隊(duì)列示例structwait_queue{

struct

task_struct*task;

structwait_queue*next;};PCBPCBPCB2007年1月2.1.5進(jìn)程控制塊(3)3.PCB的組織索引(p34圖2-8)PCB1PCB2PCB3PCB4PCB5PCB6PCB7執(zhí)行指針就緒表指針阻塞表指針2007年1月補(bǔ)充PCB和進(jìn)程的代碼數(shù)據(jù)放在一起嗎?系統(tǒng)態(tài)和用戶態(tài)系統(tǒng)空間和用戶空間系統(tǒng)調(diào)用和普通調(diào)用的區(qū)別?系統(tǒng)調(diào)用會(huì)引起從用戶態(tài)進(jìn)入核心態(tài)2007年1月2.2進(jìn)程控制2.2.1進(jìn)程的創(chuàng)建一、進(jìn)程圖:描述了進(jìn)程的家族關(guān)系:(P34圖2-9)子進(jìn)程可繼承父的資源,撤消時(shí)應(yīng)歸還給父進(jìn)程,父的撤消會(huì)撤消全部子進(jìn)程。二、引起創(chuàng)建進(jìn)程的事件:1.用戶登錄:為終端用戶建立一進(jìn)程2.作業(yè)調(diào)度:(不是進(jìn)程調(diào)度)為被調(diào)度的作業(yè)建立進(jìn)程3.提供服務(wù):如要打印時(shí)建立打印進(jìn)程2007年1月2.2.1進(jìn)程的創(chuàng)建(2)4.應(yīng)用請(qǐng)求:由應(yīng)用程序建立多個(gè)進(jìn)程三、進(jìn)程的創(chuàng)建:(creat原語)1.申請(qǐng)空白PCB(一個(gè)系統(tǒng)的PCB是有限的)2.為新進(jìn)程分配資源(不同于一般的分配,PCB-LIST在一個(gè)特殊區(qū)域)3.初始化PCB4.將新進(jìn)程插入就緒隊(duì)列。2007年1月2.2.2進(jìn)程的終止一、引起進(jìn)程終止的事件1.正常結(jié)束:如Halt、logoff2.異常結(jié)束:如Protecterror、overtime等3.外界干預(yù):a.系統(tǒng)員kill進(jìn)程;b.父進(jìn)程終止;c.父進(jìn)程請(qǐng)求。2007年1月2.2.2進(jìn)程的終止(2)二、進(jìn)程的終止過程(1)檢查進(jìn)程狀態(tài);(2)執(zhí)行態(tài)――>中止,且置調(diào)度標(biāo)志為真。(3)有無子孫需終止。(4)歸還資源給其父進(jìn)程或系統(tǒng)。(5)從PCB隊(duì)列中移出PCB.2007年1月2.2.3進(jìn)程的阻塞與喚醒一、引起進(jìn)程阻塞和喚醒的事件1.請(qǐng)求系統(tǒng)服務(wù)而得不到滿足時(shí),如問系統(tǒng)請(qǐng)求打印。2.啟動(dòng)某種操作而需同步時(shí):如該操作和請(qǐng)求該操作的進(jìn)程需同步運(yùn)行(即非異步操作)。3.新數(shù)據(jù)尚未到達(dá):如進(jìn)程A寫,進(jìn)程B讀,則A未寫,完B不能讀。4.無新工作可做。2007年1月2.2.3進(jìn)程的阻塞與喚醒(2)二、進(jìn)程阻塞過程:是進(jìn)程自身的一種主動(dòng)行為a.調(diào)block原語b.停止執(zhí)行,修改PCB入阻塞隊(duì)列(一個(gè)或多個(gè)),并轉(zhuǎn)調(diào)度。三、喚醒過程其它相關(guān)進(jìn)程完成。a.wakeup原語b.修改PCB,入就緒隊(duì)列可見,有block原語,在其它進(jìn)程中就應(yīng)有wakeup原語。2007年1月2.2.4進(jìn)程的掛起與激活一、進(jìn)程的掛起過程由進(jìn)程自己或其父進(jìn)程調(diào)suspend原語完成,將該進(jìn)程PCB移到指定區(qū)域,注意狀態(tài)的改變,有可能要重新調(diào)度。二、進(jìn)程的激活過程。active原語(如在外存,調(diào)入內(nèi)存,改變狀態(tài),根據(jù)情況看是否調(diào)度,如搶先或非搶先)。阻塞、喚醒一般由OS實(shí)現(xiàn),而掛起與激活可由用戶干預(yù)。2007年1月2.3進(jìn)程同步同步:并發(fā)進(jìn)程在執(zhí)行次序上的協(xié)調(diào),以達(dá)到有效的資源共享和相互合作,使程序執(zhí)行有可再現(xiàn)性。2007年1月2.3.1進(jìn)程同步的基本概念1.兩種形式的制約關(guān)系資源共享關(guān)系:(進(jìn)程間接制約)需互斥地訪問臨界資源。相互合作關(guān)系:(進(jìn)程直接制約)2.臨界資源:(一次僅允許一個(gè)進(jìn)程訪問的資源)引起不可再現(xiàn)性是因?yàn)榕R界資源沒有互斥訪問。2007年1月生產(chǎn)者-消費(fèi)者問題Varn,integer;Typeitem=…;varbuffer:array[0,1,…,n-1]ofitem;in,out:0,1,…,n-1;counter:0,1,…,n;2007年1月生產(chǎn)者-消費(fèi)者問題producer:repeat… produceaniteminnextp;…whilecounter=ndono-op;buffer[in]:=nextp;in:=(in+1)modn;counter:=counter+1;untilfalse;consumer:repeatwhilecounter=0dono-op;nextc:=buffer[out];out:=(out+1)modn;counter:=counter-1;consumertheiteminnextc;untilfalse;2007年1月生產(chǎn)者-消費(fèi)者問題(2)設(shè)counter的初值為5register1:=counter;register2:=counter;register1:=register1+1;register2:=register2-1;counter:=register1;counter:=register2;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)2007年1月定義:進(jìn)程訪問臨界資源的那段代碼。訪問臨界資源的描述:進(jìn)入?yún)^(qū):檢查有無進(jìn)程進(jìn)入臨界區(qū):退出區(qū):將訪問標(biāo)志復(fù)位Repeat Entrysection Criticalsection Exitsection Untilfalse3.臨界區(qū)2007年1月4.同步機(jī)制應(yīng)遵循的準(zhǔn)則1.空閑讓進(jìn)2.忙則等待3.有限等待:應(yīng)保證為有限等待,不會(huì)產(chǎn)生死等。4.讓權(quán)等待:不能進(jìn)入臨界區(qū)的執(zhí)行進(jìn)程應(yīng)放棄CPU執(zhí)行權(quán)。2007年1月2.3.2信號(hào)量機(jī)制1整型信號(hào)量是一個(gè)整型量,通過2個(gè)原子操作wait(s)和signal(s)來訪問。Wait(s):whiles<=0dono-op s:=s-1;Signal(s): s:=s+1;2007年1月2記錄型信號(hào)量

由于整型機(jī)制中會(huì)不斷測(cè)試不滿足“讓權(quán)等待”而引入typesemaphore=recordvalue:integer;L:listofprocess;endL:為進(jìn)程鏈表,用于鏈接所有等待該類資源進(jìn)程。procedurewait(s)vars:semaphorebegins.value:=s.value–1;ifs.value

<0themblock(S,L)end2007年1月2記錄型信號(hào)量(2)

proceduresignal(S)var

s:semaphonebegins.value:=s.vaule+1ifs.value<=0thenwakeup(s.L)end用wait(s)和signal(s)實(shí)現(xiàn)同步與互斥。在記錄型信號(hào)量機(jī)制中:s.value初值:表示系統(tǒng)中某類資源的數(shù)目。s.value<0:表該信號(hào)量鏈表中已阻塞進(jìn)程的數(shù)目。2007年1月3AND型信號(hào)量當(dāng)不用它時(shí),有可能發(fā)生系統(tǒng)死鎖。死鎖:在無外力作用下的一種僵持狀態(tài)。AND信號(hào)量例:P42.特點(diǎn):要么全分配,要么一個(gè)也不分配。2007年1月3AND型信號(hào)量processA:wait(Dmutex);wait(Emutex);processB:wait(Emutex);wait(Dmutex);若2進(jìn)程交替執(zhí)行,則死鎖2007年1月3AND型信號(hào)量Swait(s1,s2,…,sn) ifs1≥1and…and

sn≥1then fori:=1tondosi:=si-1;endfor else placetheprocessinthewaitingqueuewiththefirstsifoundwithsi<1,andsettheprogramcountofthisprocesstothebeginningofswaitoperation endifSsignal(s1,s2,…,sn) fori:=1tondosi:=si+1;removealltheprocesswaitinginthequeueassociatedwithsiintothereadyqueue

endfor2007年1月4信號(hào)量集(略)為提高效率而對(duì)AND信號(hào)的擴(kuò)充。(P43)三種特例:(1)Swait(S,d,d):允許每次申請(qǐng)d個(gè)資源。 當(dāng)資源數(shù)少于d時(shí),不予分配。(2)Swait(s,1,1):S>1,記錄型信號(hào)量。

S=1時(shí),互斥型信號(hào)量。(3)Swait(s,1,0),可控開關(guān),當(dāng)時(shí),允許進(jìn)入,S<1時(shí),不能進(jìn)入。2007年1月2.3.3信號(hào)量的應(yīng)用

1.利用信號(hào)量實(shí)現(xiàn)互斥var

mutex:semaphore:=1 begin

parbegin process1:begin repeat

wait(mutex); criticalsetion

signal(mutex); remaindersection untilfalse; end2007年1月1.利用信號(hào)量實(shí)現(xiàn)互斥(2)

process2:begin repeat

wait(mutex); criticalsetion

signal(mutex); remaindersection untilfalse; endparend

2007年1月2.利用信號(hào)量來描述前趨關(guān)系(1)S1S2S3S4S5S6abcdegf圖2-10前趨圖舉例2007年1月利用信號(hào)量來描述前趨關(guān)系(2)Var

a,b,c,d,e,f,g:semaphore:=0,0,0,0,0,0,0;Begin

parbegin beginS1;signal(a);signal(b);end; beginwait(a);S2;signal(c);signal(d);end; beginwait(b);S3;signal(e);end; beginwait(c);S4;signal(f);end; beginwait(d);S1;signal(g);end; beginwait(e);wait(f);wait(g);S6;end;

parendend2007年1月2.4經(jīng)典進(jìn)程同步問題2.4.1生產(chǎn)者--消費(fèi)者問題2.4.2哲學(xué)家進(jìn)餐問題2.4.3讀者--寫者問題2007年1月一、利用記錄型信號(hào)量解決生產(chǎn)者一消費(fèi)者問題mutex:使諸進(jìn)程互斥地訪問緩沖區(qū)(n個(gè)緩沖區(qū))empty、full:空、滿緩沖區(qū)數(shù)量。Var

mutex,empty,full:semaphore:=1,n,0;buffer:array[0,1,…,n-1]ofitem; in,out:integer:=0,0; begin

parbeginproducer:begin repeat … Produceaniteminnextp; …2007年1月一、利用記錄型信號(hào)量解決生產(chǎn)者一消費(fèi)者問題wait(empty);wait(mutex);buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);Untilfalse;endconsumer:begin repeat

wait(full);wait(mutex);nextc:=buffer(out);out:=(out+1)modn;signal(mutex);signal(empty);Consumertheiteminnextc;Untilfalse;endparendend2007年1月二、利用AND信號(hào)量解決生產(chǎn)者——消費(fèi)者問題

var

mutex,empty,full:semaphore:=1,n,0; buffer:array[0,…,n-1]ofitem; inout:integer:=0,0;begin

parbegin producer:begin repeat … produceaniteminnextp; …

swait(empty,mutex);

buffer(in):=nextp;2007年1月in:=(in+1)modn;ssingal(mutex,full);Untilfalse;EndConsumer:beginrepeat

swait(full,mutex);

nextc:=buffer(out); out:=(out+1)modn;

ssignal(mutex,empty); consumertheiteminnextc;untilfalse;endparendend2007年1月2.4.2哲學(xué)家進(jìn)餐問題1.利用記錄型信號(hào)量解決哲學(xué)家進(jìn)餐問題2007年1月2.4.2哲學(xué)家進(jìn)餐問題1.利用AND信號(hào)量解決哲學(xué)家進(jìn)餐問題Varchopstick:array[0,…,4]ofsemaphore:=(1,1,1,1,1);processiRepeatthink;Sswait(chopstick[(i+1)mod5],chopstick[i]);eatSsignal(chopstick[(i+1)mod5],chopstick[i]);Untilfalse2007年1月2.4.3讀者——寫者問題特點(diǎn): 讀進(jìn)程可共享同一對(duì)象。寫進(jìn)程不可共享同一對(duì)象。2007年1月一、利用記錄型信號(hào)量解決讀者——寫者問題

var

rmutex,wmutex:semaphore:=1,1;

readcount:integer:=0; begin

parbegin reader:begin repeat

wait(rmutex); ifreadcount=0thenwait(wmutex);

readcount:=readcount+1;

signal(rmutex); … performreadoperation2007年1月一、利用記錄型信號(hào)量解決讀者——寫者問題

performreadoperation …

wait(rmutex);

readcount:=readcount-1; ifreadcount=0thensignal(wmutex);

signal(rmutex); untilfalse; end 2007年1月一、利用記錄型信號(hào)量解決讀者——寫者問題

writer:begin repeat

wait(wmutex) performwriteoperation;

signal(wmutex) untilfalse; end

parendend2007年1月二、信號(hào)量集解決讀者——寫者問題(略)varRNinteger; L,mx:semaphore:=RN,q;begin

parbeginreader:begin repeatswait(L,1,1);swait(mx,1,0);… performreadoperation; … ssignal(L,1);untilfalse;endwriter:begin2007年1月二、信號(hào)量集解決讀者——寫者問題(略)

writer:beginrepeatswait(mx,1,1;L,RN,0);performwriteoperation;

ssignal(mx,1);untilflase;end

parendend2007年1月2.5管程機(jī)制引入原因:為了避免凡要使用臨界資源的進(jìn)程都自備同步操作wait(s)和signal(s).將同步操作的機(jī)制和臨界資源結(jié)合到一起,形成管程。2.5.1管程的基本概念一、定義:一個(gè)數(shù)據(jù)結(jié)構(gòu)和能為并發(fā)進(jìn)程所執(zhí)行的一組操作。局部于管程的共享變量。對(duì)該數(shù)據(jù)結(jié)構(gòu)進(jìn)程操作的一組過程。對(duì)局部管程數(shù)據(jù)設(shè)置初值。二、條件變量:

x.y:x.wait;x.signal;x.queue2007年1月2.5.2利用管程解決生產(chǎn)者——消費(fèi)者問題

一、建立管程:PC包括:二過程: (1)put(item)過程;(2)get(item)過程一變量:count≥n時(shí)滿;≤0時(shí)空初始:in=out=count=0Typeproducer-consumer=monitorvar

in,out,count:integer;buffer:array[0,…,n-1]ofitem;notfull,notempty:condition;procedureentryput(item)procedureentryget(item)2007年1月2.5.2利用管程解決生產(chǎn)者——消費(fèi)者問題

Procedureentryput(item) begin ifcount≥nthennotfull.wait;

buffer(in):=nextp; in:=(in+1)modn count:=count+1; ifnotempty.queuethennotempty.signal; endProcedureentryget(item) begin ifcount≤0thennotempty.wait;

nextc:=buffer(out); out:=(out+1)modn count:=count-1; ifnotfull.queuethennotfull.signal; endBeginin:=out:=0;count:=0end2007年1月2.5.2利用管程解決生產(chǎn)者——消費(fèi)者問題

例:producer:begin repeat produceaitemnextp PC.put(item); untilfalse. EndConsumer:begin repeat

PC.get(item); Consumetheiteminnextc; Untilfalse end 可見,由管程來實(shí)現(xiàn)后,進(jìn)程的同步更簡(jiǎn)單明了。2007年1月練習(xí)

a,b

兩點(diǎn)間是一段東西向的單行車道,現(xiàn)要設(shè)計(jì)一個(gè)自動(dòng)管理系統(tǒng),管理規(guī)則如下:當(dāng)ab間有車輛在行駛時(shí)同方向的車可以同時(shí)駛?cè)隺b段,但另一方向的車必須在ab段外等待;當(dāng)ab之間無車時(shí),到達(dá)a(或b)的車輛可以進(jìn)入ab段,但不能從a,b點(diǎn)同時(shí)駛?cè)耄划?dāng)某方向在ab段行駛的車輛使出了ab段且無車輛進(jìn)入ab段時(shí),應(yīng)讓另一方向等待的車輛進(jìn)入ab段行駛。請(qǐng)用wait,signal工具對(duì)ab段實(shí)現(xiàn)正確管理。2007年1月答:Semaphores,mutexab,mutexbaPab:Wait(mutexab)Countab++Ifcountab=1thenwait(s);Signal(mutexab)

…..wait(mutexab)countab--;ifcountab=0thensignal(s)signal(mutexab);2007年1月答:Pba:wait(mutexba)countba=countba+1;Ifcountba=1thenwait(s)wait(mutexba)enter; ……wait(mutexba)countba--;ifcountba=0thensignal(s)

signal(mutexba);2007年1月2.6進(jìn)程通信概念:進(jìn)程間的信息交換。實(shí)例:信號(hào)量機(jī)制(一種低級(jí)通信) 缺點(diǎn):(1)效率低 (2)通信對(duì)用戶不透明高級(jí)通信特點(diǎn):效率高,通信實(shí)現(xiàn)細(xì)節(jié)對(duì)用戶透明2007年1月2.6.1進(jìn)程通信的類型一、共享存貯器系統(tǒng)1.基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式:produce-consume中的緩沖區(qū),低效,不透明。系統(tǒng)只提供了一共享存貯器,適于少量通信。2.基于共享存儲(chǔ)區(qū)的通信方式:系統(tǒng)提供:共享存儲(chǔ)區(qū)。通信過程:(1)向系統(tǒng)申請(qǐng)一個(gè)或多個(gè)分區(qū)(2)獲得分區(qū)獲后即可讀/寫.特點(diǎn):高效,速度快。2007年1月2.6.1進(jìn)程通信的類型二、消息傳遞系統(tǒng)(可用于異種機(jī))信息單位:消息(報(bào)文)是目前的主要通信方式,分為直接通信方式、間接通信方式實(shí)現(xiàn):一組通信命令(原語),具有透明性--->同步的實(shí)現(xiàn)。三、管道通信管道:連接一個(gè)讀進(jìn)程和一個(gè)寫進(jìn)程之間通信的共享文件。功能:大量的數(shù)據(jù)發(fā)收。注意:(1)互斥(2)同步(3)對(duì)方是否存在2007年1月2.6.2直接/間接通信方式(消息通信的2種方式)

一、直接send(Receiver,message)receive(Sender,message)例:解決生產(chǎn)—消費(fèi)問題。

repeat …produceaniteminnextp;…

send(consumer,nextp);untilfalse;repeatreceive(producer,nextc);…consumertheiteminnextc;untilfalse;2007年1月2.6.2直接/間接通信方式(消息通信的2種方式)

二、間接(可以實(shí)現(xiàn)非實(shí)時(shí)通信)優(yōu)點(diǎn):在讀/寫時(shí)間上的隨機(jī)性寫進(jìn)程――>信箱(中間實(shí)體)――>讀進(jìn)程原語(1)信息的創(chuàng)建與撤消:信箱名屬性(公用、私用、共享)(共享者名字)(2)消息的發(fā)送和接收Send(mailbox,message)Receive(mailbox,message)2007年1月2.6.2直接/間接通信方式(消息通信的2種方式)

二、間接(可以實(shí)現(xiàn)非實(shí)時(shí)通信)信箱類型(1)私用:擁有者有讀/寫數(shù),其它只有寫權(quán),(單向)存在期=進(jìn)程存在期。(2)公用:系統(tǒng)創(chuàng)建,雙向,存在期=系統(tǒng)存在期。(3)共享信箱:一般進(jìn)程創(chuàng)建,并指明其共享者,是雙向。發(fā)送—接收進(jìn)程之間的關(guān)系:(1)一對(duì)一關(guān)系;(2)多對(duì)一關(guān)系;(3)一對(duì)多關(guān)系;(4)多對(duì)多關(guān)系:公用信箱。2007年1月2.6.3消息傳遞系統(tǒng)中的幾個(gè)問題一、通信鏈路:(1)顯式建立:(進(jìn)程完成)(2)隱式建立:(系統(tǒng)完成)鏈路類型:(1)由連接方法分:點(diǎn)—點(diǎn)鏈路,多點(diǎn)鏈路。(2)由通信方式分:?jiǎn)蜗颉㈦p向。(3)由容量分:無容量(無緩沖區(qū))、有(有緩沖區(qū))。2007年1月2.6.3消息傳遞系統(tǒng)中的幾個(gè)問題二、消息格式:消息頭:含控制信息如:收/發(fā)進(jìn)程名,消息長(zhǎng)度、類型、編號(hào)消息內(nèi)容:定長(zhǎng)消息:系統(tǒng)開銷小,用戶不便(特別是傳長(zhǎng)消息用戶)變長(zhǎng)消息:開銷大,用戶方便。2007年1月2.6.3消息傳遞系統(tǒng)中的幾個(gè)問題三、進(jìn)程同步方式1.發(fā)送和接收進(jìn)程阻塞(匯合)用于緊密同步,無緩沖區(qū)時(shí)。2.發(fā)送進(jìn)程不阻塞,接收進(jìn)程阻塞(多個(gè))相當(dāng)于接收進(jìn)程(可能是多個(gè))一直等待發(fā)送進(jìn)程,如:打印進(jìn)程等待打印任務(wù)。3.發(fā)送/接收進(jìn)程均不阻塞一般在發(fā)、收進(jìn)程間有多個(gè)緩沖區(qū)時(shí)。2007年1月2.6.4消息緩沖隊(duì)列通信機(jī)制一、數(shù)據(jù)結(jié)構(gòu)1.消息緩沖區(qū)typemessagebuffer=recordsender:size:text:next:指向下一指針2.PCB中應(yīng)增數(shù)據(jù)項(xiàng):typepcb=recordmq

消息隊(duì)列指針mutex

消息隊(duì)列互斥信息量sm

消息隊(duì)列資源信息量(表資源消息數(shù))2007年1月2.6.4消息緩沖隊(duì)列通信機(jī)制二、發(fā)送原語

proceduresend(receiver,a)begin

getbuf(a.size,i);

i.sender:=a.sender;

i.size:=a.size;

i.text:=a.text;

i.next:=0;

getid(PCBset,receiver.j);

wait(j.mutex);

insert(j.mq,i);

signal(j.mutex);

signal(j.sm);end2007年1月2.6.4消息緩沖隊(duì)列通信機(jī)制三、接收原語procedurereceive(b) begin j:=internalname;

wait(j.sm);

wait(j.mutex);

remove(j.mq,i);

signal(j.mutex);

b.sender:=i.sender;

b.size:=i.size;

b.text:=i.text; end2007年1月2.6.4消息緩沖隊(duì)列通信機(jī)制sender:Asize:5text:hellonext:0smmutexmqsender:Asize:5text:Hellosend(B,a)發(fā)送區(qū)A接收區(qū)Basender:Asize:5text:Helloreceive(b)b進(jìn)程APCB(B)進(jìn)程B2007年1月練習(xí)試說明如果使用send_mailbox和receive_mailbox

原語實(shí)現(xiàn)打印文件的系統(tǒng)。欲打印

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論