




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 進(jìn) 程 通 信 指導(dǎo)老師: 夏 建一、實(shí)驗(yàn)題目進(jìn)程通信上機(jī)實(shí)驗(yàn)(消息緩沖通信)二、算法思想1、在進(jìn)程管理(調(diào)度)實(shí)驗(yàn)基礎(chǔ)上,加入進(jìn)程通信的功能,采用消息緩沖通信機(jī)制進(jìn)行通信。2、P1發(fā)送數(shù)據(jù)給P2,P2排序后發(fā)送給P3,P3接收數(shù)據(jù)并輸出。3、 要發(fā)送的數(shù)據(jù)內(nèi)容由操作者實(shí)時(shí)輸入。三、小組分工:四、算法程序1、 緩沖區(qū)結(jié)構(gòu)typedef struct nodeint id; int size; char text100; struct node *next;buftype;2、 進(jìn)程控制塊PCBstruct int id; char status;int waiter1; int priori
2、ty; char stack5; int sm; buftype *front; buftype *rear;pcb4;3 .發(fā)送、接收、排序程序算法流程(1)發(fā)送函數(shù) send()接收進(jìn)程標(biāo)識(shí)符、信息長(zhǎng)度存入緩沖區(qū)置鏈接指針為空,將信息正文從發(fā)送區(qū)復(fù)制到正文區(qū)分配緩沖區(qū)空間,由P指向隊(duì)列空?插在鏈?zhǔn)撞逶阪溛瞃N隊(duì)尾指針指向新插入緩沖區(qū)隊(duì)列緩沖區(qū)個(gè)數(shù)計(jì)數(shù)加1程序:void send(int rec_id,char a,int n)buftype *p;p=(buftype *)malloc(sizeof(buftype);p->id=rec_id; /接收消息進(jìn)程idp->size
3、=n; /消息的大小strcpy(p->text,a); /將消息拷貝到節(jié)點(diǎn)之中p->next=0;if(pcbrec_id.sm<=0)/如果消息緩沖隊(duì)列空.就將p放在鏈?zhǔn)?pcbrec_id.front=p;else pcbrec_id.rear->next=p;/如果不空.放在隊(duì)尾.rear指針后移一位pcbrec_id.rear=p;/隊(duì)尾指針指向新加入的緩沖區(qū)pcbrec_id.sm+; /接收進(jìn)程的消息個(gè)數(shù)+1(2)接收函數(shù) receive()隊(duì)列空?輸出“無(wú)消息”提示信息,返回取隊(duì)首緩沖區(qū),由P指向,隊(duì)列計(jì)數(shù)減1隊(duì)首指針為空?置隊(duì)尾指針為空復(fù)制數(shù)據(jù)到接收區(qū)
4、數(shù)組b釋放緩沖區(qū)調(diào)用參數(shù):rec_id 接收進(jìn)程標(biāo)識(shí)符b 接收區(qū)數(shù)組程序:int receive(int rec_id,char b) buftype *p; if(pcbrec_id.sm<=0) printf("no message!n"); return 0; else p=pcbrec_id.front; pcbrec_id.sm-; pcbrec_id.front=pcbrec_id.front->next;/取出來(lái)后.front指針后移一位 strcpy(b,p->text); free(p);if(pcbrec_id.front=NULL)
5、pcbrec_id.rear=NULL;return 1;(3)排序函數(shù) sort()調(diào)用參數(shù):a 待排序數(shù)組,n 數(shù)據(jù)個(gè)數(shù);提示用戶輸入選擇字符發(fā)送?NY提示用戶輸入發(fā)送數(shù)據(jù)存入發(fā)送區(qū)a數(shù)組(不超過(guò)100字符)求出輸入字符個(gè)數(shù)èlen調(diào)用發(fā)送函數(shù)發(fā)送信息給P2程序:void sort(char a,int n)int i,j;char temp;for(i=0;i<n;i+) for(j=i+1;j<n;j+) if(aj<ai) temp=ai; ai=aj; aj=temp; /if/for2.修改P1、P2、P3程序Process1()在阻塞前插入以下操作代
6、碼Process1()在阻塞前插入以下操作提示用戶輸入選擇字符發(fā)送?NY提示用戶輸入發(fā)送數(shù)據(jù)存入發(fā)送區(qū)a數(shù)組(不超過(guò)100字符)求出輸入字符個(gè)數(shù)èlen調(diào)用發(fā)送函數(shù)發(fā)送信息給P2提示用戶輸入選擇字符接收?NY調(diào)用接收函數(shù),接收數(shù)據(jù)送到接收區(qū)b數(shù)組調(diào)用排序函數(shù)進(jìn)行排序,輸出排序結(jié)果將排序結(jié)果發(fā)送給P3 Process1程序:process1()char flag;char a100;int len;if(addr='m') goto m;i=1;m1=1;a: printf("n process1 printing m1=%dnn",m1); pri
7、ntf("do you want to send data ?(y/n)"); /是否發(fā)送消息 flag=getchar(); if(flag='y'|flag='Y')printf("input data:");scanf("%s",a);len=strlen(a);send(1,a,len); /將消息輸送到緩沖隊(duì)列中printf("n");printf("process1 calls p on sem1!n");if(p(1,1,'m')=0
8、) return (0);m: printf("n=>process1 i=%dnn",i); i=i+5; goto a;Process2程序:process2()char flag;char b100;int len;if(addr='m') goto m;if(addr='n') goto n;i=1;a: printf("n process2 printing m1=%dn",m1); m2=2*m1; printf("do you want to receive message?(y/n)&quo
9、t;);/是否接收消息getchar();flag=getchar();if(flag='y'|flag='Y')if(receive(1,b)=0) /消息隊(duì)列為空 getchar();else /打印接收的消息,并且排序 printf("n%snn",b);len=strlen(b);sort(b,len);printf("n%snn",b);send(2,b,len); printf("process2 call p on sem2n"); if(p(2,2,'m')=0) ret
10、urn (0);m: printf("process2 call v on sem1!n"); if(v(1,2,'n')=0) return (0);n: printf("n=>process2 i=%dnn",i); i=i+10; goto a;Process3()在P3調(diào)用V操作喚醒P2前加入以下操作調(diào)用接收函數(shù),接收數(shù)據(jù)送到接收區(qū)c數(shù)組輸出接收區(qū)數(shù)據(jù)Process3程序: process3()char c100;if(addr='m') goto m; if(addr='n') goto n
11、; i=1; a: printf("n=>process3 i=%dn",i); if(i>=num) goto b; printf("n process3 printing 2i=%dnn",m2); m1=m2; if(receive(2,c) printf("=>SORT RESULT:%snn",c); getchar(); else printf("=>SORT RESULT:nn"); getchar(); getchar(); printf("process3 cal
12、l v on sem2!n"); if(v(2,3,'m')=0) return (0);m: i+; goto a;b: if(receive(2,c) printf("=>result:%snn",c); getchar(); else printf("=>result:nn"); getchar(); printf("nprocess3 calls p on sem2n"); if(p(2,3,'n')=0) return (0);n: ;四、測(cè)試情況、分析 下面的是調(diào)試正確后的程序結(jié)果:(1)發(fā)送后立刻接受:(2)接下來(lái)三個(gè)進(jìn)程五、收獲與體會(huì)經(jīng)過(guò)這次的實(shí)驗(yàn),我收獲良多,同時(shí)也讓我明白,動(dòng)手了,實(shí)踐了就有希望,就會(huì)有希望完成任務(wù)。剛開(kāi)始做這次實(shí)驗(yàn)的時(shí)候,發(fā)現(xiàn)很沒(méi)有頭緒,除了老師給
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 六年級(jí)語(yǔ)文下冊(cè)教學(xué)質(zhì)量計(jì)劃
- 機(jī)械設(shè)備制造進(jìn)度計(jì)劃及改進(jìn)措施
- 幼小銜接班教育信息化應(yīng)用計(jì)劃
- 2025年春季幼兒園家長(zhǎng)工作計(jì)劃
- 2024-2025學(xué)年第二學(xué)期學(xué)校信息技術(shù)應(yīng)用計(jì)劃
- 部編版七年級(jí)歷史上冊(cè)課堂討論計(jì)劃
- 2025年危化企業(yè)危險(xiǎn)源識(shí)別培訓(xùn)計(jì)劃
- 部編版四年級(jí)上冊(cè)道德與法治家長(zhǎng)培訓(xùn)計(jì)劃
- 部編版一年級(jí)語(yǔ)文上冊(cè)教材整合計(jì)劃
- 幼兒園托班語(yǔ)言發(fā)展計(jì)劃
- 2025年陜西省中考數(shù)學(xué)試題(解析版)
- 黨課課件含講稿:《關(guān)于加強(qiáng)黨的作風(fēng)建設(shè)論述摘編》輔導(dǎo)報(bào)告
- 國(guó)家開(kāi)放大學(xué)行管專科《監(jiān)督學(xué)》期末紙質(zhì)考試總題庫(kù)2025春期版
- 高中家長(zhǎng)會(huì) 共筑夢(mèng)想,攜手未來(lái)課件-高二下學(xué)期期末家長(zhǎng)會(huì)
- GB/T 3280-2015不銹鋼冷軋鋼板和鋼帶
- 國(guó)家開(kāi)發(fā)銀行山東省分行 簡(jiǎn)歷表
- 農(nóng)村低壓電力技術(shù)規(guī)程(國(guó)標(biāo)正本)
- 世界電網(wǎng)頻率及電壓
- 服裝購(gòu)銷合同
- 學(xué)科帶人人陳述內(nèi)容ppt課件
- 風(fēng)機(jī)通訊故障處理
評(píng)論
0/150
提交評(píng)論