轉(zhuǎn)載自:http://bbs./viewthread.php?tid=265266 管道通信(PIPE) 管道通信方式的中間介質(zhì)是文件,通常稱這種文件為管道文件。兩個(gè)進(jìn)程利用管道文件進(jìn)行通信時(shí),一個(gè) 進(jìn)程為寫(xiě)進(jìn)程,另一個(gè)進(jìn)程為讀進(jìn)程。寫(xiě)進(jìn)程通過(guò)寫(xiě)端(發(fā)送端)往管道文件中寫(xiě)入信息;讀進(jìn)程通過(guò)讀 端(接收端)從管道文件中讀取信息。兩個(gè)進(jìn)程協(xié)調(diào)不斷地進(jìn)行寫(xiě)、讀,便會(huì)構(gòu)成雙方通過(guò)管道傳遞信息 的流水線。 利用系統(tǒng)調(diào)用PIPE()創(chuàng)建一個(gè)無(wú)名管道文件,通常稱為無(wú)名管道或PIPE;利用系統(tǒng)調(diào)用MKNOD()創(chuàng)建 一個(gè)有名管道文件,通常稱為有名管道或FIFO。 PIPE是一種非永久性的管道通信機(jī)構(gòu),當(dāng)它訪問(wèn)的進(jìn)程全部終止時(shí),它也將隨之被撤消;它也不能用于不 同族系的進(jìn)程之間的通信。而FIFO是一種永久的管道通信機(jī)構(gòu),它可以彌補(bǔ)PIPE的不足。 管道文件被創(chuàng)建后,便可對(duì)它進(jìn)行讀寫(xiě)操作,通過(guò)系統(tǒng)調(diào)用WRITE()和READ()來(lái)實(shí)現(xiàn)。通信完畢后, 可將管道文件關(guān)閉,用CLOSE()來(lái)實(shí)現(xiàn)。 消息通信(MESSAGE) 消息通信方式以消息緩沖區(qū)為中間介質(zhì),通信雙方的發(fā)送和接收操作均以消息為單位。在存儲(chǔ)器中,消息 緩沖區(qū)被組織成隊(duì)列,通常稱之為消息隊(duì)列。 創(chuàng)建消息隊(duì)列用系統(tǒng)調(diào)用MSGGET()來(lái)實(shí)現(xiàn),這一步工作也被稱為消息隊(duì)列的初始化。在進(jìn)行通信時(shí),消 息隊(duì)列的發(fā)送和接收分別用系統(tǒng)調(diào)用MSGSND()和MSGRCV()來(lái)實(shí)現(xiàn)。在需要改變隊(duì)列的使用權(quán)限及其它 一些特性時(shí),用MSGCTL()來(lái)實(shí)現(xiàn)。 轉(zhuǎn)載自:http://bbs./viewthread.php?tid=257062 請(qǐng)問(wèn)消息隊(duì)列比運(yùn)用管道有什么優(yōu)勢(shì)?
器上的任何進(jìn)程間通信(只要進(jìn)程有權(quán)操作消息隊(duì)列)。 轉(zhuǎn)載自:http://www./bbs/showthread.php?t=235978 享內(nèi)存。 轉(zhuǎn)載自:http://www.ibm.com/developerworks/cn/linux/l-ipc/part3/ 員的工作量;其次,消息具有類(lèi)型,在實(shí)際應(yīng)用中,可作為優(yōu)先級(jí)使用。這兩點(diǎn)是管道以及有名管道所不 能比的。同樣,消息隊(duì)列可以在幾個(gè)進(jìn)程間復(fù)用,而不管這幾個(gè)進(jìn)程是否具有親緣關(guān)系,這一點(diǎn)與有名管 道很相似;但消息隊(duì)列是隨內(nèi)核持續(xù)的,與有名管道(隨進(jìn)程持續(xù))相比,生命力更強(qiáng),應(yīng)用空間更大。
轉(zhuǎn)載自:http://blog.sina.com.cn/s/blog_4a0e545d01000c7l.html vxworks消息隊(duì)列與其他方式的一些比較: 1、信號(hào)量使用方便,可以解決很多任務(wù)間的協(xié)調(diào)問(wèn)題,但是信號(hào)量所傳遞的信息有限,而內(nèi)存共享雖然 傳遞信息可以大些,但是不標(biāo)準(zhǔn)。消息隊(duì)列作為一種折忠方式用于線程之間的信息交換。 2、消息隊(duì)列允許許多的消息排隊(duì),而每個(gè)信息可以有不同長(zhǎng)度,而傳統(tǒng)管道中的數(shù)據(jù)僅僅是一個(gè)數(shù)據(jù)流 ,沒(méi)有邊界。Vxworks中的管道數(shù)據(jù)有消息組成。
列。任何任務(wù)可以從消息隊(duì)列接受消息。多任務(wù)可以從同意消息隊(duì)列發(fā)送和接受消息。兩個(gè)任務(wù)之間的全 雙工(Full-duplex)通信需要針對(duì)不同方向的兩個(gè)消息隊(duì)列。 的消息,這個(gè)消息被添加消息緩存的隊(duì)列里。如果某些任務(wù)已經(jīng)在等待消息隊(duì)列中的消息,消息立刻被傳 遞給第一個(gè)等待的消息的任務(wù)。 一個(gè)任務(wù)用函數(shù)msgQReceive( )從消息隊(duì)列得到一個(gè)消息。如果消息隊(duì)列緩存中有消息存在,第一個(gè)消息 立刻出列并回到調(diào)用處(caller).如果沒(méi)有消息存在,則任務(wù)(calling task)停止(blocks)并被添加到 等待消息的任務(wù)隊(duì)列中。這個(gè)等待的任務(wù)隊(duì)列按照優(yōu)先級(jí)或先進(jìn)先出(FIFO)規(guī)則排列,這個(gè)規(guī)則有消息 隊(duì)列創(chuàng)建時(shí)所指定。 管道(Pipes) 管道對(duì)消息隊(duì)列提供了一個(gè)可供選擇的接口,VxWorks的I/O系統(tǒng)。管道是虛擬的I/O設(shè)備,由驅(qū)動(dòng)pipeDrv 管理。函數(shù)pipeDevCreate()創(chuàng)建一個(gè)管道設(shè)備,這個(gè)調(diào)用指定管道的名字,能被排列的最多的消息數(shù), 和每個(gè)消息允許的長(zhǎng)度。 status = pipeDevCreate ("/pipe/name", max_msgs, max_length); 被創(chuàng)建的管道是一個(gè)通常命名(named)的I/O設(shè)備,任務(wù)能用標(biāo)準(zhǔn)的I/O函數(shù)打開(kāi),讀,寫(xiě)管道,并能調(diào)用 ioctl例程。當(dāng)任務(wù)試圖從一個(gè)空的管道中讀取數(shù)據(jù),或向一個(gè)滿的管道中寫(xiě)入數(shù)據(jù)時(shí),任務(wù)被阻塞。和 消息隊(duì)列一樣,ISR可以向管道寫(xiě)入,但不能從管道讀取。 轉(zhuǎn)載自:http://www./news/Article_Show.asp?ArticleID=231 vxworks消息隊(duì)列和管道 優(yōu)先級(jí)方式排隊(duì)消息,一個(gè)消息隊(duì)列的消息數(shù)目和消息長(zhǎng)度可以由開(kāi)發(fā)者在創(chuàng)建消息隊(duì)列時(shí)指定。在理論 上,VxWorks允許多個(gè)任務(wù)向同一個(gè)消息隊(duì)列發(fā)送消息,或者從同一個(gè)消息隊(duì)列接收消息;而在實(shí)際應(yīng)用 中,一般來(lái)說(shuō)只有一個(gè)任務(wù)從消息隊(duì)列接收消息,有一個(gè)或多個(gè)任務(wù)發(fā)送消息,即這個(gè)消息隊(duì)列有多個(gè)生 產(chǎn)者,而只有一個(gè)消費(fèi)者。消息隊(duì)列時(shí)單向的,對(duì)于需要進(jìn)行雙向通信的兩個(gè)任務(wù),必須使用兩個(gè)消息隊(duì) 列。消息隊(duì)列非常適合于Client-Server結(jié)構(gòu)的任務(wù)之間的通信. 在VxWorks中,消息隊(duì)列是一種代價(jià)比較高的一種通信機(jī)制,因此在使用時(shí)應(yīng)該使消息的長(zhǎng)度盡量短,而 且應(yīng)避免在需要十分頻繁通信的場(chǎng)合使用消息隊(duì)列。另外消息隊(duì)列中的消息是排隊(duì)的,即使是完全相同的 消息,后面的消息也不會(huì)覆蓋前面的消息。 管道(pipe) pipeDevDelete()來(lái)生成和刪除管道,管道一經(jīng)生成后,任務(wù)之間就可以使用標(biāo)準(zhǔn)I/O操作主要是read()和 write()進(jìn)行通信。管道的優(yōu)點(diǎn)在于它是一個(gè)I/O設(shè)備,與標(biāo)準(zhǔn)的VxWorks 處理同時(shí)從串口、管道、socket接收到的數(shù)據(jù),就可以使用select。 來(lái)自:http://www.cnblogs.com/qqivoryqq/archive/2009/09/24/1573125.html |
|
來(lái)自: 看風(fēng)景D人 > 《操作系統(tǒng)》