




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、3.3 進(jìn)程(jnchng)控制3.3.1 進(jìn)程控制的概念 系統(tǒng)使用具有特定功能的程序段來創(chuàng)建、撤消進(jìn)程以及完成進(jìn)程各狀態(tài)間的轉(zhuǎn)換的過程。通過進(jìn)程控制,可以達(dá)到多進(jìn)程高效率并發(fā)執(zhí)行,同時也能很好地協(xié)調(diào)(xitio)并發(fā)進(jìn)程之間的推進(jìn)速度,實(shí)現(xiàn)資源共享。操作系統(tǒng)中是通過原語來完成對進(jìn)程的控制。原語:操作系統(tǒng)提供的為完成某系統(tǒng)功能的最基本的不可分割的操作。原語是不允許并發(fā)執(zhí)行的。原語分為機(jī)器指令級的原語和功能級原語兩類,它們都在核心態(tài)下執(zhí)行??刂七M(jìn)程的原語:創(chuàng)建、撤消、阻塞、喚醒等1共六十二頁3.3.2 進(jìn)程的創(chuàng)建與撤銷1、進(jìn)程的創(chuàng)建:(1)、創(chuàng)建進(jìn)程的典型事件批處理系統(tǒng)中的作業(yè)調(diào)度;用戶登錄;用
2、戶啟動應(yīng)用程序;由操作系統(tǒng)創(chuàng)建的系統(tǒng)服務(wù);創(chuàng)建新的進(jìn)程。(2)、創(chuàng)建方式:A)由系統(tǒng)程序統(tǒng)一(tngy)創(chuàng)建B)由父進(jìn)程創(chuàng)建不管用那種方式創(chuàng)建進(jìn)程,都是調(diào)用創(chuàng)建進(jìn)程原語實(shí)現(xiàn)的2共六十二頁(3)創(chuàng)建進(jìn)程原語的工作(gngzu)過程A)申請空閑的PCB表項B)填PCB表的內(nèi)容C)把當(dāng)前PCB加入就緒隊列D)將當(dāng)前PCB加入進(jìn)程家族或進(jìn)程鏈(4)進(jìn)程控制塊常用數(shù)據(jù)項Idi:進(jìn)程標(biāo)識符;i.status:進(jìn)程狀態(tài);i.state:隊列指針;i.Addr:隊列中;i.Priority:進(jìn)程優(yōu)先數(shù);i.CPU-state:CPU的狀態(tài)保護(hù)區(qū)i.mainstore:分配的主存儲區(qū)域;i.resource:資
3、源清單;i.parent:父進(jìn)程指針;geny:后代進(jìn)程指針.3共六十二頁(5)創(chuàng)建(chungjin)原語算法void create(n,s0,k0,m0,r0,acc)i=getinternal-name(n);i.id=n;i.priority=k0;i.CPU-state=s0;i.mainstore=m0;i.resource=r0;i.status=“ready”;j=*Ep;i.parent=j;geny=nil;geny=I;i.state=RL;insert(RL,i)4共六十二頁2、進(jìn)程的撤消(1)撤消進(jìn)程的原因:A)進(jìn)程完成任務(wù)(rn wu)
4、,正常終止B)進(jìn)程運(yùn)行出錯異常終止C)其祖先進(jìn)程要求撤消不管由于哪種原因撤消進(jìn)程,都是調(diào)用撤消進(jìn)程原語實(shí)現(xiàn)的.進(jìn)程的撤消方式有兩種:A)僅撤消該P(yáng)ID代表的進(jìn)程B)撤消該P(yáng)ID代表的進(jìn)程及其所有子孫進(jìn)程這兩種方式各有優(yōu)缺點(diǎn)5共六十二頁(2)撤消進(jìn)程原語的工作過程:A)根據(jù)進(jìn)程PID查找(ch zho)進(jìn)程鏈或進(jìn)程家族,a)如找到,則看其有無子進(jìn)程,如有:再調(diào)用撤消進(jìn)程原語繼續(xù)查找,若無,繼續(xù)執(zhí)行Bb)若未找到,做出錯處理B)釋放該進(jìn)程所占有的資源C)釋放該進(jìn)程的PCBD)返回6共六十二頁(3)撤消原語算法(sun f)描述void destroy(n)i=getinternal-name(n)
5、;sched=false;kill(i);if (sched=true) scheduler;else continue;kill (i)if (i.status=“ready”)stop(i);sched=ture;while (geny) kill(s);remove(i.state,i);7共六十二頁3.4.3 進(jìn)程(jnchng)等待與喚醒1、進(jìn)程等待阻塞原語的工作過程A)保存當(dāng)前進(jìn)程的CPU現(xiàn)場B)將其狀態(tài)修改(xigi)為等待狀態(tài)C)將其插入對應(yīng)的等待隊列D)轉(zhuǎn)進(jìn)程調(diào)度程序阻塞原語的算法描述void block(WQr)i=*EP;/*取得調(diào)用者進(jìn)程的PCB*/stop
6、(i);/*剝奪CPU*/i.status=”blocked”/*將進(jìn)程i的狀態(tài)置為阻塞狀態(tài)*/i.state=WQr;/*填入所在隊列的首指針*/insert(WQr);/*插入相應(yīng)阻塞隊列*/scheduler;/*進(jìn)程調(diào)度*/8共六十二頁2、進(jìn)程喚醒喚醒原語的工作過程:A)根據(jù)喚醒原因,從對應(yīng)的等待隊列中摘下一PCBB)將其狀態(tài)(zhungti)修改為就緒狀態(tài)(zhungti)C)將其插入就緒隊列D)轉(zhuǎn)進(jìn)程調(diào)度程序或返回喚醒原語的算法描述:void wakeup(WQr)i=remove(WQr);/*查找并得到PCB(n),從阻塞隊列wQr中移出n*/i.status=”ready”;
7、/*置進(jìn)程i的狀態(tài)為就緒狀態(tài)*/i.state=RQ;/*填入所在隊列的首指針*/insert(RQ,i);/*插入就緒隊列RQ*/scheduler;/*進(jìn)程調(diào)度*/9共六十二頁3.4 進(jìn) 程 協(xié)作與系統(tǒng)(xtng)的支持 3.4.1 進(jìn)程競爭(jngzhng)與合作 1、間接制約:由共享公有資源而造成的對并發(fā)進(jìn)程執(zhí)行速度的間接制約,稱為間接制約;受相互間接制約的各進(jìn)程在推進(jìn)順序上是任意的。2、直接制約:一組在異步環(huán)境下的并發(fā)進(jìn)程,各自的執(zhí)行結(jié)果互為對方的執(zhí)行條件,從而限制各進(jìn)程的執(zhí)行速度的過程稱為并發(fā)進(jìn)程的直接制約。10共六十二頁3.4.2 進(jìn)程互斥的概念1、臨界資源:在一段時間內(nèi)只允許一
8、個進(jìn)程使用的資源2、臨界區(qū)(臨界段):進(jìn)程中訪問臨界資源的代碼段3、進(jìn)程互斥:一組并發(fā)進(jìn)程中的一個或多個程序段,因共享某一公有資源而導(dǎo)致它們必須(bx)以一個不允許交叉執(zhí)行的單位執(zhí)行。也就是說,不允許兩個以上的共享該資源的并發(fā)進(jìn)程同時進(jìn)入臨界區(qū)稱為互斥。4、同步機(jī)構(gòu)應(yīng)遵循的準(zhǔn)則(1) 空閑讓進(jìn)。(2) 忙則等待。 (3) 有限等待。 (4) 讓權(quán)等待。11共六十二頁3.4.3 上鎖原語和開鎖原語1、信號量(信號燈)1)問題的引入:為臨界資源(zyun)S設(shè)置鎖key,當(dāng)key為1時,資源可用,否則不可用。Lock(keys)測試key,若key為1,則將key賦值為0并退出,unlock(ke
9、ys)則將key賦值為1。PA:A:lock(keys)Unlock(keys)GOTO APB:B:lock(keys)Unlock(keys)GOTO B結(jié)果:容易導(dǎo)致一個(y )進(jìn)程饑餓12共六十二頁2)信號量定義(dngy):信號量:除賦初值外僅能由同步原語(P、V操作)對其操作的整型變量,其值與其代表的資源使用情況有關(guān)。信號量的物理意義:當(dāng)其值0時,代表可用資源的數(shù)量。當(dāng)其值0時,其絕對值代表因請求使用該信號量所代表的資源而被阻塞的進(jìn)程數(shù)量。3)建立一個信號量時,必須說明所建信號量所代表的意義和賦初值13共六十二頁4)信號量的分類:按其數(shù)據(jù)類型分類:整型信號量記錄型信號量Struct
10、 semaphore int value;Pointer:*struct PCB;5)信號量的初值:由于信號量是代表(dibio)資源的相關(guān)屬性的,因此,其初值就應(yīng)該為當(dāng)前該資源的可使用數(shù)量。如:我們設(shè)定用信號量S代表系統(tǒng)內(nèi)的打印機(jī)資源,系統(tǒng)內(nèi)有5臺打印機(jī),則S的初值就應(yīng)該為5。14共六十二頁3.4.4 P、V原語P、V原語是操作系統(tǒng)中提供(tgng)的用于對進(jìn)程之間相互推進(jìn)速度進(jìn)行控制的最基本的操作。它操作的對象只能是信號量。1)P(sem)原語的主要動作:sem=sem-1若sem0,則返回否則調(diào)用阻塞原語把當(dāng)前進(jìn)程阻塞轉(zhuǎn)進(jìn)程調(diào)度程序15共六十二頁2)V(sem)原語的主要動作:sem=s
11、em+1若sem0,則返回否則調(diào)用喚醒原語把當(dāng)前阻塞隊列中的對首進(jìn)程喚醒或全部喚醒轉(zhuǎn)進(jìn)程調(diào)度程序(chngx)或返回3、P、V原語的實(shí)現(xiàn)P原語的實(shí)現(xiàn)P(sem):關(guān)中斷Lock(lockbit)/用于防止多個進(jìn)程同時調(diào)用P,V操作Valsem=valsem-1If valsem0調(diào)用阻塞原語相關(guān)功能Unlock(lockbit)開中斷 16共六十二頁V原語的實(shí)現(xiàn)V(sem):關(guān)中斷Lock(lockbit)/用于防止多個進(jìn)程同時調(diào)用P,V操作Valsem=valsem+1If valsem=0調(diào)用喚醒原語相關(guān)功能Unlock(lockbit)開中斷 4、P、V原語實(shí)現(xiàn)互斥用P、V原語實(shí)現(xiàn)進(jìn)程互
12、斥:(1)定義信號量,必須說明其所代表的資源(zyun)(2)設(shè)定信號量的初值:1(3)在臨界段進(jìn)入?yún)^(qū)執(zhí)行:P(信號量)操作(4)在臨界段退出區(qū)執(zhí)行:V(信號量)操作17共六十二頁例如:有兩個用戶進(jìn)程A和B,在運(yùn)行過程中都要使用系統(tǒng)中的一臺打印機(jī)輸出計算結(jié)果。(1) 試說明A、B兩進(jìn)程之間存在什么樣的制約關(guān)系?(2) 為保證這兩個進(jìn)程能正確地打印出各自(gz)的結(jié)果,請用信號量和P、V操作寫出各自的有關(guān)申請、使用打印機(jī)的代碼。要求給出信號量的含義和初值。18共六十二頁(1)A、B兩進(jìn)程之間存在互斥的制約關(guān)系。因為打印機(jī)屬于臨界資源,必須一個進(jìn)程使用(shyng)完之后另一個進(jìn)程才能使用(shy
13、ng)。(2)mutex:用于互斥的信號量,因為只有一臺打印機(jī),所以初值為1。進(jìn)程A 進(jìn)程B. . .P(mutex); P(mutex);申請打印機(jī); 申請打印機(jī);使用(shyng)打印機(jī); 使用(shyng)打印機(jī);V(mutex); V(mutex); 19共六十二頁作業(yè):系統(tǒng)有三個進(jìn)程Read,Write1,Write2共享一個(y )整數(shù)緩沖器b,b中每次只能存放一個整數(shù)。Read進(jìn)程每次啟動輸入設(shè)備輸入一個整數(shù)到b。若b中是奇數(shù),則由進(jìn)程Write1將其取出打?。蝗鬮中是偶數(shù),則由進(jìn)程Write2將其取出打印。規(guī)定輸入與打印整數(shù)的個數(shù)和次序完全一致。(用、原語實(shí)現(xiàn))20共六十二頁
14、1. 整型信號量 最初由Dijkstra把整型信號量定義為一個(y )整型量,除初始化外,僅能通過兩個標(biāo)準(zhǔn)的原子操作(Atomic Operation) wait(S)和signal(S)來訪問。這兩個操作一直被分別稱為P、V操作。 wait和signal操作可描述為: wait(S): while S0 do no-op S=S-1; signal(S): S =S+1; 3.4.5 信號量機(jī)制(jzh) 21共六十二頁 2. 記錄型信號量 在整型信號量機(jī)制中的wait操作,只要是信號量S0, 就會不斷地測試。因此,該機(jī)制并未遵循“讓權(quán)等待”的準(zhǔn)則, 而是使進(jìn)程處于“忙等”的狀態(tài)。記錄型信號
15、量機(jī)制,則是一種(y zhn)不存在“忙等”現(xiàn)象的進(jìn)程同步機(jī)制。但在采取了“讓權(quán)等待”的策略后,又會出現(xiàn)多個進(jìn)程等待訪問同一臨界資源的情況。為此,在信號量機(jī)制中,除了需要一個用于代表資源數(shù)目的整型變量value外,還應(yīng)增加一個進(jìn)程鏈表L,用于鏈接上述的所有等待進(jìn)程。記錄型信號量是由于它采用了記錄型的數(shù)據(jù)結(jié)構(gòu)而得名的。它所包含的上述兩個數(shù)據(jù)項可描述為: 22共六十二頁type semaphore=record value:integer; L:list of process; end相應(yīng)地,wait(S)和signal(S)操作(cozu)可描述為:procedure wait(S) var S
16、: semaphore; begin S.value =S.value-1; if S.value0 then block(S,L) end procedure signal(S) var S: semaphore; begin S.value =S.value+1; if S.value0 then wakeup(S,L); end 23共六十二頁 在記錄型信號量機(jī)制中,S.value的初值表示系統(tǒng)中某類資源的數(shù)目, 因而又稱為資源信號量,對它的每次wait操作,意味著進(jìn)程請求一個單位的該類資源,因此描述為S.value =S.value-1; 當(dāng)S.value0時,表示該類資源已分配完畢,
17、因此進(jìn)程應(yīng)調(diào)用block原語,進(jìn)行自我阻塞,放棄處理機(jī),并插入到信號量鏈表S.L中??梢?,該機(jī)制遵循了“讓權(quán)等待”準(zhǔn)則(zhnz)。 此時S.value的絕對值表示在該信號量鏈表中已阻塞進(jìn)程的數(shù)目。 對信號量的每次signal操作,表示執(zhí)行進(jìn)程釋放一個單位資源,故S.value =S.value+1操作表示資源數(shù)目加1。 若加1后仍是S.value0,則表示在該信號量鏈表中,仍有等待該資源的進(jìn)程被阻塞,故還應(yīng)調(diào)用wakeup原語,將S.L鏈表中的第一個等待進(jìn)程喚醒。如果S.value的初值為1,表示只允許一個進(jìn)程訪問臨界資源,此時的信號量轉(zhuǎn)化為互斥信號量。 24共六十二頁3. AND型信號量
18、在兩個進(jìn)程中都要包含兩個對Dmutex和Emutex的操作, 即process A: process B:wait(Dmutex); wait(Emutex);wait(Emutex); wait(Dmutex);若進(jìn)程A和B按下述次序交替執(zhí)行wait操作:process A: wait(Dmutex); 于是(ysh)Dmutex=0process B: wait(Emutex); 于是Emutex=0process A: wait(Emutex); 于是Emutex=-1 A阻塞process B: wait(Dmutex); 于是Dmutex=-1 B阻塞 25共六十二頁 AND同步機(jī)制
19、的基本思想是:將進(jìn)程在整個運(yùn)行過程中需要的所有資源,一次性全部地分配給進(jìn)程,待進(jìn)程使用完后再一起釋放。只要尚有一個資源未能分配給進(jìn)程,其它所有可能為之分配的資源,也不分配給他。亦即,對若干個臨界資源的分配,采取原子操作方式:要么全部分配到進(jìn)程,要么一個也不分配。 由死鎖理論可知,這樣(zhyng)就可避免上述死鎖情況的發(fā)生。為此,在wait操作中,增加了一個“AND”條件,故稱為AND同步,或稱為同時wait操作, 即Swait(Simultaneous wait)定義如下: 26共六十二頁Swait(S1, S2, , Sn) if Si1 and and Sn1 then for i =1
20、 to n do Si=Si-1; endfor else place the process in the waiting queue associated with the first Si found with Si1, and set the program count of this process to the beginning of Swait operation endifSsignal(S1, S2, , Sn) for i =1 to n do Si=Si+1; Remove all the process waiting in the queue associated
21、with Si into the ready queue. endfor; 27共六十二頁4. 信號量集 Swait(S1, t1, d1, , Sn, tn, dn) if Sit1 and and Sntn then for i=1 to n do Si=Si-di; endfor else Place the executing process in the waiting queue of the first Si with Siti and set its program counter to the beginning of the Swait Operation. endif s
22、ignal(S1, d1, , Sn, dn) for i=1 to n do Si =Si+di;Remove all the process waiting in the queue associated with Si into the ready queue endfor; 28共六十二頁 一般“信號量集”的幾種(j zhn)特殊情況: (1) Swait(S, d, d)。 此時在信號量集中只有一個信號量S, 但允許它每次申請d個資源,當(dāng)現(xiàn)有資源數(shù)少于d時,不予分配。 (2) Swait(S, 1, 1)。 此時的信號量集已蛻化為一般的記錄型信號量(S1時)或互斥信號量(S=1時)。
23、 (3) Swait(S, 1, 0)。這是一種很特殊且很有用的信號量操作。當(dāng)S1時,允許多個進(jìn)程進(jìn)入某特定區(qū);當(dāng)S變?yōu)?后,將阻止任何進(jìn)程進(jìn)入特定區(qū)。換言之,它相當(dāng)于一個可控開關(guān)。 29共六十二頁3.4.6 信號量的應(yīng)用(yngyng) 1. 利用(lyng)信號量實(shí)現(xiàn)進(jìn)程互斥 利用信號量實(shí)現(xiàn)進(jìn)程互斥的進(jìn)程可描述如下:Var mutex:semaphore =1; begin parbegin process 1: begin repeat wait(mutex); critical section signal(mutex); remainder seetion until false;
24、30共六十二頁 end process 2: begin repeat wait(mutex); critical section signal(mutex); remainder section until false; end parend 31共六十二頁2. 利用信號量實(shí)現(xiàn)(shxin)前趨關(guān)系 前趨圖舉例(j l) 32共六十二頁 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(a); S2; signal(c); sig
25、nal(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 33共六十二頁作業(yè):系統(tǒng)有三個進(jìn)程Read,Write1,Write2共享一個整數(shù)緩沖器b,b中每次只能存放一個整數(shù)。Read進(jìn)程每次啟動輸入設(shè)備輸入一個整數(shù)到b。若b中是奇數(shù),則由進(jìn)程Write1將其取出打印;若b中是偶數(shù),則由進(jìn)程Write2將其取出打印
26、。規(guī)定輸入與打印整數(shù)的個數(shù)和次序(cx)完全一致。(用、原語實(shí)現(xiàn))34共六十二頁3.5.1、同步的定義同步的定義:一組并發(fā)進(jìn)程由于相互合作共同完成某種任務(wù),因而相互等待,使得各進(jìn)程按一定的速度執(zhí)行的過程(guchng)?;コ馐且环N特殊的同步。私用信號量:只與制約和被制約進(jìn)程有關(guān)的信號量。用于同步的信號量。例:分析:根據(jù)題意可知:只有當(dāng)緩沖隊列有一個及一個以上滿緩沖時,Pb才可以繼續(xù)執(zhí)行,否則等待Pa發(fā)送數(shù)據(jù);PbPaBufnBuf2Buf13.5 進(jìn)程同步的概念(ginin)35共六十二頁同理只有當(dāng)緩沖隊列中有一個及一個以上空緩沖時,Pa才可以繼續(xù)執(zhí)行,否則等待Pb取走數(shù)據(jù)(shj);因此,P
27、a和Pb之間存在同步關(guān)系。信號量的設(shè)定:設(shè)代表滿緩沖區(qū)數(shù)量的信號量為Full設(shè)代表空緩沖區(qū)數(shù)量的信號量為Empty設(shè)初值:Full=0, Empty=n36共六十二頁3.5.2 用P、V實(shí)現(xiàn)進(jìn)程同步示例生產(chǎn)者-消費(fèi)者問題(wnt)分析1 2 3 np1p2pmc1c2cm分析生產(chǎn)者進(jìn)程(jnchng)與消費(fèi)者進(jìn)程(jnchng)間的同步互斥關(guān)系1)生產(chǎn)者進(jìn)程間(互斥)2)消費(fèi)者進(jìn)程間(互斥)3)生產(chǎn)者-消費(fèi)者之間(同步互斥)37共六十二頁信號量設(shè)定:設(shè)代表非空緩沖區(qū)數(shù)量的信號量為full,代表空緩沖區(qū)數(shù)量的信號量為empty,代表緩沖區(qū)資源使用情況的信號量為mutex(互斥)設(shè)定初值:full
28、=0,empty=n,mutex=1書寫(shxi)算法:1、生產(chǎn)者首先申請空緩沖區(qū)資源,若無則等待申請占用緩沖區(qū)(why)查找空閑緩沖區(qū),在找到的空緩沖區(qū)中填入數(shù)據(jù),置滿緩沖標(biāo)志。放棄對緩沖區(qū)的占用,增加可用滿緩沖數(shù)量38共六十二頁2、消費(fèi)者:首先申請滿緩沖資源(zyun),若無則等待申請占用緩沖區(qū)(why)查找滿緩沖區(qū),從找到的滿緩沖區(qū)中取走數(shù)據(jù),置空閑緩沖標(biāo)志放棄對緩沖區(qū)的占用,增加可用空緩沖區(qū)數(shù)量main() int full=0; int empty=n int mutex=1; cobegin p1();p2();pm(); c1();c2();ck(); coend;39共六十二
29、頁producer()while(生產(chǎn)(shngchn)未完成)生產(chǎn)一個產(chǎn)品;P(empty);P(mutex);送數(shù)據(jù)入緩沖區(qū)某單元;V(full);V(mutex);consumer()while(還要繼續(xù)消費(fèi))P(full);P(mutex);取緩沖區(qū)某單元(dnyun)數(shù)據(jù);V(empty);V(mutex);消費(fèi)一個產(chǎn)品;40共六十二頁3.5.2 用消息通信(tng xn)實(shí)現(xiàn)哲學(xué)家進(jìn)餐問題分析:每個哲學(xué)家的行為是:思考,感到饑餓,拿到兩只筷子,進(jìn)餐,餐畢,放下兩只筷子又繼續(xù)思考。為了(wi le)進(jìn)餐,每個哲學(xué)家必須拿到兩只筷子,并且每個人只能直接從自己的左邊或右邊去取筷子。但他可
30、能一支都拿不到。只有在他拿到兩支筷子時方能進(jìn)餐。設(shè)置信號量如下:哲學(xué)家進(jìn)餐信號量sm,初值為4;筷子信號量chopsticki,初值為1;哲學(xué)家進(jìn)餐問題描述如下:41共六十二頁semaphore sm=4;semaphore chopstick5=1,1,1,1,1;void main()parbegin(philosopher0(),philosopher1(),philosopher2(),philosopher3(),philosopher4();void philosopheri();/*i=0,1,2,3,4*/while (true) Thinking; wait(sm); wai
31、t(chopsticki); wait(chopstick(i+1)%5); Eating; signal(chopstick(i+1)%5); signal(chopsticki); signal(sm); 42共六十二頁3.6 進(jìn)程(jnchng)通信3.6.1進(jìn)程通信的概念進(jìn)程通信:進(jìn)程間數(shù)據(jù)的傳遞過程。進(jìn)程通信分類:1)低級(dj)通信:進(jìn)程之間傳送數(shù)據(jù)量很小,一般都是用來傳送控制信息,從而實(shí)現(xiàn)進(jìn)程之間的同步和互斥。2)高級通信:進(jìn)程之間進(jìn)行大量數(shù)據(jù)傳送的通信方式。其主要目的是為了交換信息。 進(jìn)程的高級通信有三種形式:共享存儲器通信方式、共享文件通信方式、消息傳遞通信方式。43共六十二
32、頁還可以把進(jìn)程通信分為直接通信和間接通信1)直接通信:是指發(fā)送方把信息直接傳遞給接收方。2)間接通信:是指通信過程要借助收發(fā)雙方進(jìn)程之外的共享數(shù)據(jù)結(jié)構(gòu)作為(zuwi)通信中轉(zhuǎn)如信箱。44共六十二頁3.6.2 進(jìn)程通信(tng xn)方式一、共享存儲器的通信(tng xn)方式基于(jy)共享存儲區(qū)通信方式基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式45共六十二頁linux中共享存儲區(qū)的創(chuàng)建、附接和斷接(1)使用系統(tǒng)調(diào)用shmget(key,size,flag)獲得一個共享存儲區(qū)。(2)使用系統(tǒng)調(diào)用shmat(id,addr,flag)從邏輯上將(shngjing)一個共享存儲區(qū)附接到進(jìn)程的虛擬地址空間上。(3)
33、使用系統(tǒng)調(diào)用shmdt(addr)把一個共享存儲區(qū)從指定進(jìn)程的虛地址空間分開。(4)使用系統(tǒng)調(diào)用 shmctl(id,cmd,buf)對與共享存儲區(qū)關(guān)聯(lián)的各種參數(shù)進(jìn)行操作,從而對共享存儲區(qū)進(jìn)行控制。 46共六十二頁實(shí)驗內(nèi)容:編制一長度為1k的共享存儲區(qū)發(fā)送和接收程序。 (1)為了便于操作和觀察結(jié)果,用一個程序為“引子”,先后fork( )兩個子進(jìn)程,SERVER 和 CLIENT,進(jìn)行通信。 (2)SERVER端建立一個KEY為75的共享區(qū),并將第一個字節(jié)置為-1.作為數(shù)據(jù)空的標(biāo)志.等待其他進(jìn)程發(fā)來的消息.當(dāng)該字節(jié)的值發(fā)生變化時,表示(biosh)收到了該消息,進(jìn)行處理.然后再次把它 的值設(shè)為
34、-1.如果遇到的值為0,則視為結(jié)束信號,取消該隊列,并退出SERVER.SERVER每接 收到一次數(shù)據(jù)后顯示”(server)received”. (3)CLIENT端建立一個為75的共享區(qū),當(dāng)共享取得第一個字節(jié)為-1時, Server端空閑,可發(fā)送 請求. CLIENT 隨即填入9到0.期間等待Server端再次空閑.進(jìn)行完這些操作后, CLIENT 退出. CLIENT每發(fā)送一次數(shù)據(jù)后顯示”(client)sent”. (4)父進(jìn)程在SERVER和CLIENT均退出后結(jié)束. 47共六十二頁二、共享文件(wnjin)通信方式1、通信方式 管道為建立管道的進(jìn)程及其子孫進(jìn)程提供了一條以比特流方式
35、傳出消息的通信管道。管道在邏輯上被看作文件,物理(wl)上是由文件系統(tǒng)的高速緩沖區(qū)構(gòu)成。48共六十二頁發(fā)送:發(fā)送進(jìn)程用文件系統(tǒng)的系統(tǒng)調(diào)用write(fd1,buf,size),把buf長度為size的消息送入管道入口fd1接收:接收進(jìn)程則使用系統(tǒng)調(diào)用read(fd0,buf,size)從管道出口fd0讀出size字符的消息送入buf中。注意:管道按FIFO(先進(jìn)先出)方式傳送(chun sn)消息,且為單向傳送(chun sn)。2、算法先定義一個整型:int fd2,其中fd1為寫入端,fd0為讀出端,然后用調(diào)用pipe(fd)建立管道,最后調(diào)用write,read完成具體的讀寫。49共六十
36、二頁3、示例#include main( ) int x,fd2;char buf30,s30;pipe(fd);/*創(chuàng)建管道*/while (x=fork()=-1);/*創(chuàng)建子進(jìn)程失敗(shbi)時,循環(huán)*/if(x=0)sprintf(buf,”This is an exmplen”);write(fd1,buf,30);/*寫管道*/exit(0);elsewait(0);read(fd0,s,30);/*讀管道*/printf(“%s”,s);50共六十二頁三、消息傳遞通信(tng xn)方式不論是單機(jī)系統(tǒng)、多機(jī)系統(tǒng),還是計算機(jī)網(wǎng)絡(luò),消息傳遞機(jī)制都是用得最廣泛的一種進(jìn)程間通信的機(jī)制。
37、在消息傳遞系統(tǒng)中,進(jìn)程間的數(shù)據(jù)交換,是以格式化的消息(message)為單位的;在計算機(jī)網(wǎng)絡(luò)中,又把message稱為報文。程序員直接利用系統(tǒng)提供的一組通信命令(原語)進(jìn)行通信。消息傳遞通信一般分為消息緩沖通信、信箱通信和基于消息傳遞通信等三種。 1、消息緩沖通信的實(shí)現(xiàn) (1)、通信方式 發(fā)送進(jìn)程在發(fā)送之前,先在自己的內(nèi)存空間中設(shè)置一個發(fā)送區(qū),把欲發(fā)送的消息填入其中,然后再用發(fā)送過程將其發(fā)送出去。接收(jishu)進(jìn)程在接受之前,在自己的內(nèi)存空間中設(shè)置相應(yīng)的接收(jishu)區(qū),然后用接收(jishu)過程接受消息。51共六十二頁兩個進(jìn)程通信(tng xn)過程:52共六十二頁(2)、通信的必
38、要條件在發(fā)送進(jìn)程將消息寫入緩沖區(qū)和把緩沖區(qū)掛入接收進(jìn)程的消息隊列時,應(yīng)禁止其他進(jìn)程對消息隊列的訪問,接收進(jìn)程從消息隊列取消息緩沖時,也應(yīng)禁止其他進(jìn)程對消息隊列的訪問(即消息隊列是臨界資源(zyun),需互斥訪問)當(dāng)緩沖區(qū)中無消息時,接收進(jìn)程不能接收消息。(3)、linux中的消息緩沖通信使用系統(tǒng)調(diào)用msgget(key,flag)獲得一個消息的描述符,該描述符指定一個消息隊列以便用于其他系統(tǒng)調(diào)用。 53共六十二頁使用系統(tǒng)調(diào)用(dioyng)msgsnd(id,msgp,size,flag)發(fā)送一消息。使用系統(tǒng)調(diào)用msgrcv(id,msgp,size,type,flag)接收一消息。 使用系統(tǒng)
39、調(diào)用msgctl(id,cmd,buf)查詢一個消息描述符的狀態(tài),設(shè)置它的狀態(tài)及刪除一個消息描述符。 54共六十二頁2、信箱通信(tng xn)的實(shí)現(xiàn)(1)通信方式概述:由發(fā)送進(jìn)程申請建立(jinl)一與接收進(jìn)程連接的郵箱,雙方通過郵箱交換信息,郵箱可視為發(fā)送進(jìn)程與接收進(jìn)程之間的大小固定的私有數(shù)據(jù)結(jié)構(gòu)。郵箱的結(jié)構(gòu)55共六十二頁(2)通信的必要條件(一對一發(fā)送和接收為例)發(fā)送消息時,郵箱中至少(zhsho)要有一個空格能存放消息接收消息時,郵箱中至少要有一個消息存在(3)通信算法由上述分析可知,發(fā)送進(jìn)程和接收進(jìn)程之間存在同步關(guān)系,可以設(shè)以下信號量:fromnum:表示郵箱中的空格數(shù),初值為n,(n為總格數(shù))mesnum:表示郵箱中的消息個數(shù),初值為056共六十二頁發(fā)送(f sn)過程send(Mailbox,m):BeginLocal xP(fromnum)選擇空格x將消息放入空格x,置格x的標(biāo)志為滿V(mesnum)End.接收過程receive(Mailbox,x):BeginP(mesnum)選擇滿格x將滿格x的消息取出放入m中,置格x的標(biāo)志為空V(fromnum)End.57共六十二頁3、基于(jy)消息傳遞的通信基于消息傳遞的通信方式,不僅適合計算機(jī)內(nèi)部
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國多功能汽車電噴嘴電腦檢測儀數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國五星水壺數(shù)據(jù)監(jiān)測研究報告
- 統(tǒng)編版三年級語文下冊期中達(dá)標(biāo)測試卷(含答案)
- 吉林省長春市榆樹市2024-2025學(xué)年九年級上學(xué)期期末化學(xué)試題(含答案)
- 園林施工員試題及答案
- 2025年消防設(shè)施操作員之消防設(shè)備中級技能每日一練試卷A卷含答案
- 2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識通關(guān)提分題庫(考點(diǎn)梳理)
- 2020年遼寧省沈陽市中考地理試卷(含答案)
- 2025年天津市專業(yè)技術(shù)人員公需考試試題-全面推動經(jīng)濟(jì)與民生領(lǐng)域改革推動中國經(jīng)濟(jì)高質(zhì)量發(fā)展
- 高等教育自學(xué)考試《00074中央銀行概論》模擬試卷二
- GB/T 23682-2009制冷系統(tǒng)和熱泵軟管件、隔震管和膨脹接頭要求、設(shè)計與安裝
- 中國古代神話英文版資料講解
- 現(xiàn)代寫作教程
- 00463現(xiàn)代人員測評第3章
- 循環(huán)氣壓縮機(jī)防喘振控制
- 《技工院校職業(yè)技能等級認(rèn)定工作方案》
- 考察領(lǐng)導(dǎo)談話怎么評價領(lǐng)導(dǎo)【六篇】
- 初中數(shù)學(xué)知識競賽-完整版PPT
- 福建省危險化學(xué)品企業(yè)安全標(biāo)準(zhǔn)化(三級)考核評分標(biāo)準(zhǔn)指導(dǎo)意見(試行)
- 柱間支撐計算書
- 南方醫(yī)科大學(xué)研究生培養(yǎng)點(diǎn)評價簡況表
評論
0/150
提交評論