• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于實(shí)時(shí)信號(hào)的實(shí)時(shí)控制軟件進(jìn)程間通信方法研究*

      2013-08-10 09:04:12齊文軍
      艦船電子工程 2013年8期
      關(guān)鍵詞:間通信實(shí)時(shí)控制實(shí)時(shí)性

      齊文軍

      (91550部隊(duì) 大連 116021)

      1 引言

      實(shí)時(shí)控制軟件通常是一個(gè)多任務(wù)、多作業(yè)的實(shí)時(shí)系統(tǒng),通常采用共享內(nèi)存區(qū)、消息隊(duì)列、信號(hào)燈等技術(shù)實(shí)現(xiàn)進(jìn)程間通信[1~2],已有文獻(xiàn)對(duì)進(jìn)程間通信機(jī)制進(jìn)行比較分析[3]以及對(duì)進(jìn)程間信號(hào)通信機(jī)制進(jìn)行分析[4],上述研究雖然能夠?qū)崿F(xiàn)進(jìn)程間信息的傳遞和共享,但缺少一種在任何時(shí)刻都能夠?qū)崟r(shí)地知道當(dāng)前執(zhí)行什么任務(wù),什么作業(yè),何時(shí)執(zhí)行等命令以及中斷信號(hào)何時(shí)到達(dá)等信息的聰明機(jī)制。本文根據(jù)Tru64 UNIX操作系統(tǒng)中實(shí)時(shí)信號(hào)的功能特性,建立一種在實(shí)時(shí)控制軟件中進(jìn)程間實(shí)時(shí)傳遞信息的聰明的通信機(jī)制。

      2 實(shí)時(shí)信號(hào)機(jī)制分析

      2.1 實(shí)時(shí)信號(hào)機(jī)制簡(jiǎn)介[5~6]

      信號(hào)是進(jìn)程間通信機(jī)制中唯一的異步通信機(jī)制。信號(hào)機(jī)制主要用于產(chǎn)生、傳送和處理系統(tǒng)中的各種信號(hào)。信號(hào)的建立、傳送和處理都是由軟件實(shí)現(xiàn)的,因此信號(hào)也稱為軟中斷,信號(hào)機(jī)制又稱為軟中斷機(jī)制。根據(jù)實(shí)時(shí)應(yīng)用的特點(diǎn),Tru64UNIX操作系統(tǒng)在實(shí)時(shí)接口庫(kù)中引入了軟中斷機(jī)制,利用信號(hào)的異步特性來(lái)實(shí)現(xiàn)進(jìn)程間的實(shí)時(shí)通信,為實(shí)時(shí)軟件的設(shè)計(jì)提供了強(qiáng)有力的支持。

      Tru64UNIX操作系統(tǒng)中,POSIX 1003.1b實(shí)時(shí)接口庫(kù)強(qiáng)化了實(shí)時(shí)信號(hào)功能,為實(shí)時(shí)應(yīng)用程序靈活運(yùn)用實(shí)時(shí)信號(hào)創(chuàng)造了條件,其不僅增加了用戶可定義的實(shí)時(shí)信號(hào)數(shù)量,在向進(jìn)程發(fā)信號(hào)時(shí),建立了信號(hào)排隊(duì)機(jī)制,使得同一信號(hào)的多次發(fā)送可以加以區(qū)分,不會(huì)造成信號(hào)丟失,使進(jìn)程能夠更快地響應(yīng)實(shí)時(shí)信號(hào)的發(fā)送,并提供了向進(jìn)程發(fā)送實(shí)時(shí)信號(hào)的同時(shí),傳送該信號(hào)的附加信息功能。

      2.2 實(shí)時(shí)信號(hào)屏蔽字分析

      為了分析實(shí)時(shí)信號(hào)的傳遞機(jī)制,首先要了解具有多線程的進(jìn)程地址空間的分配形式,如圖1所示。

      圖1 具有多線程的進(jìn)程地址空間的分配形式

      從圖1我們可以看出:1)系統(tǒng)資源是分配給進(jìn)程的,而不是分配給線程的;2)每一個(gè)線程都有自己的寄存器和棧;3)線程共享進(jìn)程資源。

      每個(gè)進(jìn)程都有與每個(gè)信號(hào)相關(guān)的信號(hào)屏蔽字,由此屏蔽字來(lái)決定哪些信號(hào)可以傳遞給該進(jìn)程,而哪些信號(hào)在傳遞時(shí)將會(huì)被阻塞。信號(hào)屏蔽字具有繼承性,也就是說(shuō),當(dāng)父進(jìn)程調(diào)用fork函數(shù)派生子進(jìn)程時(shí),子進(jìn)程將繼承父進(jìn)程的信號(hào)屏蔽字。信號(hào)屏蔽字的每一位代表一個(gè)信號(hào),在進(jìn)程中把信號(hào)屏蔽字中的哪一位設(shè)置為“1”,說(shuō)明此屏蔽字所對(duì)應(yīng)的信號(hào)可以傳遞給該進(jìn)程。在設(shè)置信號(hào)屏蔽字之前必須先清空信號(hào)所在的信號(hào)集,否則,將出現(xiàn)段訪問錯(cuò)誤。因此,與每一個(gè)信號(hào)相關(guān)的信號(hào)屏蔽字是分配給進(jìn)程的系統(tǒng)資源,而不是分配給線程的,進(jìn)程中的所有線程共享與每一個(gè)信號(hào)相關(guān)的信號(hào)屏蔽字。

      在實(shí)際應(yīng)用中,經(jīng)過測(cè)試表明對(duì)如何利用實(shí)時(shí)信號(hào)來(lái)實(shí)現(xiàn)進(jìn)程間同步通信、以及進(jìn)程中多線程間同步通信有如下結(jié)論:

      1)只能在主線程中定義、初始化和設(shè)置信號(hào)屏蔽字。否則,在利用多線程來(lái)接收信號(hào)時(shí),如果有兩個(gè)或兩個(gè)以上的實(shí)時(shí)信號(hào)同時(shí)或相隔時(shí)間很短到達(dá)時(shí),進(jìn)程就會(huì)終止,并會(huì)在終端上顯示收到的實(shí)時(shí)信號(hào)。

      2)如果是利用實(shí)時(shí)信號(hào)實(shí)現(xiàn)進(jìn)程間的同步通信,除了發(fā)送隊(duì)列中信號(hào)排隊(duì)個(gè)數(shù)和1)中的限制之外,沒有其它限制。

      2.3 實(shí)時(shí)信號(hào)附加信息分析

      Tru64Unix操作系統(tǒng)中的POSIX 1003.1b實(shí)時(shí)擴(kuò)充程序設(shè)計(jì)接口提供了一個(gè)新的sigqueue函數(shù),用來(lái)實(shí)現(xiàn)向指定進(jìn)程發(fā)送一個(gè)帶有可選數(shù)據(jù)的實(shí)時(shí)信號(hào)的功能。該函數(shù)定義在signal.h頭文件中,函數(shù)原型為int sigqueue(pid_t pid,int signal,union sigval sval);其中,pid是接收signal信號(hào)的接收進(jìn)程;signal是發(fā)送進(jìn)程所發(fā)送的實(shí)時(shí)信號(hào);sval就是隨信號(hào)所傳遞的附加信息,附加信息數(shù)據(jù)結(jié)構(gòu)為

      當(dāng)傳遞的信息為整型時(shí)使用sival_int變量,傳遞的信息為指針類型時(shí)使用sival_ptr變量。這樣,就可以針對(duì)該函數(shù)的這一特點(diǎn),通過傳遞整型或指針型的信息來(lái)實(shí)現(xiàn)進(jìn)程間的信息傳遞。

      在利用fork函數(shù)派生子進(jìn)程的時(shí)候,若沒有使用exec族函數(shù)調(diào)用其它進(jìn)程的映像來(lái)覆蓋此子進(jìn)程的映像,那么父子進(jìn)程之間傳遞附加信息不僅可以是整數(shù)類型的而且也可以是指針類型的;若使用exec族函數(shù)調(diào)用其它進(jìn)程的映像來(lái)覆蓋此子進(jìn)程的映像,那么父子進(jìn)程之間傳遞的附加信息只能是整數(shù)類型的。

      原因是每一個(gè)進(jìn)程都有自己的信號(hào)堆棧區(qū),可以用來(lái)傳遞信號(hào)所附加的指針信息。在利用fork函數(shù)派生子進(jìn)程的時(shí)候,子進(jìn)程復(fù)制了父進(jìn)程的信號(hào)堆棧區(qū)。若沒有利用exec族函數(shù)調(diào)用其它進(jìn)程的映像來(lái)覆蓋此子進(jìn)程的映像,此時(shí)父子進(jìn)程具有相同的信號(hào)堆棧區(qū),用來(lái)傳遞信號(hào)所附加的指針指向相同的地址空間,因此能在父子進(jìn)程中傳遞指針類型的信息。如果利用exec族函數(shù)調(diào)用其它進(jìn)程的映像來(lái)覆蓋此子進(jìn)程的映像,當(dāng)然信號(hào)區(qū)也被覆蓋。此時(shí)父子進(jìn)程信號(hào)堆棧區(qū)不同,當(dāng)然傳遞附加信息的指針地址也無(wú)法確定,因此就無(wú)法傳遞附加的指針信息,只能傳遞整數(shù)類型的附加信息。經(jīng)上述分析可知,在上述兩種情況下進(jìn)程間都能傳遞整數(shù)類型的附加信息,而傳遞指針型附加信息是有限制的。

      3 實(shí)時(shí)信號(hào)在進(jìn)程間通信中的應(yīng)用

      根據(jù)實(shí)時(shí)控制軟件進(jìn)程間通信的特點(diǎn)和需求結(jié)合實(shí)時(shí)信號(hào)的功能特性,既可以利用不同的信號(hào)實(shí)現(xiàn)進(jìn)程間通信,也可以利用同一個(gè)信號(hào),通過設(shè)置不同的附加信息來(lái)實(shí)現(xiàn)進(jìn)程間的通信。本文以整型的附加信息為例簡(jiǎn)單說(shuō)明實(shí)時(shí)信號(hào)在實(shí)時(shí)控制軟件中的應(yīng)用。

      在一個(gè)Tru64UNIX操作系統(tǒng)[7~8]中的多進(jìn)程實(shí)時(shí)應(yīng)用系統(tǒng)中,假定進(jìn)程PID1和PID2向進(jìn)程PID3發(fā)送實(shí)時(shí)信號(hào)和附加信息。進(jìn)程PID1需要向進(jìn)程PID3發(fā)送的實(shí)時(shí)信號(hào)為SIGNAL 1_3(信號(hào)值假定為SIGRTMIN+2),隨該信號(hào)傳遞的附加信息表示PID1進(jìn)程的某個(gè)事件產(chǎn)生了。而進(jìn)程PID2需要向進(jìn)程PID3發(fā)送的實(shí)時(shí)信號(hào)為SIGNAL 2_3(信號(hào)值假定為SIGRTMIN+3),隨該信號(hào)傳遞的附加信息表示PID2進(jìn)程的某個(gè)事件產(chǎn)生了。信號(hào)附加信息定義如圖2所示:

      圖2 信號(hào)附加信息定義表

      通過圖2中附加信息定義,當(dāng)PID1進(jìn)程接收到實(shí)時(shí)信號(hào)SIGNAL 1_3后,根據(jù)附加信息sval.sival_int的值就可以判斷出PID1進(jìn)程中哪一個(gè)子信號(hào)產(chǎn)生了,進(jìn)而轉(zhuǎn)向SIGNAL1_3不同的信號(hào)處理程序。當(dāng)PID3進(jìn)程接收到實(shí)時(shí)信號(hào)SIGNAL2_3后,根據(jù)附加信息sval.sival_int的值就可以判斷出PID2進(jìn)程中哪一個(gè)控制信號(hào)產(chǎn)生了,進(jìn)而轉(zhuǎn)向SIGNAL2_3不同的信號(hào)處理程序。

      3.1 實(shí)時(shí)信號(hào)發(fā)送功能設(shè)計(jì)

      3.1.1 進(jìn)程PID1發(fā)送信號(hào)

      在信號(hào)發(fā)送進(jìn)程PID1中,PID1利用sigqueue函數(shù)向進(jìn)程PID3發(fā)送實(shí)時(shí)信號(hào)SIGNAL1_3。unistd.h頭文件必須放在所有代碼之前,否則會(huì)影響實(shí)時(shí)性[9~10],其主要代碼如下:

      3.1.2 進(jìn)程PID2發(fā)送信號(hào)

      在信號(hào)發(fā)送進(jìn)程PID2中,PID2利用sigqueue函數(shù)向進(jìn)程PID3發(fā)送實(shí)時(shí)信號(hào)SIGNAL2_3。unistd.h頭文件必須放在所有代碼之前,否則會(huì)影響實(shí)時(shí)性,其主要代碼如下:

      3.2 實(shí)時(shí)信號(hào)接收功能設(shè)計(jì)

      信號(hào)接收進(jìn)程PID3進(jìn)程使用POSIX 1003.1b定義的sigwaitinfo或sigtimedwait函數(shù)來(lái)接收PID1和PID2進(jìn)程傳來(lái)的信號(hào),本文以sigwaitinfo為例接收實(shí)時(shí)信號(hào),其函數(shù)原型為

      其中,sigset是PID3進(jìn)程所定義的接收信號(hào)集,內(nèi)容包含PID1和PID2進(jìn)程向PID3進(jìn)程發(fā)送的實(shí)時(shí)信號(hào)SIG1_3和SIG2_3,是通過sigaddset函數(shù)增加的。info是存放接收的PID1和PID2進(jìn)程傳過來(lái)的信息,該變量是一個(gè)結(jié)構(gòu),其中的一個(gè)成員為union sigval si_value,si_value同前面講述的sigqueue函數(shù)的第3個(gè)參數(shù)是一樣的,PID1和PID2進(jìn)程傳過來(lái)的附加信息就存放在此變量中。

      假設(shè)PID3進(jìn)程所定義的接收信號(hào)集為sigset_recv_pid1,存放信息的變量為info_recv,則PID3進(jìn)程接收PID1和PID2進(jìn)程傳來(lái)信號(hào),其主要代碼如下:

      4 與其它進(jìn)程間通信技術(shù)實(shí)時(shí)性比較

      為了驗(yàn)證實(shí)時(shí)信號(hào)在實(shí)時(shí)控制軟件中的實(shí)時(shí)性和可靠性,在測(cè)試平臺(tái)(Tru64UNIX操作系統(tǒng),1024M 內(nèi)存,667MHz CPU兩個(gè))上對(duì)實(shí)時(shí)信號(hào)和其他進(jìn)行進(jìn)程間通訊技術(shù)(如管道、消息隊(duì)列、共享內(nèi)存),以20HZ的頻率在進(jìn)程間都傳遞4個(gè)字節(jié)信息和信號(hào)燈是采用給共享區(qū)中計(jì)數(shù)器加1的方法進(jìn)行48小時(shí)測(cè)試。測(cè)試表明,利用這些進(jìn)程間通信技術(shù)進(jìn)行通信沒有發(fā)現(xiàn)數(shù)據(jù)或信號(hào)丟失現(xiàn)象,表明這些技術(shù)都是可靠的,在延遲上其測(cè)試結(jié)果如下:

      表1 測(cè)試結(jié)果統(tǒng)計(jì)表(單位:μs)

      從表1可以看出,直接從共享區(qū)讀寫數(shù)據(jù)是最快的,但是為了防止從共享區(qū)讀出臟數(shù)據(jù),一般需要添加有名信號(hào)燈等互斥鎖來(lái)保證進(jìn)程間數(shù)據(jù)同步,但其缺少一種靈敏機(jī)制,就是無(wú)法實(shí)時(shí)知道何時(shí)數(shù)據(jù)寫入或讀出;使用實(shí)時(shí)信號(hào)不僅提供了一種靈敏機(jī)制,而且其實(shí)時(shí)行為是有保證的,因此傳遞小信息量的數(shù)據(jù),實(shí)時(shí)信號(hào)無(wú)疑是最佳選擇。

      5 結(jié)語(yǔ)

      實(shí)際應(yīng)用表明利用實(shí)時(shí)信號(hào)的功能特性為實(shí)時(shí)控制軟件設(shè)計(jì)的進(jìn)程間通信的聰明機(jī)制,與其它進(jìn)程間通信技術(shù)相比,不僅方法簡(jiǎn)單方便,而且更加安全可靠,系統(tǒng)的實(shí)時(shí)性也得到了進(jìn)一步加強(qiáng),在實(shí)時(shí)軟件設(shè)計(jì)中具有廣泛的實(shí)用價(jià)值。實(shí)際應(yīng)用中還可以使用信號(hào)與其它進(jìn)程間通信技術(shù)相結(jié)合的方法進(jìn)行信息的傳遞,增加進(jìn)程間通信的靈活性和實(shí)時(shí)性。

      [1]鄭宗漢.實(shí)時(shí)系統(tǒng)軟件基礎(chǔ)[M].北京:清華大學(xué)出版社,2002:3560.

      [2]寇欣宇,王仲,葉聲華.基于多進(jìn)程的測(cè)控系統(tǒng)軟件設(shè)計(jì)及其數(shù)據(jù)通信[J].計(jì)算機(jī)工程與應(yīng)用,2000,36(06):101103.

      [3]李小群.進(jìn)程間通信機(jī)制的分析與比較[J].計(jì)算機(jī)科學(xué),2002,29(11):5861.

      [4]王文義.Linux中進(jìn)程間信號(hào)通信機(jī)制的分析及其應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用,2005,41(03):8587.

      [5]W.Richard Stevens.UNIX網(wǎng)絡(luò)編程 第2卷:進(jìn)程間通信[M].北京:清華大學(xué)出版社,2000:240300.

      [6]唐靖飚.UNIX平臺(tái)下C語(yǔ)言高級(jí)編程指南[M].北京:中國(guó)宇航出版社,2000:3570.

      [7]Butenhof,D.R.Programming with POSIX Threads[M].AddisonWesley,1997:200215.

      [8]Maurice J.Bach.The Design of the UNIX Operating System[M].Prentice Hall PTR,2000.113131.

      [9]Tru64UNIX Compaq C Language Reference Manual[M].Compaq Computer Corporation.August,2000:185190.

      [10]Tru64UNIX Guide to the POSIX Threads Library[M].Compaq Computer Corporation,2000:150161.

      猜你喜歡
      間通信實(shí)時(shí)控制實(shí)時(shí)性
      細(xì)胞間通信預(yù)測(cè)方法研究進(jìn)展
      基于規(guī)則實(shí)時(shí)性的端云動(dòng)態(tài)分配方法研究
      綜合航電分區(qū)間通信元模型設(shè)計(jì)研究
      基于虛擬局域網(wǎng)的智能變電站通信網(wǎng)絡(luò)實(shí)時(shí)性仿真
      航空電子AFDX與AVB傳輸實(shí)時(shí)性抗干擾對(duì)比
      基于LabVIEW微電網(wǎng)實(shí)驗(yàn)平臺(tái)監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
      探討ERP系統(tǒng)環(huán)境下企業(yè)會(huì)計(jì)的實(shí)時(shí)控制
      利用有線電視網(wǎng)絡(luò)技術(shù)實(shí)現(xiàn)智能小區(qū)方法的探討
      空間機(jī)器人的計(jì)算力矩實(shí)時(shí)控制方法
      一種車載Profibus總線系統(tǒng)的實(shí)時(shí)性分析
      仪陇县| 大田县| 休宁县| 隆昌县| 西和县| 滁州市| 英德市| 富民县| 滁州市| 嘉黎县| 富民县| 海安县| 赣州市| 龙泉市| 延安市| 兰州市| 亳州市| 高州市| 秭归县| 桂平市| 平湖市| 兰州市| 阜新市| 扎囊县| 秭归县| 旌德县| 孟连| 荔浦县| 静海县| 武陟县| 都江堰市| 诸暨市| 平顺县| 涟源市| 香河县| 阜阳市| 砚山县| 克东县| 莲花县| 屏南县| 丰城市|