《Linux系統(tǒng)程序設(shè)計(jì)教程》 教案26-進(jìn)程間通信-共享內(nèi)存消息隊(duì)列_第1頁
《Linux系統(tǒng)程序設(shè)計(jì)教程》 教案26-進(jìn)程間通信-共享內(nèi)存消息隊(duì)列_第2頁
《Linux系統(tǒng)程序設(shè)計(jì)教程》 教案26-進(jìn)程間通信-共享內(nèi)存消息隊(duì)列_第3頁
《Linux系統(tǒng)程序設(shè)計(jì)教程》 教案26-進(jìn)程間通信-共享內(nèi)存消息隊(duì)列_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

教案第26次課2學(xué)時(shí)課題進(jìn)程間通信?共享內(nèi)存和消息隊(duì)列教學(xué)目的與要求理解共享內(nèi)核和消息隊(duì)列的使用方法重點(diǎn)難點(diǎn)重點(diǎn):共享內(nèi)核和消息隊(duì)列的使用方法難點(diǎn):共享內(nèi)核和消息隊(duì)列的使用方法一、復(fù)習(xí)舊課,引入新課(5分鐘)提問:進(jìn)程間通信方式有哪些提問:SystemV信號(hào)量的使用方法引入Linux下共享內(nèi)存和消息隊(duì)列的使用方式。二、實(shí)施本次課教學(xué)內(nèi)容(知識(shí)點(diǎn)明確、突出重/難點(diǎn)、案例和課堂實(shí)踐環(huán)節(jié)的設(shè)計(jì)等)共享內(nèi)存理論知識(shí)(10分鐘)1、共享內(nèi)存基本概念同一進(jìn)程中的幾個(gè)線程共享進(jìn)程的數(shù)據(jù)段。同一系統(tǒng)中的幾個(gè)進(jìn)程可共享某塊物理內(nèi)存。各個(gè)進(jìn)程占有有獨(dú)立的內(nèi)存空間,同時(shí)它們還可以共享某塊內(nèi)存,類似線程,各個(gè)進(jìn)程對(duì)該空間的訪問要使用互斥和同步機(jī)制。2、共享內(nèi)存基本過程(1)創(chuàng)建將被共享的內(nèi)存空間(確定大小)教學(xué)進(jìn)程

安排(2)將該空間映射到本進(jìn)程中(3)進(jìn)行正常的讀寫操作教學(xué)進(jìn)程

安排(4)解除映射(5)如果需要,刪除被共享的內(nèi)存空間進(jìn)程A共享內(nèi)存進(jìn)程B3、SystemV共享內(nèi)存ttinclude<sys/shm.h>(1)創(chuàng)建并得到共享內(nèi)存段intshmget(key_tkey,size_tsize,intflags);返回值:成功返回共享內(nèi)存標(biāo)識(shí)符,錯(cuò)誤返回-1(置errno)(2)控制共享內(nèi)存段(包含刪除)intshmctl(intshmid,intcmd,structshmidds*data);返回值:成功返回0,錯(cuò)誤返回T(置errno)(3)連接共享內(nèi)存段void*shmat(intshmid,constvoid*shmaddr,intflags);參數(shù)shmid:共享內(nèi)存標(biāo)識(shí)符shmaddr:進(jìn)程映射內(nèi)存段的地址,可指定,但一般設(shè)為NULL表示由系統(tǒng)安排,安排好的地址作為返回值返回。flags:對(duì)該內(nèi)存的段設(shè)置是否只讀(SHM_RDONLY),默認(rèn)是讀寫。返回值:成功返回進(jìn)程中該內(nèi)存段的地址,錯(cuò)誤返回-1(置errno)(4)斷開共享內(nèi)存段intshmdt(constvoid*shmaddr);返回值:成功返回0,錯(cuò)誤返回T(置errno)shmat說明共享內(nèi)存舉例shmwrtie.c創(chuàng)建shm并循環(huán)輸入整數(shù)寫入shmshmread.c從shm中獲得值shmdel.c刪除shm注意(1)創(chuàng)建共享內(nèi)存確定大小時(shí),可以使用結(jié)構(gòu)體方式確定該塊內(nèi)存中數(shù)據(jù)類型。(2)創(chuàng)建共享內(nèi)存成功后可以使用ipcs查看創(chuàng)建的結(jié)果(3)ipcs是SystemVIPC提供的查看IPC信息的工具(4)刪除SystemVIPC還可以使用ipcrm-mshmid刪除共享內(nèi)存4、共享內(nèi)存案例演示講解,并讓學(xué)生運(yùn)行(30分鐘)消息隊(duì)列理論知識(shí)(10分鐘)5、消息隊(duì)列基本概念消息隊(duì)列也叫報(bào)文隊(duì)列,克服信號(hào)最多在接收信號(hào)進(jìn)程的生命周期中有效(隨進(jìn)程持續(xù))的缺點(diǎn)。消息隊(duì)列在系統(tǒng)重啟前一直有效(隨內(nèi)核持續(xù))消息隊(duì)列,即消息的一個(gè)鏈表,任何進(jìn)程都可以向消息隊(duì)列中發(fā)送消息(消息類型及正文),其他進(jìn)程都可以從消息隊(duì)列中根據(jù)類型獲取相應(yīng)的消息。6、消息隊(duì)列基本過程(1)創(chuàng)建消息隊(duì)列(2)根據(jù)收/發(fā)消息類型進(jìn)行收/發(fā)消息(3)如有必要,則刪除消息隊(duì)列說明:(1)消息隊(duì)列是先進(jìn)先出的(2)如果類型相同,先發(fā)送的消息將先被讀出(3)消息被讀出則消息隊(duì)列就減少一個(gè)結(jié)點(diǎn)。(4)當(dāng)消息隊(duì)列滿時(shí)的寫操作或消息隊(duì)列空時(shí)的讀操作都會(huì)阻塞。消息類型正文>消息類型正文>消息類型正文7、SystemV消息隊(duì)列"include<sys/msg.h>(1)打開或創(chuàng)建消息隊(duì)列intmsgget(key_tkey,intflags);返回值:成功返回描述符,錯(cuò)誤返回-1(置errno)(2)獲得或設(shè)置消息隊(duì)列屬性intmsgctl(intmsgid,intcmd,structmsqidds*data);返回值:成功返回3錯(cuò)誤返回T(置errno)(3)發(fā)送消息msgsndintmsgsnd(intmsgid,constvoid*msgp,sizetmsgsize,intflags);參數(shù):msgid——消息隊(duì)列標(biāo)識(shí)符msgp一指針,用戶自定義緩沖區(qū),可定義成結(jié)構(gòu)體類型,包含兩項(xiàng)longmlype;代表消息類型charmtext[MTEXTSIZE];消息正文msgsize芟及達(dá)/目后±L乂H、J長皮mflags——標(biāo)志,若設(shè)置IPC_NOWAIT則不等待消息發(fā)出就返回返回值:成功返回0,錯(cuò)誤返回T(置errno)(4)接收消息msgrcvintmsgrcv(intmsgid,void*msgp,sizetmtexsize,longmsgtype,intflags);參數(shù):與msgsnd類似,但要注意msgtype>0,只接收指定類型消息的第一個(gè)=0,則不管什么消息類型都返回第一個(gè)<0,接收等于或小于其絕對(duì)值的最低類型的第一個(gè)如有5、6、17三類,若為-6,則獲取類型5的。返回值:成功返回消息正文字節(jié)數(shù),錯(cuò)誤返回T(置errno)舉例:message,c根據(jù)用戶輸入的命令行參數(shù)不同調(diào)用不同的函數(shù)若可執(zhí)行文件為a.outa.outsnumxxx向消息隊(duì)列發(fā)送xxx消息,類型為numa.outrnum從消息隊(duì)列中接收消息類型為numa.outd刪除消息隊(duì)列a.outm修改消息隊(duì)列的相關(guān)信息8、消息隊(duì)列案例演示講解,并讓學(xué)生運(yùn)行(30分鐘)三、課程小結(jié)(5分鐘)1、共享內(nèi)存小結(jié)(1)POSIXSystemV(2)共享內(nèi)存基本過程2、消息隊(duì)列小結(jié)(1)隊(duì)列,先進(jìn)先出(2)存放消息,消息包括兩類信息消息類型,long消息正文,字符數(shù)組(3)滿時(shí)寫或空時(shí)讀都會(huì)阻塞(4)消息隊(duì)列基本過程課后任務(wù):1將教材上關(guān)于本節(jié)課的例子自己在虛擬機(jī)中運(yùn)行,觀察結(jié)果。理解好共享內(nèi)存和消息隊(duì)列的使用方法。2完成五級(jí)項(xiàng)目《共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信》《消息隊(duì)列實(shí)現(xiàn)進(jìn)程間通信》課后學(xué)習(xí)

任務(wù)布置課后學(xué)習(xí)

任務(wù)布置課后學(xué)習(xí)

任務(wù)布置

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論