版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Chapter 7 進程互斥與同步,1 進程互斥,2 進程同步,進 程 互 斥,1. 資源共享所引起的制約,2 互斥的加鎖實現(xiàn),3 信號量和P,V原語,4 用P,V原語實現(xiàn)進程互斥,1 資源共享所引起的制約,臨界區(qū),間接制約,互 斥,臨界區(qū),設(shè)有兩個計算進程PA、PB,共享內(nèi)存MS。堆棧s中存放那些空數(shù)據(jù)塊的地址。,1 資源共享所引起的制約,臨界區(qū),getspace為取空數(shù)據(jù)塊過程; getspace: begin local g gstacktop toptop-1 end,release(ad)為釋放數(shù)據(jù)塊過程 release(ad): begin toptop+1 stacktopad
2、end,把getspace和release(ad)抽象為兩個各以一個動作完成的順序 執(zhí)行單位,執(zhí)行結(jié)果的正確性是可以保證的。,1 資源共享所引起的制約,把不允許多個并發(fā)進程交叉執(zhí)行的一段程序稱為 臨界部分(critical section)或臨界區(qū)(critical region)。 臨界區(qū)也可以被稱為訪問公用數(shù)據(jù)的那段程序。 臨界區(qū)是由屬于不同并發(fā)進程的程序段共享公用數(shù)據(jù)或公 用數(shù)據(jù)變量而引起的。,臨界區(qū),1 資源共享所引起的制約,間接制約,一般來說,可以把那些不允許交叉執(zhí)行的臨界區(qū)按不同的 公用數(shù)據(jù)劃分為不同的集合 以公用數(shù)據(jù)棧S劃分的臨界區(qū)集合是 getspace,release。把這些
3、集合稱為類(class)。,顯然,對類給定一個唯一的標識名,系統(tǒng)就會容易地區(qū)分 它們。在程序的描述中,可用下列標準形式來描述臨界區(qū): when(類名)do臨界區(qū)od,1 資源共享所引起的制約,間接制約,設(shè)類(getspace,release)的類名為sp,則 getspace和release(ad)可重新描述為:,getspace: when sp do gstacktop toptop-1 od,release(ad): when sp do toptop+1 stacktopad od,1 資源共享所引起的制約,間接制約,間接制約: 由于共享某一公有資源而引起的在臨界區(qū)內(nèi)不 允許并發(fā)進程交
4、叉執(zhí)行的現(xiàn)象,稱為由共享公有 資源而造成的對并發(fā)進程執(zhí)行速度的間接制約, 簡稱間接制約。,1 資源共享所引起的制約,互 斥,互斥: 一組并發(fā)進程中的一個或多個程序段,因共享某一 公有資源而導致它們必須以一個不允許交叉執(zhí)行的單 位執(zhí)行。即,不允許兩個以上的共享該資源的并發(fā)進 程同時進入臨界區(qū)稱為互斥。,1 資源共享所引起的制約,一組并發(fā)進程互斥執(zhí)行時必須滿足如下準則: (1)不能假設(shè)各并發(fā)進程的相對執(zhí)行速度。即各并發(fā)進程享有平 等的、獨立的競爭共有資源的權(quán)利,且在不采取任何措施 的條件下,在臨界區(qū)內(nèi)任一指令結(jié)束時,其他并發(fā)進程可 以進入臨界區(qū)。 (2)并發(fā)進程中的某個進程不在臨界區(qū)時,它不阻止其
5、他進程進 入臨界區(qū)。 (3)并發(fā)進程中的若干個進程申請進入臨界區(qū)時,只能允許一個 進程進入。 (4)并發(fā)進程中的某個進程申請進入臨界區(qū)時開始,應在有限時 間內(nèi)得以進入臨界區(qū)。,1 資源共享所引起的制約,互 斥,2 互斥的加鎖實現(xiàn),2 互斥的加鎖實現(xiàn),當某個進程進入臨界區(qū)之后,它將鎖上臨界區(qū), 直到它退出臨界區(qū)時為止。 并發(fā)進程在申請進入臨界區(qū)時,首先測試該臨界 區(qū)是否是上鎖的。如果該臨界區(qū)已被鎖住,則該進程 要等到該臨界區(qū)開鎖之后才有可能獲得臨界區(qū)。,設(shè)臨界區(qū)的類名為S。為了保證每一次臨界區(qū)中只能有一個 程序段被執(zhí)行,又設(shè)鎖定位keyS。keyS表示該鎖定位屬于 類名為S的臨界區(qū)。,加鎖后的臨
6、界區(qū)程序描述如下: lock(keyS) (臨界區(qū)) unlock(keyS),2 互斥的加鎖實現(xiàn),設(shè)keyS1時表示類名為S的臨界區(qū)可用,keyS0時表示類名為S的臨界區(qū)不可用。 則,unlock(keyS)只用一條語句 即可實現(xiàn)。即: keyS1,lock(keyS)的一種實現(xiàn)方法是: lock(x) begin local v repeat vkeys until vl keys0 end,注意:這種實現(xiàn)方法是 不能保證并發(fā)進程互斥執(zhí)行 所要求的準則(3)的。 因為當同時有幾個進程 調(diào)用lock(keyS)時,在 x0語句執(zhí)行之前,可能已 有兩個以上的多個進程由于 keyS1而進入臨界區(qū)
7、。,為了解決這個問題,有些機器在硬件中設(shè)置了“測試與設(shè)置” (test and set)指令,從而保證第一步和第二步執(zhí)行的不可分離性。,2 互斥的加鎖實現(xiàn),3 信號量和P,V原語,信號量(semaphore),P,V原語,信號量,3 信號量和P,V原語,用加鎖的方法實現(xiàn)進程之間的互斥,存在一些影響系統(tǒng)可靠性和執(zhí)行效率的問題,并將導致在某些情況下出現(xiàn)不公平現(xiàn)象。,例如,進程PA和PB反復使用臨界區(qū)的情況:,PA A:lock(keyS) unlock(keyS) Goto A,PB B:lock(keyS) S unlock(keyS) Goto B,問題分析,用加鎖法解決進程互斥的問題時,一個
8、進程能否進入臨界區(qū)是依靠自己的測試。,信號量,3 信號量和P,V原語,信號量的概念是荷蘭科學家EWDijkstra提出來的。 在操作系統(tǒng)中,信號量sem是一整數(shù)。在sem大于等于零時代表可供并發(fā)進程使用的資源實體數(shù),但sem小于零時則表示正在等待使用臨界區(qū)的進程數(shù)。,建立一個信號量步驟: 說明所建信號量所代表的意義 賦初值 建立相應的數(shù)據(jù)結(jié)構(gòu)以便指向那些 等待使用該臨界區(qū)的進程。,3 信號量和P,V原語,信號量(semaphore),P,V原語,P,V原語,3 信號量和P,V原語,信號量的數(shù)值僅能由P,V原語操作改變。 采用P,V原語,可以把類名為S的臨界區(qū)描述為 When S do P(se
9、m) 臨界區(qū) V(sem) od sem是與臨界區(qū)內(nèi)所使用的公用資源有關(guān)的信號量。 一次P原語操作使得信號量sem減1,而一次V原語操作將使 得信號量sem加1。,P,V原語,3 信號量和P,V原語,當某個進程正在臨界區(qū)內(nèi)執(zhí)行時,其他進程如果執(zhí)行了P原 語操作,則該進程并不像調(diào)用lock時那樣因進不了臨界區(qū)而返 回到lock的起點,等以后重新執(zhí)行測試,而是在等待隊列中等 待有其他進程做V原語操作釋放資源后,進入臨界區(qū),這時,P 原語的執(zhí)行才算真正結(jié)束。 當有好幾個進程執(zhí)行P原語未通過而進入等待狀態(tài)之后,如有某進程作了V原語操作,則等待進程中的一個可以進入臨界區(qū),但其他進程必須等待。,P,V原語
10、,3 信號量和P,V原語,P原語操作的主要動作是: (1) sem減1; (2) 若sem減1后仍大于或等于 零,則進程繼續(xù)執(zhí)行; (3) 若sem減l后小于零, 則該進程被阻塞在與該信 號相對應的隊列中,然后 轉(zhuǎn)進程調(diào)度。,P,V原語,3 信號量和P,V原語,V原語的操作主要動作是: (1) sem加1; (2) 若相加結(jié)果大于零, 進程繼續(xù)執(zhí)行; (3) 若相加結(jié)果小于或等于 零,則從該信號的等待 隊列中喚醒一等待進程, 然后再返回原進程繼續(xù) 執(zhí)行或轉(zhuǎn)進程調(diào)度。,P,V原語,3 信號量和P,V原語,P,V過程要以原語實現(xiàn)的原因 其實現(xiàn)過程描述如下:加鎖法,P(sem):begin 封鎖中斷
11、; lock(lockbit) valsemvalsem-1 if valsem0 保護當前進程CPU現(xiàn)場 當前進程狀態(tài)置為”等待” 將當前進程插入信號sem等待隊列轉(zhuǎn)進程調(diào)度 fi unlock(lockbit); 開放中斷 end,P,V原語,3 信號量和P,V原語,V(sem):begin 封鎖中斷; lock(lockbit) vasemvalsem+1 if valsem0 localk 從sem等待隊列中選取一等待進程,將其指針置入k中 將k插入就緒隊列 進程狀態(tài)置“就緒” fi unlock(lockbit); 開放中斷 end,4 用P,V原語實現(xiàn)進程互斥,4 用P,V原語實現(xiàn)
12、進程互斥,設(shè)信號量sem是用于互斥的信號量,且其初值為l表示沒有 并發(fā)進程使用該臨界區(qū)。 只要把臨界區(qū)置于P(sem)和V(sem)之間,即可實現(xiàn)進程間 的互斥。,用信號量實現(xiàn)兩并發(fā)進程PA,PB互斥的描述如下: 1) 設(shè)sem為互斥信號量,其取值范圍為(1,0,-1)。 其中sem1 表示進程PA和PB都未進入類名為S的臨界區(qū), sem0 表示進程PA或PB已進入類名為S的臨界區(qū), sem-1 表示進程PA和PB中,一個進程已進入臨界區(qū),而另一個進程等待進入臨界區(qū)。,4 用P,V原語實現(xiàn)進程互斥,2) 描述: PA: P(sem) (S) V(sem), PB: P(sem) (S) V(s
13、em),進程同步,1 同步的概念,2 私用信號量,3 用P,V原語操作實現(xiàn)同步,4 生產(chǎn)者消費者問題,1 同步的概念,1 同步的概念,例子: 計算進程和打印進程共同使用同一緩沖區(qū)Buf。 計算進程反復地把每次計算結(jié)果放入Buf中, 而打印進程則把計算進程每次放入Buf中的數(shù)據(jù)通過打印 機打印輸出。 如果不采取任何制約措施,這兩個進程的執(zhí)行起始時間 和執(zhí)行速度都是彼此獨立的,其相應的控制段可以描述為:,1 同步的概念,Pc: A: local Buf Repeat Buf Buf Until Buf 空 計算 得到計算結(jié)果 Buf計算結(jié)果 Goto A,PP: B: local Pri Repe
14、at PriBuf Until Pri 空 打印Buf中的數(shù)據(jù) 清除Buf中的數(shù)據(jù) Goto B,把異步環(huán)境下的一組并發(fā)進程,因直接制約而互相合作、互相等待,使得各進程按一定的速度執(zhí)行的過程稱為進程間的同步。 具有同步關(guān)系的一組并發(fā)進程稱為合作進程,合作進程 間互相發(fā)送的信號稱為消息或事件。,1 同步的概念,同步的消息實現(xiàn)機制,如果對一個消息或事件賦以唯一的消息名,則可用過程: wait (消息名) 表示進程等待合作進程發(fā)來的消息,而用過程 signal (消息名) 表示向合作進程發(fā)送消息。,利用過程wait和signal,可以簡單地描述上面 例子中的計算進程Pc和打印進程Pp的同步關(guān)系如下:
15、,1 同步的概念,1 同步的概念,Pc: A:wait(Bufempty) 計算 Buf計算結(jié)果 Bufemptyfalse signal(Buffull) Goto A,PP: B:wait(Buffull) 打印Buf中的數(shù)據(jù) 清除Buf中的數(shù)據(jù) Buffu11false signal(Bufempty) Goto B,過程wait的功能是等待到消息名為true的進程繼續(xù)執(zhí)行,而signal的功能則是向合作進程發(fā)送合作進程所需要的消息名,并將其值置為true。,2 私用信號量,2 私用信號量,各進程之間發(fā)送的消息作為信號量看待。 與進程互斥時不同的是,這里的信號量只與制約進程 及被制約進程
16、有關(guān)而不是與整組并發(fā)進程有關(guān)。因此,稱該信號量為私用信號量(Private Semaphore)。 一個進程Pi的私用信號量Semi是從制約進程發(fā)送 來的進程Pi的執(zhí)行條件所需要的消息。 與私用信號量相對應,稱互斥時使用的信號量為 公用信號量。,3 用P,V原語操作實現(xiàn)同步,3 用P,V原語操作實現(xiàn)同步,利用P,V原語實現(xiàn)進程同步的方法與利用wait和signal過 程時相同,分為三步。 首先為各并發(fā)進程設(shè)置私用信號量, 然后為私用信號量賦初值, 最后利用P,V原語和私用信號量規(guī)定各進程的執(zhí)行順序。,3 用P,V原語操作實現(xiàn)同步,例:設(shè)進程PA和PB通過緩沖區(qū)隊列傳遞數(shù)據(jù)(如圖3.13)。,P
17、A為發(fā)送進程,PB為接收進程。PA發(fā)送數(shù)據(jù)時調(diào)用發(fā)送過程deposit(data),PB接收數(shù)據(jù)時調(diào)用過程remove(data)。且數(shù)據(jù)的發(fā)送和接收過程滿足如下條件: (1)在PA至少送一塊數(shù)據(jù)入一個緩沖區(qū)之前,PB不可能從緩沖區(qū)中取出數(shù)據(jù) (假定數(shù)據(jù)塊長等于緩沖區(qū)長度); (2) PA往緩沖隊列發(fā)送數(shù)據(jù)時,至少有一個緩沖區(qū)是空的; (3) 由PA發(fā)送的數(shù)據(jù)塊在緩沖隊列中按先進先出(FIFO)方式排列。,3 用P,V原語操作實現(xiàn)同步,分步描述過程deposit(data)和remove(data): (1) 設(shè)Bufempty為進程PA的私用信號量, Buffull為進程PB的私用信號量;
18、(2) 令Bufempty的初始值為n (n為緩沖隊列的緩沖區(qū)個數(shù)), Buffu11的初始值為0; (3) 描述:,3 用P,V原語操作實現(xiàn)同步,PA: deposit(data): begin local x P(Bufempty); 按FIFO方式選擇一個空緩沖區(qū)Buf(x); Buf(x)data Buf(x)置滿標記 V(Buffull) end,PB : remove(data): Begin local x P(Buffull); 按FIFO方式選擇一個裝滿數(shù)據(jù)的緩沖區(qū)Buf(x) dataBuf(x) Buf(x)置空標記 V(Bufempty) end,4 生產(chǎn)者消費者問題,
19、(producer-consumer problems),把并發(fā)進程的同步和互斥問題一般化,可以得到一 個抽象的一般模型,即生產(chǎn)者消費者問題。,計算機系統(tǒng)中,每個進程都申請使用和釋放各種不同類型的資源。把系統(tǒng)中使用某一類資源的進程稱為該資源的消費者,而把釋放同類資源的進程稱為該資源的生產(chǎn)者。 把一個長度為n的有界緩沖區(qū)(n0)與一群生產(chǎn)者進程 P1,P2,Pm和一群消費者進程C1,C2,Ck聯(lián)系起來(如圖3.14所示),4 生產(chǎn)者消費者問題,4 生產(chǎn)者消費者問題,設(shè)生產(chǎn)者進程和消費者進程是互相等效的,其中,各生產(chǎn) 者進程使用的過程deposit(data)和各消費者使用的過程 remove(d
20、ata)可描述如下: 1. 生產(chǎn)者消費者問題是一個同步問題。即生產(chǎn)者和消費者之間滿足如下條件: (1)消費者想接收數(shù)據(jù)時,有界緩沖區(qū)中至少有一個單元是滿的; (2)生產(chǎn)者想發(fā)送數(shù)據(jù)時,有界緩沖區(qū)中至少有一個單元是空的。 2. 由于有界緩沖區(qū)是臨界資源,因此,各生產(chǎn)者進程和各消 費者進程之間必須互斥執(zhí)行。,4 生產(chǎn)者消費者問題,設(shè):公用信號量mutex保證生產(chǎn)者進程和消費者進程之間的互斥, 信號量avail為生產(chǎn)者進程的私用信號量, 信號量full為消費者進程的私用信號量。 信號量avail表示有界緩沖區(qū)中的空單元數(shù),初值為n; 信號量full表示有界緩沖區(qū)中非空單無數(shù),初值為0。 信號量mut
21、ex表示可用有界緩沖區(qū)的個數(shù),初值為1。 從而有:,4 生產(chǎn)者消費者問題,deposit(data): begin P(avail) P(mutex) 送數(shù)據(jù)入緩沖區(qū)某單元 V(full) V(mutex) End,remove(data): begin P(full) P(mutex) 取緩沖區(qū)中某單元數(shù)據(jù) V(avail) V(mutex) end,進 程 通 信,1 進程的通信方式,2 消息緩沖機制,3 郵箱通信,4 進程通信的實例管道,進程通信,通信(communication)意味著在進程間傳送數(shù)據(jù)。 進程間的通信根據(jù)通信內(nèi)容可以劃分為二種:即 控制信息的傳送(低級通信)與大批量數(shù)據(jù)
22、傳送(高級通信)。 低級通信一般只傳送一個或幾個字節(jié)的信息,以達到控制 進程執(zhí)行速度的作用。 高級通信則要傳送大量數(shù)據(jù)。高級通信的目的不是為了控 制進程的執(zhí)行速度,而是為了交換信息。,1 進程的通信方式,在單機系統(tǒng)中,進程間通信可分為4種形式: (1)主從式; (2)會話式; (3)消息或郵箱機制; (4)共享存儲區(qū)方式。,1 進程的通信方式主從式,主從式(masterservant system)通信系統(tǒng)的 主要特點是: 主進程可自由地使用從進程的資源或數(shù)據(jù); 從進程的動作受主進程的控制; 主進程和從進程的關(guān)系是固定的。 主從式通信系統(tǒng)的典型例子是終端控制進程 和終端進程。,1 進程的通信方
23、式會話方式,2.會話方式(dialogue system)中,通信進程雙方可分別稱為使 用進程和服務進程。其中,使用進程調(diào)用服務進程提供的服務。 它們具有如下特點: 使用進程在使用服務進程所提供的服務之前,必須得到 服務進程的許可; 服務進程根據(jù)使用進程的要求提供服務,但對所提供服 務的控制由服務進程自身完成。 使用進程和服務進程在進行通信時有固定連接關(guān)系。 用戶進程與磁盤管理進程之間的通信是會話系統(tǒng)的一個例子。,1 進程的通信方式消息或郵箱機制,3. 消息或郵箱機制則無論接收進程是否已準備好接收消息,發(fā) 送進程都將把所要發(fā)送的消息送入緩沖區(qū)或郵箱。消息具有兩 互相通信的進程地位平等的意思。
24、消息的一般形式為4個部分組成。即: 發(fā)送進程名、接收進程名、數(shù)據(jù)和有關(guān)數(shù)據(jù)的操作(圖3.15),1 進程的通信方式消息或郵箱機制,消息或郵箱機制的特點是: 只要存在空緩沖區(qū)或郵箱,發(fā)送進程就可以發(fā)送消息。 與會話系統(tǒng)不同,發(fā)送進程和接收進程之間無直接連接關(guān)系,接收進程可能在收到某個發(fā)送進程發(fā)來的消息之后,又轉(zhuǎn)去接收另一個發(fā)送進程發(fā)來的消息。 發(fā)送進程和接收進程之間存在緩沖區(qū)或郵箱(圖3.16)用來存放被傳送消息。,1 進程的通信方式共享存儲區(qū)方式,4. 共享存儲區(qū)方式不要求數(shù)據(jù)移動。兩個需要互相交換信息的 進程通過對同一共享數(shù)據(jù)區(qū)(shared memory)的操作來達到互相 通信的目的。這個
25、共享數(shù)據(jù)區(qū)是每個互相通信進程的一個組成 部分。,幾種通信方式都可用于大量數(shù)據(jù)傳送,而且,由于其通信方式不同,需要使用不同的控制方式來達到通信進程之間同步或互斥的目的。,2 消息緩沖機制,Hansen在1973年首先提出。,發(fā)送進程和接收進程采用消息緩沖機制進行數(shù)據(jù)傳送時, 發(fā)送進程在發(fā)送消息前,先在自己的內(nèi)存空間設(shè)置一個發(fā)送區(qū),把欲發(fā)送的消息填入其中,然后再用發(fā)送過程將其發(fā)送出去。 接收進程則在接收消息之前,在自己的內(nèi)存空間內(nèi)設(shè)置相 應的接收區(qū),然后用接收過程接收消息。,2 消息緩沖機制,由于消息緩沖機制中所使用的緩沖區(qū)為公用緩沖區(qū),使用 消息緩沖機制傳送數(shù)據(jù)時,兩通信進程必須滿足如下條件:
26、在發(fā)送進程把消息寫入緩沖區(qū)和把緩沖區(qū)掛入消息隊列 時,應禁止其他進程對該緩沖區(qū)消息隊列的訪問。否則,將引 起消息隊列的混亂。同理,當接收進程正從消息隊列中取消息 緩沖時,也應禁止其他進程對該隊列的訪問。 當緩沖區(qū)中無消息存在時,接收進程不能接收到任何消 息。至于發(fā)送進程是否可以發(fā)送消息,則由發(fā)送進程是否申請 到緩沖區(qū)決定。,2 消息緩沖機制,設(shè)公用信號量mutex為控制對緩沖區(qū)訪問的互斥信號量, 其初值為1。 設(shè)SM為接收進程的私用信號量,表示等待接收的消息個數(shù), 其初值為0。 設(shè)發(fā)送進程調(diào)用過程Send(m)將消息m送往緩沖區(qū), 接收進程調(diào)用過程Receive(m)將消息m從緩沖區(qū)讀往自己的
27、數(shù) 據(jù)區(qū), 則Send(m)和Receive(n)可分別描述為:,2 消息緩沖機制,Send(m): Begin 向系統(tǒng)申請一個消息緩沖區(qū) P(mutex) 將發(fā)送區(qū)消息m送入新申請的消息緩沖區(qū) 把消息緩沖區(qū)掛入接收進程的消息隊列 V(mutex) V(SM) end,Receive(m): begin P(SM) P(mutex) 摘下消息隊列中的消息n 將消息n從緩沖區(qū)復制到接收區(qū) 釋放緩沖區(qū) V(mutex) end,3 郵箱通信,郵箱通信就是由發(fā)送進程申請建立一與接收進程鏈接 的郵箱。發(fā)送進程把消息送往郵箱,接收進程從郵箱中取 出消息,從而完成進程間信息交換。 設(shè)置郵箱的最大好處就是發(fā)
28、送進程和接收進程之間沒 有處理時間上的限制。且郵箱可考慮成發(fā)送進程與接收進 程之間的大小固定的私有數(shù)據(jù)結(jié)構(gòu)。,3 郵箱通信,郵箱由郵箱頭和郵箱體組成。其中郵箱頭描述郵箱名稱、郵箱大小、郵箱方向以及擁有該郵箱的進程名等。郵箱體主要用來存放消息,對于只有一發(fā)送進程和一接收進程使用的郵箱,則進程間通信應滿足如下條件: 發(fā)送進程發(fā)送消息時,郵箱中至少要有一個空格能存放該消息。 接收進程接收消息時,郵箱中至少要有一個消息存在。,3 郵箱通信,設(shè) 發(fā)送進程調(diào)用過程deposit(m)將消息發(fā)送到郵箱, 接收進程調(diào)用過程remove(m)將消息m從郵箱中取出。 為了記錄郵箱中空格個數(shù)和消息個數(shù), 信號量fr
29、omnum為發(fā)送進程的私用信號量, 信號量mesnum為接收進程的私用信號量。 fromnum的初值為信箱的空格數(shù)n,mesnum的初值為0。 則 deposit(m)和remove(m)可描述如下:,3 郵箱通信,deposit(m): begin local x P(fromnum) 選擇空格x 將消息m放入空格x中 置格x的標志為滿 V(mesnum) end,remove(m): begin local x P(mesnum) 選擇滿格x 把滿格x中的消息取出放m中 置格x標志為空 V(fromnum) end,5 進程通信的實例管道,1管道pipe UNIX系統(tǒng)從System V開始
30、,提供有名管道和無名管道兩種數(shù)據(jù)通信方式。,利用UNIX提供的系統(tǒng)調(diào)用pipe,可建立一條同步通信管道。其格式為: pipe(fd) int fd2; 這里,fd1為寫入端,fd0為讀出端。,5 進程通信的實例管道 :示例1,2.示例 例1:用C語言編寫一個程序;建立一個pipe,同時父進程生成一個子進程,子進程向pipe中寫入一字符串,父進程從pipe中讀出該字符串。 解: 程序如下: #include main() int x,fd2; Char buf30,s30; pipe(fd);*創(chuàng)建管道* while(x=fork()=-1);*創(chuàng)建子進程失敗時,循環(huán)*,5 進程通信的實例管道:
31、示例1,if(x=0) sprintf(buf,”This is an examplen”); write(fd1,buf,30); exit(0); else wait(0); read(fd0,s,30); printf(”s”,s); ,5 進程通信的實例管道 :示例2,例2:編寫一程序,建立一個管道。同時,父進程生成子進程 Pl,P2;這兩個子進程分別向管道中寫入各自的字符串, 父進程讀出它們(如圖3.21)。,#include main() int i,r,pl,p2,fd2; char buf50,s50;,5 進程通信的實例管道 :示例2,pipe(fd); while(pl=f
32、ork()=-1); if(p1=0) 1ockf(fd1,1,0); sprintf(buf,”child process P1 is sending messages!n”); printf(“child process P1!n”); write(fdl,buf,50); sleep(5); 1ockf(fd1,0,0); exit(0); else,5 進程通信的實例管道 :示例2, while(p2fork()=-1); if(p2=0) 1ockf(fd1,l,0); sprintf(buf,”child process P2 is sending messagesn”); printf(“child process P2!n”); write(fd1,buf,50); sleep(5); 1ockf(fdl,0,0); exit(0); else,5 進程通信的實例管道 :示例2,wait(0); if(rread(fd0,s,50) = -1) printf(“cant read pipen”); else printf(”sn”,s); wait(0); if(rread(fd0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學儀器科學與技術(shù)(儀表研發(fā)設(shè)計)試題及答案
- 2025年高職雪茄煙草葉制作與包裝(煙葉處理與包裝規(guī)范)試題及答案
- 2025年中職(會展策劃師)展會策劃階段測試題及答案
- 2025年中職第一學年(文秘)公文寫作技能試題及答案
- 2025年大學大二(森林保護學)病蟲害防治期末測試試題及答案
- 2025年中職會計事務(財務核算基礎(chǔ))試題及答案
- 2025年高職高星級飯店運營與管理(宴會策劃)試題及答案
- 2025年大學本科(會計學)財務報表編制與分析試題及答案
- 2025年高職包裝設(shè)計與制作(綠色包裝設(shè)計)試題及答案
- 2025年大學語文(經(jīng)典誦讀)試題及答案
- 器官移植術(shù)后排斥反應的風險分層管理
- 虛擬電廠關(guān)鍵技術(shù)
- 事業(yè)單位清算及財務報告編寫范本
- 護坡綠化勞務合同范本
- 臨床績效的DRG與CMI雙指標調(diào)控
- 2026年湛江日報社公開招聘事業(yè)編制工作人員備考題庫及完整答案詳解
- 2025-2026學年人教版數(shù)學三年級上學期期末仿真模擬試卷一(含答案)
- 中國腎移植排斥反應臨床診療指南(2025版)
- 核心素養(yǎng)視域下高中歷史圖表教學的應用研究答辯
- 地推銷售話術(shù)
- 企業(yè)盡職調(diào)查內(nèi)容提綱-中英文對照
評論
0/150
提交評論