




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
進(jìn)程通信1.進(jìn)程通信類型共享存儲器系統(tǒng)通信管道通信消息傳遞系統(tǒng)通信客戶-服務(wù)器系統(tǒng)通信2.消息緩沖隊列通信機(jī)制3.Linux進(jìn)程通信相關(guān)系統(tǒng)調(diào)用3.6進(jìn)程通信3.6.1進(jìn)程通信類型1.分析說明共享存儲器系統(tǒng)通信的基本概念及性能特點(diǎn)2.說明消息傳遞系統(tǒng)通信基本概念(1)直接通信概念及類型(2)間接通信概念3.說明管道通信概念(1)無名管道概念(2)有名管道概念4.客戶/服務(wù)器系統(tǒng)通信(自學(xué))(1)socket概念及通信流程(2)遠(yuǎn)程過程調(diào)用概念及流程3.6進(jìn)程通信3.6.1進(jìn)程通信類型1.共享存儲器系統(tǒng)通信通過共享存儲分區(qū)實現(xiàn)進(jìn)程之間的信息交換通信過程:
(1)申請共享存儲分區(qū);(2)將共享存儲分區(qū)映射到本進(jìn)程地址空間中;(3)進(jìn)行數(shù)據(jù)讀寫;(4)解除共享存儲分區(qū)映射;(5)刪除共享存儲分區(qū):內(nèi)核共享存儲區(qū)共享存儲分區(qū)進(jìn)程1地址空間共享內(nèi)存映射區(qū)進(jìn)程2地址空間共享內(nèi)存映射區(qū)共享存儲器系統(tǒng)通信方式的特點(diǎn):
(1)最大的特點(diǎn)是沒有中間環(huán)節(jié),通信直接快速(2)該通信機(jī)制沒有提供進(jìn)程同步機(jī)制。舉例:#include<stdio.h>#include<sys/types.h>#include<sys/msg.h>#include<sys/ipc.h>#include<unistd.h>#defineSHMKEY75intshmid,i;int*addr;voidCLIENT()發(fā)送進(jìn)程{inti;shmid=shmget(SHMKEY,1024,0777);addr=shmat(shmid,0,0);for(i=9;i>=0;i--){ while(*addr!=-1);//是否已讀取 printf("(client)sent"); *addr=i; printf("%d\n",*addr); sleep(1);}}voidSERVER()接收進(jìn)程{shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);addr=shmat(shmid,0,0);//附接到用戶的虛地址空間do{ *addr=-1; while(*addr==-1);//client是否已經(jīng)寫入 printf("(server)received%d\n",*addr); sleep(1);}while(*addr);
shmctl(shmid,IPC_RMID,0);}main(){intp1,p2;p1=fork();if(p1==0) SERVER();else{p2=fork(); if(p2==0)CLIENT();}wait(0);wait(0);}進(jìn)程間的數(shù)據(jù)交換是以消息(或報文)為單位。在消息通信中,接收方和發(fā)送方之間有明確的協(xié)議和消息格式。
消息格式:消息頭消息正文消息頭:存放消息傳輸時所需的控制信息。3.6進(jìn)程通信3.6.1進(jìn)程通信類型2.消息傳遞系統(tǒng)通信你會在消息頭中設(shè)置哪些內(nèi)容?2.消息傳遞系統(tǒng)通信
消息傳遞系統(tǒng)實現(xiàn)類型:3.6.1進(jìn)程通信類型
直接通信:send(),receive()
直接通信同步關(guān)系阻塞發(fā)送,阻塞接收無阻塞發(fā)送,無阻塞接收無阻塞發(fā)送,阻塞接收2.消息傳遞系統(tǒng)通信
消息傳遞系統(tǒng)實現(xiàn)類型
間接通信:
通信雙方利用一個共享的稱為信箱的中間實體實現(xiàn)信息交換。發(fā)送進(jìn)程A信箱頭
…信箱體接收進(jìn)程Bsend(m)receive(m)郵箱通信結(jié)構(gòu)信箱頭:信箱名、信箱大小、創(chuàng)建者、存取信件指針、信件數(shù)量等信箱體:存放消息信箱信箱創(chuàng)建者私用信箱:用戶進(jìn)程公用信箱:操作系統(tǒng)共享信箱:用戶進(jìn)程
管道通信概念:管道:用于連接一個發(fā)送進(jìn)程和一個接收進(jìn)程,以實現(xiàn)它們之間通信的共享文件(pipe文件,又稱為FIFO文件)FIFO文件的寫入和讀出:嚴(yán)格遵循先進(jìn)先出,不支持文件定位操作。進(jìn)程2讀出進(jìn)程1寫入3.6進(jìn)程通信3.6.1進(jìn)程通信類型3.管道(pipe)通信fd[1]fd[0](1)無名管道:intpipe(intfd[2])
fd[1]為寫入端,fd[0]為讀出端。用于父子或兄弟進(jìn)程間通信(2)有名管道:
intmkfifo(constchar*pathname,mode_tmode)用于任意進(jìn)程間通信(又稱FIFO通信)
兩種實現(xiàn)機(jī)制:寫端讀端fd[1]fd[0]write(fd[1],buf,size)read(fd[0],buf,size)pipe(fd)3.6進(jìn)程通信3.6.1進(jìn)程通信類型3.管道(pipe)通信
管道通信應(yīng)注意的問題:寫端讀端fd[1]fd[0]write(fd[1],buf,size)read(fd[0],buf,size)pipe(fd)
對管道的讀寫操作必須互斥進(jìn)行
對管道的讀寫操作必須同步進(jìn)行通信雙方必須同時存在:有名管道管道常用于單向通信3.6進(jìn)程通信3.6.1進(jìn)程通信類型3.管道(pipe)通信編寫一程序,建立一個管道。同時,父進(jìn)程生成了進(jìn)程P1和P2,這兩個子進(jìn)程分別向管道中寫入各自的字符串,父進(jìn)程讀出它們。fd[1]fd[0]pipe(fd)子進(jìn)程P1父進(jìn)程子進(jìn)程P2
無名管道應(yīng)用舉例:3.6進(jìn)程通信3.6.1進(jìn)程通信類型3.管道(pipe)通信#include<stdio.h>#include<unistd.h>main(){
inti,r,p1,p2,fd[2];
charbuf[50],s[50];
pipe(fd); p1=fork();
if(p1==0)
{
lockf(fd[1],1,0);
sprintf(buf,“childprocess1issending\n”);
printf("childprocess1!\n");
write(fd[1],buf,50);
sleep(5);
lockf(fd[1],0,0);
exit(0);
}lockf:用于鎖定文件的某些段或整個文件頭文件:#include<unistd.h>參數(shù)定義:intlockf(files,function,size) intfiles,function:longsizefunction:1鎖定,0解鎖Size:0,表示從文件的當(dāng)前位置到文件尾
無名管道應(yīng)用舉例:3.管道(pipe)通信
else
{
p2=fork();
if(p2==0)
{
lockf(fd[1],1,0);
sprintf(buf,"childprocess2issending!\n");
printf("childprocess2!\n");
write(fd[1],buf,50);
sleep(5);
lockf(fd[1],0,0);
exit(0);
}
else
{
wait(0);
if((r=read(fd[0],s,50))==-1)
printf("can'treadpipe\n");
else
printf("%s\n",s);
wait(0);
if((r=read(fd[0],s,50))==-1)
printf("can'treadpipe\n");
else
printf("%s\n",s);
exit(0);
}}}/*
mainend*/
無名管道應(yīng)用舉例:客戶端提出請求,服務(wù)器提供服務(wù)3.6進(jìn)程通信3.6.1進(jìn)程通信類型4.客戶-服務(wù)器系統(tǒng)通信(C/S模式)套接字(Socket)Socket又稱為套接字或插口,是一條通信線路兩頭端口的抽象表示。Socket網(wǎng)絡(luò)地址連接類型網(wǎng)絡(luò)規(guī)程有連接(TCP)無連接(UDP)通信流程客戶端提出請求,服務(wù)器提供服務(wù)3.6進(jìn)程通信3.6.1進(jìn)程通信類型4.客戶-服務(wù)器系統(tǒng)通信(C/S模式)遠(yuǎn)程過程調(diào)用(RPC)RPC允許客戶機(jī)上的進(jìn)程通過網(wǎng)絡(luò)調(diào)用位于遠(yuǎn)程主機(jī)上的過程。按照系統(tǒng)規(guī)定的消息結(jié)構(gòu)將調(diào)用過程的標(biāo)識符及參數(shù)打包成消息3.6進(jìn)程通信1.分析消息緩沖隊列通信機(jī)制的基本思想2.說明消息緩沖隊列通信機(jī)制的相關(guān)數(shù)據(jù)結(jié)構(gòu)
消息緩沖區(qū)
消息緩沖隊列3.分析發(fā)送原語實現(xiàn)過程4.分析接收原語實現(xiàn)過程3.6.2消息緩沖隊列通信機(jī)制發(fā)送進(jìn)程發(fā)送區(qū)設(shè)置公用緩沖區(qū)復(fù)制消息接收隊列掛入取消息消息緩沖區(qū)復(fù)制接收進(jìn)程接收區(qū)3.6進(jìn)程通信3.6.2消息緩沖隊列通信機(jī)制1.基本思想:消息緩沖區(qū):
structmesg_buffer{intsender;char*text;intsize;timesend_time;structmesg_buffer*next;
……}buffer;2.相關(guān)數(shù)據(jù)結(jié)構(gòu):3.6進(jìn)程通信3.6.2消息緩沖隊列通信機(jī)制消息緩沖隊列:空白消息緩沖區(qū)隊列;接收進(jìn)程的消息隊列;PCB中與通信有關(guān)的數(shù)據(jù)項:
structmessage_buf*mq:消息隊列隊首指針;semaphoremutex:消息隊列互斥信號量;semaphoresm:消息隊列同步信號量
Freebuff_mutex;Freebuff_sm2.相關(guān)數(shù)據(jù)結(jié)構(gòu):哪些進(jìn)程會使用這個隊列?哪些進(jìn)程會使用這個隊列?3.6進(jìn)程通信3.6.2消息緩沖隊列通信機(jī)制3.發(fā)送原語:send()申請空白消息緩沖區(qū);填寫該空白消息緩沖區(qū);將該消息緩沖區(qū)掛到接收進(jìn)程的消息隊列上。發(fā)送原語需要完成哪些工作呢?3.6.2消息緩沖隊列通信機(jī)制要成功申請到一個空白消息緩沖區(qū),需要滿足幾個條件?3.發(fā)送原語:send()proceduresend(receiver,a)
{ getbuf(a.size,i); copy(i,a);receiver_pcb=getpcb(receiver);wait(receiver_pcb.mutex);insert(receiver_pcb.mq,i);signal(receiver_pcb.mutex);signal(receiver_pcb.sm)}
wait(freebuf_sm);wait(freebuf_mutex);getafreebufsignal(freebuf_mutex);3.6.2消息緩沖隊列通信機(jī)制從接收隊列中取下一個消息緩沖區(qū);將該消息緩沖區(qū)內(nèi)容復(fù)制到接收區(qū)中;將該消息緩沖區(qū)清空后掛到空白消息緩沖隊列上。4.接收原語:receive()接收原語需要完成哪些工作呢?要成功取得一個消息緩沖區(qū),需要滿足幾個條件?3.6.2消息緩沖隊列通信機(jī)制procedurereceive(b)
{
wait(receiver_pcb.sm) wait(receiver_pcb.mutex); remove(receiver_pcb.mq,j) signal(receiver_pcb.mutex); copy(b,j); releasebuf(j);
}wait(freebuf_mutex);putafreebufsignal(freebuf_mutex);signal(freebuf_sm);4.接收原語:receive()3.6.2消息緩沖隊列通信機(jī)制3.1進(jìn)程通信1.共享存儲器系統(tǒng)通信的基本概念及性能特點(diǎn)2.消息傳遞系統(tǒng)通信基本概念:直接通信、間接通信3.管道通信概念:無名管道、有名管道4.消息緩沖隊列通信機(jī)制的基本思想:(1)發(fā)送原語實現(xiàn)過程(2)接收原語實現(xiàn)過程本節(jié)知識小結(jié)哪個小組來總結(jié)下?3.6進(jìn)程通信省平臺課堂在線測試(6分鐘)3.6進(jìn)程通信3.6.3Linux/openEuler進(jìn)程通信系統(tǒng)調(diào)用管道通信機(jī)制IPC消息隊列通信機(jī)制共享內(nèi)存通信無名管道:1.Linux/openEuler管道通信機(jī)制
無名管道只能用于具有親緣關(guān)系的進(jìn)程之間的通信。
無名管道是半雙工的
無名管道沒有對應(yīng)的磁盤映像,只存在于內(nèi)存中基本概念:創(chuàng)建無名管道:pipe()intpipe(intfiledes[2])功能:在內(nèi)存緩沖區(qū)中創(chuàng)建一個管道,主要是建立相關(guān)VFS對象,并將讀寫該管道的一對文件描述符保存在filedes[2]中。3.6.3Linux/openEuler進(jìn)程通信系統(tǒng)調(diào)用
從管道中讀取數(shù)據(jù):pipe_read()
阻塞型讀取數(shù)據(jù):管道大小為p,請求讀取n管道大小至少有一個寫進(jìn)程沒有寫進(jìn)程有睡眠寫進(jìn)程無睡眠寫進(jìn)程p=0讀取n個字節(jié)并返回n,當(dāng)管道緩沖區(qū)為空時等待寫進(jìn)程寫數(shù)據(jù)等待寫進(jìn)程寫數(shù)據(jù),然后再讀取數(shù)據(jù)返回00<p<n讀取P個字節(jié)并返回P;管道緩沖區(qū)中還剩0個字節(jié)p≥n讀取n個字節(jié),返回n,管道緩沖區(qū)中還剩p-n個字節(jié)
非阻塞型讀取數(shù)據(jù):管道大小為p,請求讀取nP<n:讀取p字節(jié)并返回p;P≥n:讀取n字節(jié)并返回n1.Linux/openEuler管道通信機(jī)制無名管道:無名管道:向管道中寫入數(shù)據(jù):pipe_write()緩沖區(qū)剩余空間至少有一個讀進(jìn)程沒有讀進(jìn)程阻塞寫非阻塞寫寫入失敗,內(nèi)核向?qū)戇M(jìn)程發(fā)送SIGPIPE信號,并返回-EPIPEu<n≤4096等待,直到有n-u個字節(jié)被讀出為止,寫入n個字節(jié)并返回n返回-EAGAIN,提醒以后再寫n>4096寫入n個字節(jié)(必要時要等待)并返回n如果u>0,寫入u字節(jié)并返回u;否則就返回-EAGAINu≥n寫入n個字節(jié)并返回n管道中空閑空間u字節(jié),請求寫入n字節(jié)1.Linux/openEuler管道通信機(jī)制有名管道創(chuàng)建有名管道:可用于任意進(jìn)程間的信息交換intmkfifo(constchar*pathname,mode_tmode)功能:在磁盤上創(chuàng)建一個有名管道文件打開有名管道:intopen(constchar*pathname,intflags)從有名管道中讀取數(shù)據(jù):管道大小阻塞讀非阻塞讀p=0讀進(jìn)程阻塞,等待寫進(jìn)程寫入數(shù)據(jù)返回-1,當(dāng)前errno值為EAGAIN,提醒以后再試0<p<n讀取p個字節(jié)并返回pp≥n讀取n個字節(jié)并返回n1.Linux/openEuler管道通信機(jī)制有名管道向有名管道中寫入數(shù)據(jù):緩沖區(qū)剩余空間阻塞寫非阻塞寫u<n≤4096等待,直到有n-u個字節(jié)被讀出為止,寫入n個字節(jié)并返回n返回-EAGAIN,提醒以后再寫n>4096
寫入n個字節(jié)(必要時要等待)
并返回n如果u>0,寫入u字節(jié)并返回u;否則就返回-EAGAINu≥n寫入n個字節(jié)并返回n1.Linux/openEuler管道通信機(jī)制相關(guān)數(shù)據(jù)結(jié)構(gòu)2.Linux/openEuler的IPC消息隊列通信機(jī)制
消息緩沖區(qū)structmsgbuf:消息緩沖區(qū)設(shè)計舉例:structmsgbuf{ /*消息定義的參照格式*/longmtype;/*消息類型(大于0的長整數(shù))*/charmtext[1]; /*消息正文*/};structmy_msgbuf{longmtype;/*Messagetype*/longsender_id,receiver_id;charmytext[1024];/*text*/};相關(guān)數(shù)據(jù)結(jié)構(gòu)
消息頭結(jié)構(gòu):msg_msg和msg_msgseg結(jié)構(gòu)structmsg_msg{structlist_headm_list;/*指向消息隊列中的下一條消息*/longm_type;/*消息類型,同structmsgbuf中的mtype*/intm_ts;/*消息正文的大小*/structmsg_msgseg*next;/*消息的下一部分*/void*security;};/*該結(jié)構(gòu)后面緊接著存放消息正文*/structmsg_msgseg{structmsg_msgseg*next;};msg_msgText4072Bnext2.Linux/openEuler的IPC消息隊列通信機(jī)制相關(guān)數(shù)據(jù)結(jié)構(gòu):msg_msgText4072Bnextmsg_msgsegTextnextmsg_msgsegTextnext同一個消息放在3個消息緩沖區(qū)中
消息頭結(jié)構(gòu):msg_msg和msg_msgseg結(jié)構(gòu)2.Linux/openEuler的IPC消息隊列通信機(jī)制相關(guān)數(shù)據(jù)結(jié)構(gòu):
消息隊列結(jié)構(gòu):msg_queuestructmsg_queue{ structkern_ipc_permq_perm;/*消息隊列的kern_ipc_perm*/ time_tq_stime; /*最近一次調(diào)用msgsnd()的時間*/ time_tq_rtime; /*最近一次調(diào)用msgrcv()的時間*/ time_tq_ctime; /*最近一次修改時間*/ unsignedlongq_cbytes; /*隊列中的總字節(jié)數(shù)*/ unsignedlongq_qnum; /*隊列中的消息個數(shù)*/ unsignedlongq_qbytes; /*隊列中最大消息的字節(jié)數(shù)*/ pid_tq_lspid; /*最近一次調(diào)用msgsnd()的PID*/ pid_tq_lrpid; /*最近一次調(diào)用msgrcv()的PID*/ structlist_headq_messages;/*隊列中的消息鏈表*/ structlist_headq_receivers;/*接收消息的進(jìn)程鏈表*/ structlist_headq_senders;/*發(fā)送消息的進(jìn)程鏈表*/};IPC消息隊列數(shù)最多為16個,每個消息大小最大為8192B,一個消息隊列中全部消息大小最大為16384B2.Linux/openEuler的IPC消息隊列通信機(jī)制相關(guān)系統(tǒng)調(diào)用intmsgget(key_tkey,intmsgflg)功能:新創(chuàng)建一個消息隊列并返回其標(biāo)識符,或者返回具有相同鍵值的已存在的消息隊列的標(biāo)識符intmsgsnd(intmsqid,structmsgbuf*msgp,size_tmsgsz,intmsgflg)功能:向標(biāo)識符為msqid的消息隊列中發(fā)送一個消息ssize_tmsgrcv(intmsqid,structmsgbuf*msgp,size_tmsgsz,longmsgtyp,intms
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 長沙文創(chuàng)藝術(shù)職業(yè)學(xué)院《運(yùn)動人體科學(xué)方法與技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年廣東省韶關(guān)市乳源瑤族自治縣九年級化學(xué)第一學(xué)期期末質(zhì)量檢測試題含解析
- 上饒衛(wèi)生健康職業(yè)學(xué)院《制藥工藝學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年山東省滕州市南沙河中學(xué)七年級數(shù)學(xué)第一學(xué)期期末綜合測試模擬試題含解析
- 江蘇省泰興市黃橋教育聯(lián)盟2024-2025學(xué)年化學(xué)九上期末學(xué)業(yè)水平測試模擬試題含解析
- 武漢海事職業(yè)學(xué)院《中學(xué)數(shù)學(xué)教學(xué)技能》2023-2024學(xué)年第一學(xué)期期末試卷
- 西安財經(jīng)大學(xué)行知學(xué)院《英語視聽說》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024-2025學(xué)年迪慶市重點(diǎn)中學(xué)數(shù)學(xué)七上期末綜合測試模擬試題含解析
- 華北理工大學(xué)輕工學(xué)院《高級微生物學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 活動端午節(jié)活動方案
- 親子消防演練活動方案
- 地理●廣東卷丨2024年廣東省普通高中學(xué)業(yè)水平選擇性考試地理試卷及答案
- JG/T 157-2009建筑外墻用膩子
- 《機(jī)床電氣與PLC控制技術(shù)》課件 2 S7-1200PLC數(shù)據(jù)的存儲及訪問
- 多模態(tài)人機(jī)交互優(yōu)化-洞察闡釋
- T/CAR 7-2021綠色高效自攜式商用冷藏陳列柜技術(shù)要求和評價方法
- 合作賬號合伙協(xié)議書
- 五年級數(shù)學(xué)下冊期末必考應(yīng)用題母題
- 山東省濟(jì)南市2025屆高三三模生物試卷(含答案)
- 2025-2030中國濕紙巾行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資風(fēng)險研究報告
- 第二章第二節(jié)《中國篆刻藝術(shù)》(教案)中職美術(shù)《藝術(shù)美術(shù)鑒賞與實踐》同步教案(高教版(2023)(修訂版))
評論
0/150
提交評論