版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
內蒙古工業(yè)大學數(shù)據(jù)科學與應用學院實驗報告課程名稱:操作系統(tǒng)實驗名稱:進程通信實驗類型:驗證性eq\o\ac(□)綜合性□設計性?實驗室名稱:虛擬基礎實驗室班級學號姓名:組別:同組人:成績:實驗日期:2019.11.24實驗報告撰寫要求實驗前用預習報告紙撰寫預習報告,預習報告包括以下內容實驗目的實驗用儀器設備、器材或軟件環(huán)境實驗原理、方案設計、程序框圖、預編程序等實驗過程中需要記錄的實驗數(shù)據(jù)表格實驗過程中,要認真觀察,仔細記錄完成實驗后用實驗報告紙撰寫實驗報告,包括以下內容儀器設備型號及編號實驗器材或軟件環(huán)境實驗步驟、程序調試方法實驗數(shù)據(jù)處理及結果分析實驗中存在的問題體會及思考題報告撰寫時,要求格式規(guī)范、書寫整齊內蒙古工業(yè)大學數(shù)據(jù)科學與應用學院第頁預習報告成績:指導教師審核(簽名):年月日預習報告實驗目的1.加深對各種進程通信基本工作原理的理解。2.理解和掌握Linux系統(tǒng)中進程通信API的應用方法。3.進一步認識進程軟中斷通信、管道通信和消息隊列通信的實質。4.分析、設計進程軟中斷通信的實現(xiàn)方法。5.分析、設計進程的管道通信,實現(xiàn)父子進程的單機通信機制。6.分析、設計進程的消息隊列通信,實現(xiàn)客戶機/服務器通信機制。實驗環(huán)境1.筆記本電腦Linux系統(tǒng)實驗預備知識1.閱讀Linux進程通信技術(軟中斷、管道和消息隊列)的使用方法。2.閱讀Linux系統(tǒng)中單機和多機通信技術,掌握各種通信技術API的基本應用方法。實驗內容1.進程的軟中斷通信【舉例1】編制一段程序,使用系統(tǒng)調用fork()創(chuàng)建兩個子進程,再用系統(tǒng)調用signal()讓父進程捕捉鍵盤上來的中斷信號(即按任意字母鍵和Enter鍵),當捕捉到中斷信號后,父進程用系統(tǒng)調用kill()向兩個子進程發(fā)出信號,子進程捕捉到信號后,分別輸出下列信息后終止:childprocess1iskilledbyparent!childprocess2iskilledbyparent!父進程等待兩個子進程終止后,輸出以下信息后終止:parentprocessiskilled!【程序】#include<sys/types.h>#include<unistd.h>#include<stdio.h>#include<signal.h>voidwaiting(),stop();intwait_mark;main(){intp1,p2;while((p1=fork())==-1);/*創(chuàng)建進程p1*/if(p1>0){while((p2=fork())==-1);/*創(chuàng)建進程p2*/if(p2>0){Printf(“parentrun!\n”);Printf(“p1=%d\n”,p1);Printf(“p2=%d\n”,p2);wait_mark=1;getchar();kill(p1,16);/*向p1發(fā)軟中斷信號16*/kill(p2,17);/*向p2發(fā)軟中斷信號17*/sleep(5);/*父進程睡眠5秒*/wait(0);/*等待子進程結束,同步*/wait(0);/*等待另一子進程結束,同步*/lockf(stdout,1,0);/*標準輸出加鎖*/printf(“parentprocessiskilled!\n”);lockf(stdout,0,0);/*標準輸出解鎖*/exit(0);/*父進程終止*/}else{printf(“p2run!\n”);wait_mark=1;signal(17,stop);/*接收父進程發(fā)來的軟中斷信號17,并轉stop*/waiting();lockf(stdout,1,0);/*標準輸出加鎖*/printf(“childprocess2iskilledbyparent!\n”);lockf(stdout,0,0);/*標準輸出解鎖*/exit(0);/*子進程p2終止*/}}else{printf(“p1run!\n”);wait_mark=1;signal(16,stop);/*接收父進程發(fā)來的軟中斷信號16,并轉stop*/waiting();lockf(stdout,1,0);/*標準輸出加鎖*/printf(“childprocess1iskilledbyparent!\n”);lockf(stdout,0,0);/*標準輸出解鎖*/exit(0);/*子進程p1終止*/}}voidwaiting(){printf(“waitingbegin!\n”);while(wait_mark!=0);printf(“waitingend!\n”);}voidstop(){wait_mark=0;printf(“signalstop!”);}【舉例2】在上面任務1中,增加語句signal(SIGINT,SIG_IGN)和語句signal(SIGQUIT,SIG_IGN),觀察執(zhí)行結果,并分析原因。這里signal(SIGINT,SIG_IGN)和signal(SIGQUIT,SIG_IGN)分別為忽略“Ctrl+c”鍵信號以及忽略中斷信號?!境绦颉?include<sys/types.h>#include<unistd.h>#include<stdio.h>#include<signal.h>intpid1,pid2;intendflag=0,pf1=0,pf2=0;voidintdelete(){kill(pid1,16);kill(pid2,17);endflag=1;}voidint1(){printf(“childprocess1iskilledbyparent!”);exit(0);}voidint2(){printf(“childprocess2iskilledbyparent!”);exit(0);}main(){intexitpid;signal(SIGINT,SIG_IGN);signal(SIGQUIT,SIG_IGN);while((pid1=fork())==-1);if(pid1==0){printf(“process1run!\n”);signal(SIGUSR1,int1);signal(16,SIG_IGN);pause();exit(0);}else{while((pid2=fork())==-1);if(pid2==0){printf(“process2run!\n”);signal(SIGUSR2,int2);signal(17,SIG_IGN);pause();exit(0);}else{printf(“parentrun!\n”);signal(SIGINT,intdelete);waitpid(-1,&exitpid,0);printf(“parentprocessiskilled!\n”);exit(0);}}}2.進程的管道通信【舉例】編制一段程序,實現(xiàn)進程的管道通信。使用系統(tǒng)調用pipe()建立一條管道線。兩個子進程p1和p2分別向管道各寫一句話:child1issendingamessage!child2issendingamessage!而父進程則從管道中讀出來自于兩個子進程的信息,顯示在屏幕上。【程序】#include<unistd.h>#include<stdio.h>#include<signal.h>intpid1,pid2;main(){intfd[3];charoutpipe[100],inpipe[100];pipe(fd);while((pid1=fork())==-1);if(pid1==0){printf(“p1run!\n”);lockf(fd[1],1,0);sprintf(outpipe,”child1processissendingamessage!”);write(fd[1],outpipe,50);sleep(1);lockf(fd[1],0,0);exit(0);}else{while((pid2=fork())==-1);if(pid2==0){printf(“p2run!\n”);lockf(fd[1],1,0);sprintf(outpipe,”child2processissendingamessage!”);write(fd[1],outpipe,50);sleep(1);lockf(fd[1],0,0);exit(0);}else{printf(“parentrun!\n”);wait(0);read(fd[0],inpipe,50);printf(“%s\n”,inpipe);wait(0);read(fd[0],inpipe,50);printf(“%s\n”,inpipe);exit(0);}}}3.進程的消息隊列通信實驗要求: (1)實現(xiàn)客戶機與服務器之間的通信程序。 1)基本要求:實現(xiàn)1臺客戶機對1臺服務器;提高要求:實現(xiàn)n臺客戶機對1臺服務器; 2)要求服務器分別接收客戶機數(shù)據(jù)。 3)要求每個客戶機與服務器采用消息隊列通信機制來發(fā)送和接收消息。 (2)測試程序,給出測試結果并進行分析。 (3)書寫預習報告和實驗報告。實驗提示: 進程間消息隊列通信主要用到的四個系統(tǒng)調用如下:intmsgget(key_tkey,intmsgflg)intmsgctl(intmsgqid,intcmd,structmsqid_ds*buf)intmsgsnd(intmsgqid,structmsgbuf*msgp,size_tmsgsz,intmsgflg)intmsgrcv(intmsgqid,structmsgbuf*msgp,size_tmsgsz,longmsgtyp,intmsgflg)包含的頭文件如下:#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>【舉例】編制一個客戶機進程,定義消息的格式,使用msgget()系統(tǒng)調用創(chuàng)建消息隊列,使用msgsnd()和msgrcv()系統(tǒng)調用實現(xiàn)與服務進程之間消息的發(fā)送和接收,通信結束后使用msgctl()系統(tǒng)調用刪除相關的消息隊列。(1)客戶機程序設計#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>#defineMSGKEY75structmsgform{longmtype;charmtext[256];};intmain(){printf("clientpid:%d\n",getpid());structmsgformmsg;intmsgqid,pid;msgqid=msgget(MSGKEY,0777);pid=getpid();char*pint=msg.mtext;sprintf(pint,"%d\0",pid);msg.mtype=1000000;msgsnd(msgqid,&msg,256,0);msgrcv(msgqid,&msg,256,pid,0);printf("client:receivefrompid:%s\n",pint);return0;}(2)服務器程序設計#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>#defineMSGKEY75structmsgform{ longmtype; charmtext[256];}msg;intmsgqid;voidcleanup();intmain(){ inti,pid; for(i=0;i<20;i++) signal(i,cleanup); intmsgqid=msgget(MSGKEY,0777|IPC_CREAT);pid=getpid();printf("serverpid:%d\n",pid); for(;;){ msgrcv(msgqid,&msg,256,1000000,0);char*pint=msg.mtext;printf("server:receivefrompid:%s\n",pint);msg.mtype=atoi(msg.mtype); *pint=pid; printf("msg.mtype:%d\n",msg.mtype); sprintf(pint,"%d\0",pid);msgsnd(msgqid,&msg,256,0); }return0;}void
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年食品原料采購合同規(guī)范范本2篇
- 2025年度物流園區(qū)綠色物流推廣承包合同3篇
- 2025年度環(huán)保型批灰技術合作合同協(xié)議
- 二零二五年度旅行社與旅游保險合作框架協(xié)議3篇
- 二零二五年度不動產(chǎn)抵押貸款債權讓與合同模板3篇
- 二零二五版綠城物業(yè)智能安防系統(tǒng)升級合同4篇
- 2025版全新注塑機購銷合同(含設備安裝與調試)
- 2025年食品添加劑與添加劑原料供貨協(xié)議書3篇
- 2025版小額貸款公司合作協(xié)議范本2篇
- 二零二五年度企業(yè)員工溝通技巧培訓合同8篇
- 室上性心動過速-醫(yī)學課件
- 建設工程法規(guī)及相關知識試題附答案
- 中小學心理健康教育課程標準
- 四年級上冊脫式計算400題及答案
- 新課標人教版小學數(shù)學六年級下冊集體備課教學案全冊表格式
- 人教精通版三年級英語上冊各單元知識點匯總
- 人口分布 高一地理下學期人教版 必修第二冊
- 教案:第三章 公共管理職能(《公共管理學》課程)
- 諾和關懷俱樂部對外介紹
- 玩轉數(shù)和形課件
- 保定市縣級地圖PPT可編輯矢量行政區(qū)劃(河北省)
評論
0/150
提交評論