




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
操作系統(tǒng)原理金海溶blue1879@辦公室:2A314操作系統(tǒng)設計中的核心問題是關于進程和線程的管理多道程序技術 管理單處理器系統(tǒng)中的多個進程多處理技術 管理多處理器系統(tǒng)中的多個進程分布處理技術 管理多臺分布式計算機系統(tǒng)(集群)中多個進程的執(zhí)行§4.1并發(fā)進程進程并發(fā)要解決的主要問題互斥:進程之間的間接制約關系。當一個進程使用某資源時,另一個進程必須等待——并發(fā)的基本需求實現互斥包括軟件方法(“忙等待”技術)和支持互斥的硬件機制等同步:進程間的的直接制約關系,進程間的活動有相互依賴和合作的關系通信:不同進程之間傳播或交換信息進程并發(fā)順序執(zhí)行的特性
順序性,資源獨占,可再現性
并發(fā)執(zhí)行的特點:
不可再現性
制約性
資源共享
回顧順序執(zhí)行和并發(fā)執(zhí)行的特點并發(fā)的例子及并發(fā)后的問題并發(fā)
在同一時間段內,多個進程同時運行;宏觀上并發(fā),微觀上順序執(zhí)行。并發(fā)后產生了資源的競爭和共享問題,而且進程的執(zhí)行速度及進程的執(zhí)行序列都是不可預測的一個例子與時間有關的錯誤考慮下面一個字符回顯的的過程voidecho()
{chin=getchar();
chout=do(chin);
putchar(chout);}從鍵盤獲得輸入,每擊一下鍵,輸入字符就保存在變量chin中,然后處理后傳送給變量chout,并回送顯示器任何程序可以重復地調用此過程,接收用戶輸入,并在用戶的屏幕上顯示與時間有關的錯誤考慮一個支持單用戶單處理器、多道程序設計系統(tǒng)將其當作一個共享過程,載入到所有應用程序公用的全局存儲區(qū)中。這樣每個應用程序都能使用這個過程,由于每個應用程序只需使用echo過程的一個副本,從而節(jié)省空間進程間共享主存是非常有用的,它允許進程間有效而緊密的交互,有利于進程的相互通信。但是,共享也可能會帶來一些問題與時間有關的錯誤
voidecho()
{chin=getchar();
chout=do(chin);
putchar(chout);}考慮下面的順序進程P1調用echo過程,并在getchar函數結束后立即被中斷,此時,最近輸入的字符x被保存在變量chin中進程P2被激活并調用echo過程,echo過程運行得出結果,輸入然后在屏幕上顯示單個的字符y進程P1被恢復。此時chin中值x被寫覆蓋,因此已丟失,而chin中的值y被傳送給chout并顯示出來第一個字符丟失,第2個字符被顯示了兩次與時間有關的錯誤
voidecho()
{chin=getchar();
chout=do(chin);
putchar(chout);}
getchar()chinchout
putchar()P1P2getchar()XXgetchar()YYYputchar()YYY?echo與時間有關的錯誤錯誤原因之1:進程執(zhí)行交叉;錯誤原因之2:涉及公共變量(chin和chout)。解決方案:一次只允許一個進程調用echo過程:進程P1調用echo過程,并在getchar函數結束后立即被中斷,此時,最近輸入的字符x被保存在變量chin中進程P2被激活并調用echo過程。但是,由于P1仍然在echo過程中,盡管當前P1處于就緒狀態(tài),P2仍被阻塞,不能進入這個過程。因此,P2被阻塞,等待echo過程可用一段時間后進程P1被恢復,完成echo的執(zhí)行,顯示出正確的字符xP1退出echo后,解除了P2的阻塞,P2被恢復,成功地調用echo過程與時間有關的錯誤
voidecho()
{chin=getchar();
chout=do(chin);
putchar(chout);}
P1
voidecho()
{chin=getchar();chout=do(chin);
putchar(chout);}
調用echo超時,就緒P2調用echo資源正忙阻塞狀態(tài)調度運行釋放echo喚醒獲取資源就緒狀態(tài)調度運行由此可見,解決共享資源的保護,唯一的辦法是互斥的使用共享資源(如變量,代碼等)即:一次只允許一個進程訪問共享資源臨界資源和臨界區(qū):臨界資源
某些在一段時間內只允許一個進程使用的共享資源稱為臨界資源臨界區(qū)(段)訪問臨界資源的程序段稱為臨界區(qū)。即互斥執(zhí)行的程序段進程同步與互斥進程P1和P2共享同一打印機資源,其操作流程如下:
p1:entrycode使用打印機exitcodep2:entrycode使用打印機exitcode系統(tǒng)打印機即為——臨界資源P1和p2的訪問臨界資源打印機的代碼即為——臨界區(qū)進程同步與互斥進程互斥的實現Repeat
臨界區(qū)
其余代碼Untilfalseentrysectionexitsection例:司機-售票員問題司機活動:售票員活動:
do{do{
啟動車輛關車門正常行駛售票到站停車開車門
}while(1)}while(1)同步的例子互斥:軟件方法Peterson算法Dekker算法Lamport面包店算法Eisenberg/Mcguire算法進程同步與互斥互斥:硬件的支持中斷禁用在單處理器機器中,并發(fā)進程不能重疊,只能交替。此外,一個進程將一直運行,直到它調用了一個操作系統(tǒng)服務或被中斷。因此,為保證互斥,只需要保證一個進程不被中斷就可以當一個計算機系統(tǒng)包括多個處理器時,在這種情況下,禁止中斷不能保證互斥進程同步與互斥互斥:硬件的支持專門的機器指令在硬件級,對存儲器單元的訪問排斥到相同單元的其他訪問?;谶@一點,處理器的設計者提出了一些機器指令,用于保證兩個動作的原子性,如在一個取指令周期中對一個存儲器單元的讀和寫或者讀和測試。由于這些動作在一個指令周期中執(zhí)行,它們不會受到其他指令的干擾如:test-and-set指令,swap指令等進程同步與互斥信號量(Semaphore)管程(monitor)事件典型同步機制Lock和unlock關鎖和開鎖是加鎖機制的2個基本操作。在其中設置一公共變量x代表某個臨界資源的狀態(tài)
X=1表示資源可用
X=0表示資源正在被使用進程使用臨界資源必須做如下三個不可分割的操作
進程同步與互斥1)檢查x的值。x=0,資源正在使用,返回繼續(xù)進行檢查;
x=1,資源可以使用,置x為0(關鎖)2)進入臨界區(qū),訪問臨界資源3)釋放資源,退出臨界區(qū),置x為1(開鎖)通過分析,給出關鎖和開鎖操作的描述關鎖lock[x] L:ifx=0thengotoLelsex:=0;開鎖unlock[x] x:=1;Lock和unlock缺點:使用了忙等待,當一個進程在等待資源時,依然會消耗CPU時間可能會發(fā)生饑餓,有些進程由于長時間得不到資源??赡軣o法徹底實現互斥,有可能2個及以上的進程進入臨界區(qū)??赡芩梨i。當低優(yōu)先級進程獲取資源的情況下,被高優(yōu)先級進程搶占cpu,且高優(yōu)先級進程申請同一資源,由于互斥機制,高優(yōu)先級進程會進入永遠的忙等待。Lock和unlock信號量(semaphore):一個與資源有關的,初值為非負數的整型變量稱為信號量。用S表示,初值和資源有關信號量是一種特殊的變量,只能由semWait,semSignal原語進行操作訪問。信號量機制semWait原語(P原語)——semWait(S)/
P(S)S:=S-1;如果S>=0,則表示有資源,該進程繼續(xù)執(zhí)行;如果S<0,則表示已無資源,執(zhí)行原語的進程被置成阻塞狀態(tài),并使其在S信號量的隊列中等待,直至其他進程在S上執(zhí)行semSignal操作釋放它為止信號量機制semSignal原語(V原語)——semSignal(S)/V(S)S:=S+1如果S>0,則該進程繼續(xù)執(zhí)行如果S<=0,說明有進程被掛起,則喚醒一阻塞進程,即從S信號量的等待隊列首摘下一個PCB,將其置為就緒狀態(tài),執(zhí)行semSignal(S)者繼續(xù)執(zhí)行semWait操作可能會引起進程的阻塞,semSignal操作不會引起本身進程狀態(tài)的變化,但可能喚醒其他進程,使其從阻塞狀態(tài)轉變到就緒狀態(tài)信號量機制semWait/semSignal原語都是低級通信原語,一個正在執(zhí)行semWait/semSignal
操作的進程,不允許任何其他進程中斷它的操作,這樣就保證了同時只能有一個進程對信號量S施行semWait或semSignal實現互斥的例子與分析
打印機是一種臨界資源,必須互斥使用,則:
semWait(S)使用打印機semSignal(S)信號量機制P1P2P3P4關于s信號量的阻塞隊列
信號量S的初值為:2semWait(s)S=s-1=1semWait(s)S=s-1=0semWait(s)S=s-1=-1P3semWait(s)S=s-1=-2P4semSignal(s)S=s+1=-1喚醒就緒semSignal(s)S=s+1=0喚醒就緒semSignal(s)S=s+1=1semSignal(s)S=s+1=2用信號量實現同步的例子:司機-售票員問題:司機活動:售票員活動:
Do{Do{
關車門啟動車輛正常行駛售票到站停車
開車門
}While(1)
}While(1)信號量機制設置信號量S1,初值為0,用于司機“啟動汽車”和售票員“關車門”的同步設置信號量S2,初值為0,用于司機“到站停車”和售票員“開車門”的同步信號量機制(這里我們用pv描述)例子:司機-售票員問題:VARs1,s2:semaphore;(initialvalue0)司機活動:售票員活動:
Do{Do{
P(S1)
關車門
啟動車輛V(S1)
正常行駛售票到站停車P(S2)
V(S2)開車門
}While(1)}While(1)分析:從以上幾個例子可以看出在semWait中S:=S-1表示進程請求獲得一個資源當信號量S>0時,S的值表示某類資源可用的數量S<0
表示無資源分配給請求的進程,于是將它排在信號量S的等待隊列Q中,這時S的絕對值正好等于信號量隊列Q上的進程數目semSignal中的S:=S+1可知進程釋放了一個資源信號量機制信號量需要使用隊列來保存在信號量上等待的進程,進程按照某個順序從隊列中移出最公平的策略是先進先出(FIFO):被阻塞時間最久的進程最先從隊列釋放,定義中包括這個策略的信號量稱為強信號量沒有規(guī)定進程從隊列中移出順序的信號量稱為弱信號量強信號量保證不會餓死,是操作系統(tǒng)提供的典型的信號量形式信號量機制一個強信號量的例題:現有四個進程A、B、C、D,進程A、B、C依賴于進程D的結果,且進程D的一個計算結果只能作為A、B、C進程其中一個的輸入數據分析:進程A、B、C與進程D之間有相互協(xié)作關系——同步對于進程D的同一個計算結果,只能給進程A、B、C中的一個使用——某種意義上也是互斥設置信號量S,表示現有資源數(即可用的D的計算結果,設s當前值為1)信號量機制//A、B、C的程序偽代碼whiletruedo{semWait(S);
取得一個D的輸出數據;
處理數據;
一次處理完畢,sleep(2);}信號量機制//D的程序偽代碼
whiletruedo{處理數據;輸出一數據
semSignal(S);
一次任務完成,sleep(2);}DCA處理器信號量Bs=0②就緒隊列阻塞隊列semWait(S)semWait(S)處理器①信號量s=1阻塞隊列ABDC就緒隊列BDCAs=0
AS=-1BABD處理器信號量Cs=0④就緒隊列阻塞隊列semSignal(S)semWait(S)處理器③信號量s=-1阻塞隊列CA就緒隊列DBBs=0DBDs=-1CsemWait(S)As=-2ADBs=-2處理器⑤信號量s=-2阻塞隊列DB就緒隊列ACsemSignal(S)處理器⑥信號量s=-2阻塞隊列B就緒隊列DACS=-1ABC生產者/消費者問題是著名的進程同步問題p109問題描述有一組生產者進程和一組消費者進程。生產者進程生產物品(某種類型的數據);消費者進程消費物品。為使生產者和消費者進程并發(fā)執(zhí)行,在它們之間設置了一個具有n個緩沖區(qū)的緩沖池。生產者將他們生產的物品放入一個緩沖區(qū)中,消費者每次從一個緩沖區(qū)中取一個物品進行消費。生產者和消費之間必須保持一定的同步關系:不允許消費者進入空的緩沖池取物品,也不允許生產者向已滿的緩沖池中放物品。生產者/消費者問題p1p2p3p4pic1c2c3c4ci......生產者/消費者問題p1p2p3p4pic1c2c3c4ci......生產者/消費者問題管理員,怎么沒東西!消費者對生產者有依賴關系:只有生產者生產出產品,才能給消費者提供產品消費p1p2p3p4pic1c2c3c4ci......生產者/消費者問題生產者對消費者有依賴關系:只有消費者消費掉產品,才能給生產者提供存放產品的空間p1p2p3p4pic1c2c3c4ci......生產者/消費者問題p1c1同一時刻只允許一個生產者或者一個消費者進入緩沖池(倉庫)分析生產者與生產者之間——互斥消費者與消費者之間——互斥生產者與消費者之間——即有同步又有互斥設置信號量(設初始緩沖池為空,共有n個緩沖區(qū))用于互斥的公共信號量:s=1,表示緩沖池可用-倉庫
生產者的私有信號量:empty=n,表示可用緩沖區(qū)-空位
消費者的私有信號量:full=0,表示可用數據-物品偽代碼實現生產者/消費者問題Procedureproducer(){//生產者進程程序代碼
whiletruedo{producenextproduct;
semWait(empty);
semWait(s);buffer(in):=product;in:=(in+1)modn;
semSignal(full);
semSignal(s);}}生產者/消費者問題Procedureconsumer(){//消費者進程程序代碼whiletruedo{
semWait(full);
semWait(s);goods:=buffer(out);out:=(out+1)modn;
semSignal(empty);
semSignal(s);consumeproduct}}生產者/消費者問題ParbeginProcedureproducer();Procedureconsumer();parend生產者/消費者問題生產者和消費者中的兩個semWait語句分別可以互換嗎,為什么?
semWait(empty);semWait(full);semWait(s);semWait(s);生產者/消費者問題想一想讀者和寫者問題一個文件或記錄(即數據對象)可被多個進程共享。有些進程只要求讀—reader;有些進程要修改內容—writer。允許多個reader進程同時讀一個共享對象;但不允許writer進程和其他writer進程或reader進程同時訪問共享數據對象分析:對于writer,只需在訪問數據對象前,對信號量做semWait操作,釋放數據對象時,做semSignal操作。對于reader,第一個訪問數據對象者,要對信號量做一個semWait操作,而semSignal操作,則由最后一個釋放對象的執(zhí)行讀者和寫者問題因此設置一個變量readcount,以表示正在進行讀操作的進程數目,初值為0。則進入:每增加一個reader進程,readcount=readcount+1
readcount=1,reader進程對讀寫互斥信號量執(zhí)行
semWait操作退出:
每個reader進程退出,則readcount=readcount-1readcount=0,reader進程執(zhí)行semSignal操作讀者和寫者問題設置信號量寫者與其它寫者和讀者的互斥信號量:wrt初值為1;讀者對于readcount的互斥信號量:x,初值為1實現同步互斥關系
讀者和寫者問題§4.2進程的同步與互斥—信號量writer:P(wrt)writingV(wrt)Reader:P(x)Readcount++P(wrt)V(x)readingP(x)Readcount--V(x)V(wrt)=1!=1=0!=0writer;beginsemWait(wrt);
writingisperforming;
semSignal(wrt);
end;讀者和寫者問題reader;
begin
semWait(x);Readcount=readcount+1;
ifreadcount==1then
semWait(wrt);
semSignal(x);
readingisperfoming;
semWait(x);Readcount=readcount-1;
ifreadcount==0then
semSignal(wrt);
V(x);beginreadcount=0;wrt.value=1;x.value=1;cobeginr1:reader;……;rm:reader;w1:writer;……;wn:writer;coendend讀者和寫者問題問題:讀者源源不斷,read_count不歸0,寫者會被餓死。策略:一旦有寫者等待,新到達讀者等待,等正在讀的讀者都結束后,寫者先進入,即寫者優(yōu)先。實現代碼如下:讀者和寫者問題reader:BeginsemWait(z);semWait(rsem);semWait(x);readcount++;if(readcount==1)semWait(wsem);
semSignal(x);semSignal(rsem);semSignal(z);READUNIT();semWait(x);readcount--;if(readcount==0)
semSignal(wsem);semSignal(x);endwriter:Begin
semWait(y);
writecount++;
if(writecount==1)
semWait(rsem);
semSignal(y);semWait(wsem);WRITEUNIT();semSignal(wsem);semWait(y);
writecount--;
if(writecount==0)
semSignal(rsem);semSignal(y);endbeginreadcount=0;writecount=0;wsem.value=1;rsem.value=1;x.value=1;
y.value=1;cobeginr1:reader;……;rm:reader;w1:writer;……;wn:writer;coendend讀者和寫者問題理發(fā)室椅子入口出口等候室簡單理發(fā)店問題一個理發(fā)店由一個有幾張椅子的等候室、一個放有一張理發(fā)椅的理發(fā)室和一個理發(fā)師組成。若沒有要理發(fā)的顧客,則理發(fā)師就去睡覺;若一顧客走進理發(fā)店且所有的椅子都被占用了,則該顧客就離開理發(fā)店;若理發(fā)師正在為人理發(fā),則該顧客就找一張空椅子坐下等待;若理發(fā)師在睡覺,則顧客就喚醒他。簡單理發(fā)店問題分析只有當顧客坐上理發(fā)椅,理發(fā)師才開始理發(fā)—同步當正在理發(fā)的顧客理好發(fā),等待的顧客才能理發(fā)—同步同一時刻只有一個顧客能理發(fā)——互斥同一時刻只有有限的顧客能在等待室等待——互斥資源與信號量對于理發(fā)師:坐上理發(fā)椅的顧客,信號量barber=0對于理完發(fā)的顧客:是否有顧客等待,信號量wait=0對于進入的顧客:是否有人在理發(fā),及等候室是否已滿,變量count=0保證對共享變量count的互斥訪問的信號量:entry=1簡單理發(fā)店問題//共享數據結構:
varbarber,wait:semaphore;(初始值=0)
entry:semaphore; (初始值=1)
couter:integer; (初始值=0)//關于理發(fā)師的代碼段:
whiletruedo{
P(barber);
“Shave”
}簡單理發(fā)店問題//關于顧客的代碼段:
P(entry);
ifcount=nthen
{V(entry);exit;
} count:=count+1;
ifcount>1then
{V(entry);
P(wait);}簡單理發(fā)店問題elseV(entry);V(barber);
“Shave”
P(entry);
count:=count–1;
ifcount>0thenV(wait);
V(entry);理發(fā)室椅子入口出口等候室簡單理發(fā)店問題barber信號量隊列wait信號量隊列entry信號量隊列理發(fā)師理發(fā)師P(barber)P(entry)P(entry)count=0=1v(entry)喚醒count=1v(entry)Count=2P(wait)V(barber)QQ王國的簡單理發(fā)店問題理發(fā)師barber信號量隊列wait信號量隊列entry信號量隊列P(entry)count=5QQ王國的簡單理發(fā)店問題V(entry)P(entry)count=5count=4V(entry)V(wait)V(barber)P(barber)
解:
vara,b,c,d,e,f,g,h:semaphore(初值=0)
parbegin
beginS1;V(a);V(b);V(c);end;
beginP(a);S2;V(d);V(e);end;
beginP(b);S3;V(f);end;
beginP(c);P(d);S4;V(g);end;
beginP(e);P(f);S5;V(h);end;
beginP(g);P(h);S6;end;
parend例:考慮右圖所示的優(yōu)先圖,請用并發(fā)語句和信號量表達該優(yōu)先圖。習題S1S3S4S6S5S2abcdefhg桌上有一個空盤,允許存放一個水果。父親可向盤中放蘋果,也可向盤中放橘子,兒子專等吃盤中的橘子,女兒專等吃盤中的蘋果。規(guī)定當盤空時一次放一個水果供吃者取用,請用P,V原語實現父親、兒子、女兒三個并發(fā)進程的同步。分析同步/互斥關系:父親和兒子之間——同步父親和女兒之間——同步習題設置信號量父親的私有信號量s,表示盤子是否可用,初值為1兒子的私有信號量orange,表示是否有橘子可吃,初值為0女兒的私有信號量apple,表示是否有蘋果可吃,初值為0習題father進程:L1:P(S);將水果放入盤中;if(放入是橘子)
V(orange);elseV(apple) ;
gotoL1;
習題daughter進程:L2:P(apple);從盤中取出蘋果;V(S);吃蘋果; gotoL2;
son進程:L3:P(orange);從盤中取出橘子;V(S);吃橘子; gotoL3;
更為高級的同步機構中,最重要的是管程建立管程的基本理由:由于臨界區(qū)的執(zhí)行分散在各進程中,PV操作可能分布在各個程序中,很難看出在信號量上的操作所產生的整體效果;也很難發(fā)現和糾正分散在用戶程序中的對同步原語的錯誤使用等問題,也不便于系統(tǒng)對臨界資源的控制和管理開鎖、關鎖原語和信號量上的P、V操作,是低級的同步機構,很難表示更為復雜的并發(fā)性問題把分散的各同類臨界區(qū)集中起來,并為每個可共享資源設立一個專門的管程來統(tǒng)一管理各進程對該資源的訪問,這樣既便于系統(tǒng)管理共享資源,又能保證互斥訪問管程什么是管程?臨界資源的管理者或封裝者,進程必須通過管程訪問臨界資源管程主要由兩部分組成:局部于該管程的共享數據,這些數據表示了相應的資源局部于該管程的局部過程,由這些過程對臨界資源進行操作管程一次只允許一個進程進入其內(即訪問管程內的某個過程)——這是由編譯系統(tǒng)保證。管程對于cedure-name的調用都將保證如下操作:
semWait(mutex);
執(zhí)行相應的過程或函數
semSignal(mutex);
mutex是相對于某個管程的互斥信號量策略:當一個進程進入管程后由于某個原因被阻塞,應該立即釋放管程。對于阻塞原因設置條件變量,退出管程的進程到相應條件變量的等待隊列上排隊管程用管程實現生產者和消費者問題:為生產者與消費者的共享緩沖區(qū)建立一個管程
monitorbuffer;
procedureentryput(item);
beginifk=nthenfull.wait;
buffer(in):=item;
k:=k+1;in:=(in+1)modn;ifempty.queuethenempty.signal;end;管程procedureentryget(item);
beginifk=0thenempty.wait;
goods:=buffer(out);
k:=k-1;out:=(out+1)modn;iffull.queuethenfull.signal;end;p1p2p3p4pic2c3c4ci......生產者/消費者問題full.queueempty.queuec1p1p2p3p4pic2c3c4ci......生產者/消費者問題full.queueempty.queuec1p1p2p3p4pic2c3c4ci......生產者/消費者問題full.queueempty.queuec1初值:k=0;in=0;out=0;用管程實現生產者和消費者問題:Producer:beginrepeatproduceanitem;buffer.put(item);
untilfalse;end;管程Consumer:beginrepeatbuffer.get(item);
consumetheitem;
untilfalse;
End;進程通訊:進程同步,互斥及信息交換統(tǒng)稱為進程通信低級通訊(簡單信號)高級通訊(交換大宗的信息)進程高級通訊進程通訊模式共享內存模式消息傳遞模式進程psend發(fā)送區(qū)(消息)接收區(qū)(消息)進程qreceivehptrmutexsmPCBsptrnptrtextsptrnulltextaddpnulltextpaddpnulltextpnptr直接通信發(fā)送進程將消息連入接受方的消息隊列中;接收進程按先來先服務原則處理消息隊列中的消息。處理完一個消息之后,向發(fā)送進程回送一個“回答”信號為了能高效率地實現進程通信,操作系統(tǒng)設計了多種高級通信原語send(R,M)原語和receive(PID,N)原語直接通信send(R,M)(發(fā)送消息)原語send(R,M)原語用來發(fā)送消息,M是發(fā)送進程提供的發(fā)送信息send(R,M)原語先申請一個消息緩沖區(qū),然后把發(fā)送區(qū)的內容復制到消息緩沖區(qū)中。然后找到接收進程的PCB,把消息緩沖區(qū)連入接收進程的消息緩沖區(qū)隊列中代碼直接通信proceduresend(R,M);
benginnew(p);//創(chuàng)建一個空消息緩沖區(qū)將信息寫入消息緩沖區(qū)
尋找到接收者R的PCB;
semWait(mutex);
將消息加入R的消息隊列;
semSignal(sm);semSignal(mutex);
end;發(fā)送原語Send(R,M)receive(PID,N)(讀取消息)原語receive(PID,N)原語用來讀取消息,A是接收進程提供的接收區(qū)起始地址receive(PID,N)原語把消息緩沖區(qū)中的消息內容、消息長度以及發(fā)送進程的名字讀取到接收區(qū),然后把消息緩沖區(qū)從鏈表中去掉,并釋放消息緩沖區(qū)如果沒有消息可讀取,則阻塞接收進程,直至消息發(fā)送來為止直接通信procedurereceive(PID,N)
benginsemWait(Sm);semWait(mutex);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年互聯(lián)網金融平臺資金存管模式創(chuàng)新與風險防范深度分析報告
- 2025年醫(yī)療AI輔助診斷產品注冊審批中的技術創(chuàng)新與產業(yè)布局規(guī)劃報告
- 工業(yè)互聯(lián)網平臺增強現實交互技術在工業(yè)設備故障排除中的應用研究2025年報告
- 廢舊電子產品回收再利用項目2025年經濟效益分析報告
- 2025年電商綠色物流行業(yè)投資機會與風險預警分析報告
- 2025年環(huán)保產業(yè)技術創(chuàng)新與產業(yè)升級技術創(chuàng)新能力提升策略與效果評估報告
- 2025年廢舊塑料回收利用技術突破與產業(yè)鏈協(xié)同發(fā)展報告
- 2025年跨境電商零售會員制度創(chuàng)新與忠誠度提升策略報告
- 折扣零售業(yè)態(tài)在2025年區(qū)域市場拓展與競爭格局研究報告
- 創(chuàng)新型企業(yè)如何踐行2025年SDGs目標的實踐路徑報告
- 道路運輸企業(yè)主要負責人和安全生產管理人員安全考核試題庫及答案
- 【模板】領導XXX考察行程安排表
- 母親健康快車項目立項申請及實施計劃表格填報模板
- MDR醫(yī)療器械法規(guī)試卷
- DB11-139-2015鍋爐大氣污染物排放標準
- 大金D型水冷螺桿機說明書
- 五方責任主體授權書和承諾書
- 《泵站運行工》word版
- 食藥同源-PPT課件(PPT 55頁)
- 山東大學畢業(yè)論文答辯通用ppt模板
- 榆林智能礦山項目招商引資方案【參考范文】
評論
0/150
提交評論