進(jìn)程間通信實驗報告_第1頁
進(jìn)程間通信實驗報告_第2頁
進(jìn)程間通信實驗報告_第3頁
進(jìn)程間通信實驗報告_第4頁
進(jìn)程間通信實驗報告_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

進(jìn)程間通信實驗報告班 級:10網(wǎng)工三班 學(xué)生姓名:謝昊天 學(xué)號:實驗?zāi)康暮鸵螅篖inux系統(tǒng)的進(jìn)程通信機(jī)構(gòu) (IPC) 允許在任意進(jìn)程間大批量地交換數(shù)據(jù)。本實驗的目的是了解和熟悉Linux支持的消息通訊機(jī)制及信息量機(jī)制。實驗內(nèi)容與分析設(shè)計:(1)消息的創(chuàng)建,發(fā)送和接收。使用系統(tǒng)調(diào)用msgget (), msgsnd (), msgrev (), 及msgctl () 編制一長度為1k的消息的發(fā)送和接收程序。觀察上面的程序,說明控制消息隊列系統(tǒng)調(diào)用msgctl () 在此起什么作用?(2)共享存儲區(qū)的創(chuàng)建、附接和段接。 使用系統(tǒng)調(diào)用shmget(),shmat(),sgmdt(),shmctl(),編制一個與上述功能相同的程序。(3)比較上述(1),(2)兩種消息通信機(jī)制中數(shù)據(jù)傳輸?shù)臅r間。實驗步驟與調(diào)試過程:1.消息的創(chuàng)建,發(fā)送和接收: (1)先后通過fork( )兩個子進(jìn)程,SERVER和CLIENT進(jìn)行通信。 (2)在SERVER端建立一個Key為75的消息隊列,等待其他進(jìn)程發(fā)來的消息。當(dāng)遇到類型為1的消息,則作為結(jié)束信號,取消該隊列,并退出SERVER 。SERVER每接收到一個消息后顯示一句“(server)received”。 (3)CLIENT端使用Key為75的消息隊列,先后發(fā)送類型從10到1的消息,然后退出。最后的一個消息,既是 SERVER端需要的結(jié)束信號。CLIENT每發(fā)送一條消息后顯示一句“(client)sent”。 (4)父進(jìn)程在 SERVER和 CLIENT均退出后結(jié)束。2.共享存儲區(qū)的創(chuàng)建,附接和斷接: (1)先后通過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ā)生變化時,表示收到了該消息,進(jìn)行處理.然后再次把它的值設(shè)為-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é)束。實驗結(jié)果:1消息的創(chuàng)建,發(fā)送和接收:由 Client 發(fā)送兩條消息,然后Server接收一條消息。此后Client Server交替發(fā)送和接收消息。最后一次接收兩條消息。Client 和Server 分別發(fā)送和接收了10條消息。message的傳送和控制并不保證完全同步,當(dāng)一個程序不再激活狀態(tài)的時候,它完全可能繼續(xù)睡眠,造成上面現(xiàn)象。在多次send message 后才 receive message.這一點有助于理解消息轉(zhuǎn)送的實現(xiàn)機(jī)理。2.共享存儲區(qū)的創(chuàng)建,附接和斷接:在運(yùn)行的過程中,發(fā)現(xiàn)每當(dāng)client發(fā)送一次數(shù)據(jù)后,server要等大約0.1秒才有響應(yīng)。同樣,之后client又需要等待大約0.1秒才發(fā)送下一個數(shù)據(jù)。出現(xiàn)上述的應(yīng)答延遲的現(xiàn)象是程序設(shè)計的問題。當(dāng)client端發(fā)送了數(shù)據(jù)后,并沒有任何措施通知server端數(shù)據(jù)已經(jīng)發(fā)出,需要由client的查詢才能感知。此時,client端并沒有放棄系統(tǒng)的控制權(quán),仍然占用CPU的時間片。只有當(dāng)系統(tǒng)進(jìn)行調(diào)度時,切換到了server進(jìn)程,再進(jìn)行應(yīng)答。這個問題,也同樣存在于server端到client的應(yīng)答過程之中。3 比較兩種消息通信機(jī)制中的數(shù)據(jù)傳輸?shù)臅r間:由于兩種機(jī)制實現(xiàn)的機(jī)理和用處都不一樣,難以直接進(jìn)行時間上的比較。如果比較其性能,應(yīng)更加全面的分析。(1)消息隊列的建立比共享區(qū)的設(shè)立消耗的資源少.前者只是一個軟件上設(shè)定的問題,后者需要對硬件操作,實現(xiàn)內(nèi)存的映像,當(dāng)然控制起來比前者復(fù)雜.如果每次都重新進(jìn)行隊列或共享的建立,共享區(qū)的設(shè)立沒有什么優(yōu)勢。(2)當(dāng)消息隊列和共享區(qū)建立好后,共享區(qū)的數(shù)據(jù)傳輸,受到了系統(tǒng)硬件的支持,不耗費(fèi)多余的資源;而消息傳遞,由軟件進(jìn)行控制和實現(xiàn),需要消耗一定的CPU資源.從這個意義上講,共享區(qū)更適合頻繁和大量的數(shù)據(jù)傳輸。(3)消息的傳遞,自身就帶有同步的控制.當(dāng)?shù)鹊较⒌臅r候,進(jìn)程進(jìn)入睡眠狀態(tài),不再消耗CPU資源.而共享隊列如果不借助其他機(jī)制進(jìn)行同步,接受數(shù)據(jù)的一方必須進(jìn)行不斷的查詢,白白浪費(fèi)了大量的CPU資源.可見消息方式的使用更加靈活。疑難小結(jié):通過本次實驗讓我了解了進(jìn)程間通信,message的傳送和控制并不保證完全同步,當(dāng)一個程序不再激活狀態(tài)的時候,它完全可能繼續(xù)睡眠,在多次send message 后才 receive message.這一點有助于理解消息轉(zhuǎn)送的實現(xiàn)機(jī)理。并且了解了只有當(dāng)系統(tǒng)進(jìn)行調(diào)度時,切換到了server進(jìn)程,再進(jìn)行應(yīng)答。這個問題,也同樣存在于server端到client的應(yīng)答過程之中。加深了對進(jìn)程概念的理解,明確進(jìn)程間通信的原理,進(jìn)一步認(rèn)識并發(fā)執(zhí)行的實質(zhì)。鞏固了課本上所學(xué)到的知識。主要算法和程序清單:1.消息的創(chuàng)建,發(fā)送和接收:#include #include #include #include #define MSGKEY 75 /*定義關(guān)鍵詞MEGKEY*/struct msgform /*消息結(jié)構(gòu)*/long mtype;char mtexe100; /*文本長度*/msg;int msgqid,i;void CLIENT( )int i;msgqid=msgget(MSGKEY,0777|IPC_CREAT);for(i=10;i=1;i-) msg.mtype=i; printf(client)sentn); msgsnd(msgqid,&msg,1030,0); /*發(fā)送消息msg入msgid消息隊列*/exit(0);void SERVER( ) msgqid=msgget(MSGKEY,0777|IPC_CREAT); /*由關(guān)鍵字獲得消息隊列*/ do msgrcv(msgqid,&msg,1030,0,0); /*從隊列msgid接受消息msg*/ printf(server)receiven); while(msg.mtype!=1); /*消息類型為1時,釋放隊列*/ msgctl(msgqid, IPC_RMID,0);main() if(fork() SERVER(); wait(0);else CLIENT( );2.共享存儲區(qū)的創(chuàng)建,附接和斷接:#include#include#include#define SHMKEY 75 /*定義共享區(qū)關(guān)鍵詞*/int shmid,i;int *addr; CLIENT()int i;shmid=shmget(SHMKEY,1024, 0777|IPC_CREAT); /*獲取共享區(qū),長度1024,關(guān)鍵詞SHMKEY*/addr=shmat(shmid,0,0); /*共享區(qū)起始地址為addr*/for(i=9;i=0;i-) while(*addr!= -1); printf(client)sentn); /*打?。╟lient)sent*/*addr=i; /*把i賦給addr*/exit(0); SERVER() dowhile(*addr = =-1);printf(server)receivedn%d,*addr); /*服務(wù)進(jìn)程使用共享區(qū)*/if(*addr!=0)*addr=-1; while(*addr); wait(

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論