亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        嵌入式系統(tǒng)通信機(jī)制的研究與應(yīng)用*

        2010-08-11 05:27:28
        艦船電子工程 2010年7期
        關(guān)鍵詞:間通信隊(duì)列進(jìn)程

        段 哲

        (中國(guó)船舶重工集團(tuán)公司第七二二研究所 武漢 430079)

        1 引言

        在計(jì)算機(jī)和信息技術(shù)高速發(fā)展的今天,計(jì)算機(jī)和計(jì)算機(jī)技術(shù)大量地應(yīng)用在我們的日常生活中,廣泛應(yīng)用的嵌入式系統(tǒng)便是其中的一種。在PC市場(chǎng)已趨于穩(wěn)定的今天,嵌入式系統(tǒng)的發(fā)展速度正在加快,嵌入式系統(tǒng)不僅廣泛應(yīng)用于工業(yè)、交通、通信、科研、醫(yī)療衛(wèi)生、等日常生活等領(lǐng)域,而且很多應(yīng)用于各種航天、軍工與醫(yī)療等高安全的工作需求的工作環(huán)境中,系統(tǒng)出現(xiàn)問題可能帶來巨大的經(jīng)濟(jì)損失,甚至危及人的生命。另一方面由于航天、軍工與醫(yī)療等工作環(huán)境中的特殊性,要求的設(shè)備必須滿足一些環(huán)境或者電磁兼容或者可靠性的要求。嵌入式Linux系統(tǒng)具有高實(shí)時(shí)性和高可靠性的特點(diǎn),因而越來越被廣泛地應(yīng)用在上述領(lǐng)域。

        在應(yīng)用中,Linux系統(tǒng)下的通信無疑是值得研究的重點(diǎn)和難點(diǎn)。本文比較了在Linux系統(tǒng)下進(jìn)程之間相互通信的幾種IPC(InterProcess Communication)技術(shù),同時(shí)結(jié)合C語言的一些語言特性,針對(duì)采用Linux幀緩沖設(shè)備的嵌入式系統(tǒng)給出了一個(gè)有效的通信機(jī)制。該實(shí)現(xiàn)對(duì)含有需要實(shí)時(shí)處理的多個(gè)功能模塊進(jìn)行分時(shí)控制,在犧牲系統(tǒng)資源的基礎(chǔ)上,保證了系統(tǒng)的高實(shí)時(shí)性和高可靠性,從而滿足了各種航天、軍工與醫(yī)療等高安全的工作需求的工作環(huán)境的要求。

        2 進(jìn)程間通信技術(shù)

        2.1 管道

        把從一個(gè)進(jìn)程連接到另一個(gè)進(jìn)程的一個(gè)數(shù)據(jù)流稱為管道,它是UNIX系統(tǒng)IPC的最古老形式,并且所有UNIX系統(tǒng)都提供此種通信機(jī)制。管道有下面的特點(diǎn):

        1)半雙工:即數(shù)據(jù)只能在一個(gè)方向上流動(dòng),需要通信時(shí),需要建立起兩個(gè)管道;

        2)只能在具有公共祖先的進(jìn)程之間使用,即只能用于父子進(jìn)程或者兄弟進(jìn)程之間;

        3)管道對(duì)于管道兩端的進(jìn)程而言,就是一個(gè)文件但它不是普通的文件,它不屬于某種文件系統(tǒng),而是自立門戶,單獨(dú)構(gòu)成一種文件系統(tǒng),并且只存在于內(nèi)存中。

        2.2 信號(hào)

        信號(hào)是為了使進(jìn)程獲得某項(xiàng)重要的通知而發(fā)送給它的重要事件。這時(shí)進(jìn)程必須立即停止當(dāng)前的工作,轉(zhuǎn)而處理該信號(hào)。每一個(gè)信號(hào)都用一個(gè)整數(shù)代表信號(hào)的類型。這些信號(hào)定義在系統(tǒng)文件/usr/include/asm/signal.h中,我們?cè)谌粘J褂肔inux的過程中經(jīng)常接觸到信號(hào)操作,比如當(dāng)某個(gè)程序正在運(yùn)行時(shí)為了終止程序的運(yùn)行按下Ctrl-C鍵,或使用Kill命令把該進(jìn)程殺掉,實(shí)際上都是使用了信號(hào)作進(jìn)程間通信。當(dāng)系統(tǒng)捕獲了某信號(hào)時(shí),就會(huì)響應(yīng)該信號(hào)指定的動(dòng)作,系統(tǒng)才對(duì)它進(jìn)行處理,沒有發(fā)出信號(hào)的進(jìn)程就處于等待狀態(tài)。

        信號(hào)是軟件層次上對(duì)中斷機(jī)制的一種模擬,在實(shí)際應(yīng)用中,一個(gè)進(jìn)程收到一個(gè)信號(hào)與處理器收到一個(gè)中斷請(qǐng)求可以說是一樣的。通常來說信號(hào)的生命周期分為以下四個(gè)階段:

        1)信號(hào)產(chǎn)生:信號(hào)事件的發(fā)生主要有兩個(gè)來源:硬件來源和軟件來源;

        2)信號(hào)注冊(cè):信號(hào)在進(jìn)程中注冊(cè)指的是使進(jìn)程知道需要處理某個(gè)信號(hào);

        3)信號(hào)注銷:信號(hào)在進(jìn)程中注銷指進(jìn)程等待處理某個(gè)信號(hào),且該信號(hào)沒有被進(jìn)程阻塞,則在運(yùn)行相應(yīng)的信號(hào)處理函數(shù)前,進(jìn)程把信號(hào)從未決信號(hào)鏈中卸載;

        4)信號(hào)處理:進(jìn)程注銷信號(hào)后,立即執(zhí)行相應(yīng)的信號(hào)處理函數(shù),執(zhí)行完畢后,信號(hào)的本次發(fā)送對(duì)進(jìn)程的影響徹底結(jié)束。

        2.3 FIFO

        管道應(yīng)用的一個(gè)重大限制是它沒有名字,因此,它只能用于具有親緣關(guān)系的進(jìn)程間通信;FIFO不同于管道之處在于它提供一個(gè)路徑名與之關(guān)聯(lián),以FIFO的文件形式存在于文件系統(tǒng)中,這樣,即使與FIFO的創(chuàng)建不存在親緣關(guān)系的進(jìn)程,只要可以訪問該路徑,就能夠彼此通過FIFO相互通信。值得提出的是FIFO嚴(yán)格遵循先進(jìn)先出(First In First Out),對(duì)管道及FIFO的讀總是從開始處返回?cái)?shù)據(jù)。

        2.4 共享內(nèi)存

        共享內(nèi)存可以說是最有效的進(jìn)程間通信方式。最顯而易見的好處就是效率高,進(jìn)程可以直接讀寫內(nèi)存,而不需要任何數(shù)據(jù)的復(fù)制。對(duì)于管道和消息隊(duì)列等通信方式,需要在內(nèi)核和用戶空間進(jìn)行四次數(shù)據(jù)復(fù)制,而共享內(nèi)存只復(fù)制兩次數(shù)據(jù):一次從輸入文件到共享內(nèi)存區(qū),另一次從共享內(nèi)存區(qū)到輸出文件。Linux從2.2內(nèi)核開始支持多種共享內(nèi)存方式,如mmap()系統(tǒng)調(diào)用等。

        2.5 消息隊(duì)列

        消息隊(duì)列就是一個(gè)消息的鏈表。可以把消息看做一個(gè)記錄,具有特定的格式以及特定的優(yōu)先級(jí),對(duì)消息隊(duì)列有寫權(quán)限的進(jìn)程可以向其中按照一定的規(guī)則添加新消息。對(duì)消息隊(duì)列有讀權(quán)限的進(jìn)程則可以從消息隊(duì)列中讀走消息。

        3 實(shí)例分析

        由于嵌入式系統(tǒng)自身的優(yōu)勢(shì),有多種通信方式,結(jié)合實(shí)際項(xiàng)目的需要,所以提出了本文的設(shè)計(jì)方案。

        傳統(tǒng)的設(shè)計(jì)機(jī)制是基于圖1所示的各功能模塊的系統(tǒng)組成結(jié)構(gòu)。該系統(tǒng)包括了顯示模塊、串口模塊、網(wǎng)絡(luò)模塊、鍵盤模塊、數(shù)據(jù)處理模塊,以及主控制模塊6個(gè)模塊。其他類型的嵌入式系統(tǒng)都可在此基礎(chǔ)上進(jìn)行縮減或擴(kuò)展,其基本的軟件設(shè)計(jì)思路是完全相同的。系統(tǒng)的一致性為研究和開發(fā)統(tǒng)一的軟件實(shí)現(xiàn)機(jī)制提供了廣闊的應(yīng)用空間。

        3.1 傳統(tǒng)機(jī)制的缺陷

        在很多嵌入式系統(tǒng)設(shè)計(jì)中,通常是在主函數(shù)Main(*argv,*argn)中,創(chuàng)建多個(gè)線程,進(jìn)行數(shù)據(jù)的交互,從而滿足實(shí)時(shí)多任務(wù)的處理。雖然我們可以使用互斥量來解決線程之間互相破壞的問題,但當(dāng)一個(gè)互斥量已經(jīng)被別的線程鎖定后,如果一直沒有被解鎖,等待它的線程將一直被掛著,程序就陷入死鎖狀態(tài),這時(shí),所有線程都因等待互斥量而被掛起,它們中任何一個(gè)都不可能恢復(fù)運(yùn)行,程序無法繼續(xù)運(yùn)行下去。這樣的設(shè)計(jì)模式會(huì)導(dǎo)致各模塊的錯(cuò)綜復(fù)雜的糾纏,使系統(tǒng)各功能模塊具有極高的耦合性。一旦某個(gè)線程出現(xiàn)問題,就會(huì)導(dǎo)致系統(tǒng)癱瘓,甚至死機(jī)現(xiàn)象,造成不可估量的后果。

        由于很多嵌入式系統(tǒng)應(yīng)用于各種航天設(shè)備、軍工設(shè)備等高安全需求的環(huán)境中,系統(tǒng)出現(xiàn)問題可能帶來巨大的經(jīng)濟(jì)損失,甚至危及人的生命;而一個(gè)不合理的實(shí)現(xiàn)機(jī)制很難甚至不可能保證其行為,尤其是現(xiàn)在的系統(tǒng)越來越復(fù)雜,實(shí)現(xiàn)的功能越來越多,包含的模塊越來越多,該問題就越來越嚴(yán)重。只有系統(tǒng)在一個(gè)合理的實(shí)現(xiàn)機(jī)制下運(yùn)行,才能保證系統(tǒng)的可靠性與穩(wěn)定性。

        3.2 新機(jī)制的實(shí)現(xiàn)

        在進(jìn)程間通信采用信號(hào)、消息機(jī)制,可以很好地處理具有多模塊功能的嵌入式系統(tǒng)的實(shí)時(shí)要求,多任務(wù)需求,從而滿足更復(fù)雜功能的設(shè)備的需求。

        系統(tǒng)采用中央集中控制策略,主控制模塊執(zhí)行各種決策控制(參見圖1),主動(dòng)向外圍設(shè)備(子模塊)寫信息,而采用信號(hào)(軟中斷)的方式接收外圍設(shè)備(子模塊)發(fā)送的信息。在主控制模塊與外圍設(shè)備(子模塊)之間存在如圖2所示的數(shù)據(jù)交互界面。

        圖2 主控制模塊與外圍設(shè)備的數(shù)據(jù)交互界面

        各模塊通過進(jìn)程間通信即消息、信號(hào)機(jī)制,完成設(shè)備所需的功能。

        其中主控制模塊設(shè)定為父進(jìn)程,其它模塊為子進(jìn)程。利用fork()函數(shù)可以創(chuàng)建新的子進(jìn)程。利用Linux多進(jìn)程地址空間的獨(dú)立性,使中央控制模塊與各外圍設(shè)備控制模塊相互隔離,以免相互影響。但是在實(shí)現(xiàn)時(shí)必須注意多進(jìn)程的同步問題,解決這個(gè)問題的辦法是在程序中設(shè)置信號(hào)量,允許進(jìn)程通過檢測(cè)和設(shè)置它的值來實(shí)現(xiàn)同步,保證在此期間其他進(jìn)程不能進(jìn)行類似的操作。通過Linux系統(tǒng)的信號(hào)機(jī)制,給中央控制模塊與各外圍設(shè)備控制模塊提供實(shí)時(shí)通信,提高CPU的處理效率。通過Linux系統(tǒng)的消息機(jī)制,給中央控制模塊與各外圍設(shè)備控制模塊提供數(shù)據(jù)通信。通過消息隊(duì)列可靠地傳遞各模塊發(fā)送或接收的數(shù)據(jù)。

        新機(jī)制采用的多進(jìn)程分配空間各自獨(dú)立,空間消耗上比多線程大,但與整個(gè)系統(tǒng)的高安全性和高可靠性相比,我們可以在系統(tǒng)資源允許的情況下,以犧牲系統(tǒng)資源為代價(jià),來滿足各種航天設(shè)備、軍工設(shè)備等高安全需求的環(huán)境要求。所以本文提出的方案是適宜的。

        4 主要代碼示例

        為了更好的說明問題,在本例中我們打開兩個(gè)子進(jìn)程,進(jìn)行多進(jìn)程操作與進(jìn)程間通信演示,軟件框圖如圖3所示。

        圖3 多進(jìn)程通信框圖

        if(pid1==0)

        {

        int times=0;

        if(signal(SIGPATOCH1,sig_usr)==SIG_USR)

        {

        printf("can'tcatch SIGPATOCH1");

        return;

        }

        for(;;)

        {

        sleep(3);

        times++;

        memset(buf,0,100);

        sprintf(buf,"msgtype1,msginfo%d",times);

        msgwrite(ctop_queueid,buf,strlen(buf),1);

        kill(getppid(),SIGCH1TOPA);

        }

        }

        子進(jìn)程2完成功能:每隔5秒向父進(jìn)程發(fā)一個(gè)消息,然后發(fā)信號(hào)SIGCH2TOPA,父進(jìn)程收到該信號(hào)后讀取該消息隊(duì)列,實(shí)現(xiàn)代碼如下:

        if(pid2==0)

        {

        int times=0;

        for(;;)

        {

        sleep(5);

        times++;

        memset(buf,0,100);

        sprintf(buf,"msg type 2,msginfo%d",times);

        msgwrite(ctop_queueid,buf,strlen(buf),2);

        kill(getppid(),SIGCH1TOPA);

        }

        }

        父進(jìn)程實(shí)例代碼:

        if(signo==SIGCH1TOPA)

        {

        memset(buf,0,100);

        sprintf(buf,"%s",ch_to_par_msg.mtext);

        strcat(buf,tempbuf);

        msgwrite(ptoc_queueid,buf,strlen(buf),1);

        //取消SIGPATOCH1信號(hào)的發(fā)送,

        kill(pidsub1,SIGPATOCH1);

        }

        else if(signo==SIGCH2TOPA)

        {

        memset(buf,0,100);

        sprintf(buf,"%s",ch_to_par_msg.mtext);

        strcat(buf,tempbuf);

        msgwrite(ptoc_queueid,buf,strlen(buf),1);

        //取消SIGPATOCH1信號(hào)的發(fā)送,

        kill(pidsub2,SIGPATOCH2);

        }

        }

        5 結(jié)語

        本文利用嵌入式系統(tǒng)提供的進(jìn)程通信機(jī)制:信號(hào)、消息隊(duì)列,給出了一種適合于經(jīng)典嵌入式系統(tǒng)的系統(tǒng)實(shí)現(xiàn),并給出了一些簡(jiǎn)單范例代碼;該機(jī)制在系統(tǒng)資源允許的情況下,以犧牲系統(tǒng)資源為代價(jià)來保障系統(tǒng)的高安全性和高可靠性,從而滿足各種航天設(shè)備、軍工設(shè)備等高安全需求的環(huán)境中要求,并在實(shí)際應(yīng)用中取得了良好的實(shí)現(xiàn)效果。

        [1]W.RICHARD STEVENS BILL FENNER.UNIX網(wǎng)絡(luò)編程[M].楊繼張,譯.北京:清華大學(xué)出版社,2006,1

        [2][美]W.Richard Stevens Stephen A.Rago.UNIX環(huán)境高級(jí)編程[M].第二版.尤晉元,張亞英,戚正偉,譯.北京:人民郵電出版社,2006,5

        [3]于明儉,陳向陽,方漢.Linux程序設(shè)計(jì)權(quán)威指南[M].北京:機(jī)械工業(yè)出版社,2001,4

        [4]楊水清,張劍,施云飛,等.ARM嵌入式系統(tǒng)開發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2008,11

        [5][美]K.Wall,M.Watson,M.Whitis,et al.GNU/Linux編程指南[M].王勇,王一川,林花軍,等譯.北京:清華大學(xué)出版社,2000,7

        猜你喜歡
        間通信隊(duì)列進(jìn)程
        細(xì)胞間通信預(yù)測(cè)方法研究進(jìn)展
        隊(duì)列里的小秘密
        基于多隊(duì)列切換的SDN擁塞控制*
        軟件(2020年3期)2020-04-20 00:58:44
        債券市場(chǎng)對(duì)外開放的進(jìn)程與展望
        綜合航電分區(qū)間通信元模型設(shè)計(jì)研究
        在隊(duì)列里
        豐田加速駛?cè)胱詣?dòng)駕駛隊(duì)列
        社會(huì)進(jìn)程中的新聞學(xué)探尋
        我國(guó)高等教育改革進(jìn)程與反思
        Linux僵死進(jìn)程的產(chǎn)生與避免
        国产白嫩护士被弄高潮| 日韩成人高清不卡av| 一区二区三区午夜视频在线| 国产成人无码精品久久久露脸| 成人一区二区免费视频| 日韩久久久黄色一级av| 久久99免费精品国产| 亚洲精品乱码久久久久蜜桃| 国内精品伊人久久久久影院对白| 精品不卡久久久久久无码人妻 | 极品av一区二区三区| 无码中文字幕免费一区二区三区| 少妇高潮喷水久久久影院| 97久久成人国产精品免费 | 亚洲精品一区久久久久一品av| 国产福利酱国产一区二区| 亚洲乱码少妇中文字幕| 成人黄色片久久久大全| 亚洲精品国产成人片| 亚洲国产成人va在线观看天堂 | 加勒比东京热综合久久| 日韩一级黄色片一区二区三区 | 亚洲色大成网站www久久九| 亚洲乱码一区二区三区成人小说| 日本一区二三区在线中文| 美女扒开大腿让男人桶| 久久久久久久久888| 国产盗摄XXXX视频XXXX| 国产一区二区三区啊啊| 中文字幕人妻少妇引诱隔壁| 美女裸体无遮挡免费视频的网站| 日韩精品成人一区二区三区 | 国产亚洲精品看片在线观看| 亚洲国产成人精品一区刚刚 | 国产乱了真实在线观看| 96精品在线| 国产主播一区二区三区在线观看| 丰满熟妇乱又伦精品| 欧美极品美女| 亚洲精品视频免费在线| 狠狠躁夜夜躁av网站中文字幕|