www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 消費電子 > 消費電子
[導(dǎo)讀]所謂進程間通信就是在不同進程之間傳播或交換信息,它是一組編程接口,讓程序員能夠協(xié)調(diào)不同的進程,使之能在一個操作系統(tǒng)里同時運行,并相互傳遞、交換信息;還可以讓一個程序能夠在同一時間里處理許多用戶的需求。

所謂進程間通信就是在不同進程之間傳播或交換信息,它是一組編程接口,讓程序員能夠協(xié)調(diào)不同的進程,使之能在一個操作系統(tǒng)里同時運行,并相互傳遞、交換信息;還可以讓一個程序能夠在同一時間里處理許多用戶的需求。那么Linux進程間的通信方式有幾種?如果你還不清楚,請看下文:

第一種:管道通信

兩個進程利用管道進行通信時,發(fā)送信息的進程稱為寫進程;接收信息的進程稱為讀進程。管道通信方式的中間介質(zhì)就是文件,通常稱這種文件為管道文件,它就像管道一樣將一個寫進程和一個讀進程連接在一起,實現(xiàn)兩個進程之間的通信。寫進程通過寫入端往管道文件中寫入信息;讀進程通過讀出端從管道文件中讀取信息。兩個進程協(xié)調(diào)不斷地進行寫和讀,便會構(gòu)成雙方通過管道傳遞信息的流水線。

第二種:消息緩沖通信

多個獨立的進程之間可以通過消息緩沖機制來相互通信。這種通信的實現(xiàn)是以消息緩沖區(qū)為中間介質(zhì),通信雙方的發(fā)送和接收操作均以消息為單位。在存儲器中,消息緩沖區(qū)被組織成隊列,通常稱之為消息隊列。消息隊列一旦創(chuàng)建后即可由多進程共享,發(fā)送消息的進程可以在任意時刻發(fā)送任意個消息到指定的消息隊列上,并檢查是否有接收進程在等待它所發(fā)送的消息。若有則喚醒它,而接收消息的進程可以在需要消息的時候到指定的消息隊列上獲取消息,如果消息還沒有到來,則轉(zhuǎn)入睡眠等待狀態(tài)。

第三種:共享內(nèi)存通信

針對消息緩沖需要占用CPU進行消息復(fù)制的缺點,OS提供了一種進程間直接進行數(shù)據(jù)交換的通信方式。共享內(nèi)存,顧名思義這種通信方式允許多個進程在外部通信協(xié)議或同步,互斥機制的支持下使用同一個內(nèi)存段進行通信,它是一種最有效的數(shù)據(jù)通信方式,其特點是沒有中間環(huán)節(jié),直接將共享的內(nèi)存頁面通過附接映射到相互通信的進程各自的虛擬地址空間中,從而使多個進程可以直接訪問同一個物理內(nèi)存頁面。

進程間通信的方式有很多,這里主要講到進程間通信的六種方式,分別為:管道、FIFO、消息隊列、共享內(nèi)存、信號、信號量。

管道的特點:

管道的原型:

代碼實現(xiàn):

FIFO,也叫做命名管道,它是一種文件類型。

FIFO的特點:

FIFO的原型:

#include #include int mkfifo(const char *pathname, mode_t mode);

其中的 mode 參數(shù)與 open 函數(shù)中的 mode 相同。一旦創(chuàng)建了一個 FIFO,就可以用一般的文件 I/O 函數(shù)操作它。

當(dāng) open 一個 FIFO 時,是否設(shè)置非阻塞標(biāo)志(O_NONBLOCK)的區(qū)別:

代碼實現(xiàn):

下列代碼有效解決了,當(dāng)管道存在時,程序報錯的問題,減少了無關(guān)錯誤信息的打印。

進程間的通信方式:

1.管道(pipe)及有名管道(named pipe):

管道可用于具有親緣關(guān)系進程間的通信,有名管道除了具有管道所具有的功能外,它還允許無親緣關(guān)系進程間的通信。

2.信號(signal):

信號是在軟件層次上對中斷機制的一種模擬,它是比較復(fù)雜的通信方式,用于通知進程有某事件發(fā)生,一個進程收到一個信號與處理器收到一個中斷請求效果上可以說是一致得。

3.消息隊列(message queue):

消息隊列是消息的鏈接表,它克服了上兩種通信方式中信號量有限的缺點,具有寫權(quán)限得進程可以按照一定得規(guī)則向消息隊列中添加新信息;對消息隊列有讀權(quán)限得進程則可以從消息隊列中讀取信息。

消息緩沖通信技術(shù)是由Hansen首先提出的,其基本思想是:根據(jù)”生產(chǎn)者-消費者”原理,利用內(nèi)存中公用消息緩沖區(qū)實現(xiàn)進程之間的信息交換. 內(nèi)存中開辟了若干消息緩沖區(qū),用以存放消息.每當(dāng)一個進程向另一個進程發(fā)送消息時,便申請一個消息緩沖區(qū),并把已準(zhǔn)備好的消息送到緩沖區(qū),然后把該消息緩沖區(qū)插入到接收進程的消息隊列中,最后通知接收進程.接收進程收到發(fā)送里程發(fā)來的通知后,從本進程的消息隊列中摘下一消息緩沖區(qū),取出所需的信息,然后把消息緩沖區(qū)不定期給系統(tǒng).系統(tǒng)負責(zé)管理公用消息緩沖區(qū)以及消息的傳遞. 一個進程可以給若干個進程發(fā)送消息,反之,一個進程可以接收不同進程發(fā)來的消息.顯然,進程中關(guān)于消息隊列的操作是臨界區(qū).當(dāng)發(fā)送進程正往接收進程的消息隊列中添加一條消息時,接收進程不能同時從該消息隊列中到出消息:反之也一樣. 消息緩沖區(qū)通信機制包含以下列內(nèi)容: (1) 消息緩沖區(qū),這是一個由以下幾項組成的數(shù)據(jù)結(jié)構(gòu): 1、 消息長度 2、 消息正文 3、 發(fā)送者 4、 消息隊列指針 (2)消息隊列首指針m-q,一般保存在PCB中。 (1) 互斥信號量m-mutex,初值為1,用于互斥訪問消息隊列,在PCB中設(shè)置。 (2) 同步信號量m-syn,初值為0,用于消息計數(shù),在PCB中設(shè)置。 (3) 發(fā)送消息原語send (4) 接收消息原語receive(a)

4.共享內(nèi)存(shared memory):

可以說這是最有用的進程間通信方式。它使得多個進程可以訪問同一塊內(nèi)存空間,不同進程可以及時看到對方進程中對共享內(nèi)存中數(shù)據(jù)得更新。這種方式需要依靠某種同步操作,如互斥鎖和信號量等。

這種通信模式需要解決兩個問題:第一個問題是怎樣提供共享內(nèi)存;第二個是公共內(nèi)存的互斥關(guān)系則是程序開發(fā)人員的責(zé)任。

5.信號量(semaphore):

主要作為進程之間及同一種進程的不同線程之間得同步和互斥手段。

6.套接字(socket);

這是一種更為一般得進程間通信機制,它可用于網(wǎng)絡(luò)中不同機器之間的進程間通信,應(yīng)用非常廣泛。

http://blog.csdn.net/eroswang/archive/2007/09/04/1772350.aspx

linux下的進程間通信-詳解

詳細的講述進程間通信在這里絕對是不可能的事情,而且筆者很難有信心說自己對這一部分內(nèi)容的認識達到了什么樣的地步,所以在這一節(jié)的開頭首先向大家推薦著 名作者Richard Stevens的著名作品:《Advanced Programming in the UNIX Environment》,它的中文譯本《UNIX環(huán)境高級編程》已有機械工業(yè)出版社出版,原文精彩,譯文同樣地道,如果你的確對在Linux下編程有濃 厚的興趣,那么趕緊將這本書擺到你的書桌上或計算機旁邊來。說這么多實在是難抑心中的景仰之情,言歸正傳,在這一節(jié)里,我們將介紹進程間通信最最初步和最 最簡單的一些知識和概念。    首先,進程間通信至少可以通過傳送打開文件來實現(xiàn),不同的進程通過一個或多個文件來傳遞信息,事實上,在很多應(yīng)用系統(tǒng)里,都使用了這種方法。但一般說來, 進程間通信(IPC:InterProcess Communication)不包括這種似乎比較低級的通信方法。Unix系統(tǒng)中實現(xiàn)進程間通信的方法很多,而且不幸的是,極少方法能在所有的Unix系 統(tǒng)中進行移植(唯一一種是半雙工的管道,這也是最原始的一種通信方式)。而Linux作為一種新興的操作系統(tǒng),幾乎支持所有的Unix下常用的進程間通信 方法:管道、消息隊列、共享內(nèi)存、信號量、套接口等等。下面我們將逐一介紹。

聲明:該篇文章為本站原創(chuàng),未經(jīng)授權(quán)不予轉(zhuǎn)載,侵權(quán)必究。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉