操作系統(tǒng)實驗報告2-進程間通信_第1頁
操作系統(tǒng)實驗報告2-進程間通信_第2頁
操作系統(tǒng)實驗報告2-進程間通信_第3頁
操作系統(tǒng)實驗報告2-進程間通信_第4頁
操作系統(tǒng)實驗報告2-進程間通信_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、實 驗 報 告( 2013 / 2014學(xué)年 第1學(xué)期)課程名稱操作系統(tǒng)原理實驗名稱實驗2:進程間通信實驗時間2013年 10 月 10日指導(dǎo)單位軟件工程系指導(dǎo)教師 楊 健學(xué)生姓名班級學(xué)號學(xué)院(系)軟件工程系專 業(yè)計算機軟件與服務(wù)外包實驗名稱實驗2:進程間通信指導(dǎo)教師楊健實驗類型驗證實驗學(xué)時2實驗時間一、 實驗?zāi)康? 了解Linux中的信號,熟悉Linux系統(tǒng)中進程之間軟中斷通信的基本原理。2 Linux系統(tǒng)的進程通信機構(gòu)(IPC)允許在任意進程間大批量地交換數(shù)據(jù),學(xué)習(xí)如何利用消息緩沖隊列進行進程間的通信,并加深對消息通信機制的理解。二、實驗環(huán)境(實驗設(shè)備)Windows 2000 + VMW

2、are + RedHat Linux 8三、實驗內(nèi)容1 編寫程序:用fork()創(chuàng)建兩個子進程,再用系統(tǒng)調(diào)用signal()讓父進程捕捉鍵盤上來的中斷信號(即按c鍵);捕捉到中斷信號后,父進程用系統(tǒng)調(diào)用kill()向兩個子進程發(fā)出信號,子進程捕捉到信號后分別輸出下列信息,然后終止:Child process1 is killed by parent!Child process2 is killed by parent!父進程等待兩個子進程終止后,輸出如下的信息后終止:Parent process is killed!2 分析利用軟中斷通信實現(xiàn)進程同步的機制。3 消息的創(chuàng)建,發(fā)送和接收。4 使用

3、系統(tǒng)調(diào)用msgget(),msgsnd(),msgrev(),及msgctl()編制消息的發(fā)送和接收程序。5 server.c程序后臺運行,client.c程序前臺運行,server.c先于client.c運行。程序代碼#include #include #include void waiting( ),stop( );int wait_mark;main( )int p1,p2,stdout;while(p1=fork( )= =-1); /*創(chuàng)建子進程p1*/if (p10) while(p2=fork( )= =-1); /*創(chuàng)建子進程p2*/if(p20) wait_mark=1;si

4、gnal(SIGINT,stop); /*接收到c信號,轉(zhuǎn)stop*/waiting( );kill(p1,16); /*向p1發(fā)軟中斷信號16*/kill(p2,17); /*向p2發(fā)軟中斷信號17*/wait(0); /*同步*/wait(0);printf(Parent process is killed!n);exit(0); else wait_mark=1;signal(17,stop); /*接收到軟中斷信號17,轉(zhuǎn)stop*/waiting( );lockf(stdout,1,0);printf(Child process 2 is killed by parent!n);lo

5、ckf(stdout,0,0);exit(0);elsewait_mark=1;signal(16,stop); /*接收到軟中斷信號16,轉(zhuǎn)stop*/waiting( );lockf(stdout,1,0);printf(Child process 1 is killed by parent!n);lockf(stdout,0,0);exit(0); void waiting( ) while(wait_mark!=0);void stop( )wait_mark=0;#include#include#include#include#include#define MSGKEY 75stru

6、ct msgformlong mtype;char mtext256;main()struct msgform msg;int msgqid,pid,*pint;msgqid=msgget(MSGKEY,0777);pid=getpid();pint=(int*)msg.mtext;*pint=pid;msg.mtype=1;msgsnd(msgqid,&msg,sizeof(int),0);msgrcv(msgqid,&msg,256,pid,0);printf(client:receive from pid %dn,*pint);exit(0);#include#include#inclu

7、de#include#include#define MSGKEY 75struct msgformlong mtype;char mtext256;main()struct msgform msg;int msgqid,pid,*pint;msgqid=msgget(MSGKEY,0777|IPC_CREAT);for(;)msgrcv(msgqid,&msg,256,1,0);pint=(int*)msg.mtext;pid=*pint;printf(server:receive from pid %dn,pid);msg.mtype=pid;*pint=getpid();msgsnd(ms

8、gqid,&msg,sizeof(int),0);四、實驗小結(jié)(針對實驗內(nèi)容逐項小結(jié)實驗中發(fā)現(xiàn)的問題、自己的解決方法、心得體會等) 這次程序相比于上次實驗,難度稍有點大,程序也復(fù)雜了,通過對此次實驗的學(xué)習(xí),了解了linux系統(tǒng)中的信號,熟悉了進程之間軟中斷通信的基本原理。信號本質(zhì):信號是在軟件層次上對中斷機制的一種模擬,在原理上,一個進程收到一個信號與處理器收到一個中斷請求可以說是一樣的。信號是異步的,一個進程不必通過任何操作來等待信號的到達,事實上,進程也不知道信號到底什么時候到達。信號是進程間通信機制中唯一的異步通信機制,可以看作是異步通知,通知接收信號的進程有哪些事情發(fā)生了。信號機制經(jīng)過POSIX實時擴展后,功能更加強大,除了基本通知功能外,還可以傳遞附加信息。進程用kill( )向一個進程或一組進程發(fā)送一個信號;當(dāng)一個進程要進入或退出一

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論