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

        ?

        Linux下多進程編程在海洋環(huán)境信息系統(tǒng)中的應(yīng)用*

        2015-03-15 02:42:13趙美珍
        艦船電子工程 2015年12期
        關(guān)鍵詞:網(wǎng)絡(luò)通信進程信息

        趙美珍

        (中國艦船研究設(shè)計中心 武漢 430064)

        ?

        Linux下多進程編程在海洋環(huán)境信息系統(tǒng)中的應(yīng)用*

        趙美珍

        (中國艦船研究設(shè)計中心 武漢 430064)

        介紹了Linux操作系統(tǒng)下進程的數(shù)據(jù)結(jié)構(gòu),多進程編程的應(yīng)用方法,包括進程狀態(tài)的管理及進程間相互通信機制。分析了多進程在該系統(tǒng)中應(yīng)用的必要性,設(shè)計了多進程編程在系統(tǒng)人機交互界面與網(wǎng)絡(luò)通信中具體實現(xiàn)方案,解決了系統(tǒng)中網(wǎng)絡(luò)通信阻塞與人機交互界面顯示間的制約矛盾,通過進程間通信實現(xiàn)了經(jīng)網(wǎng)絡(luò)獲取的基礎(chǔ)導(dǎo)航數(shù)據(jù)實時動態(tài)顯示的功能。實驗測試表明達到了良好的界面顯示與網(wǎng)絡(luò)通信并存的效果。

        海洋環(huán)境信息系統(tǒng); Linux; 多進程; 網(wǎng)絡(luò)通信

        Class Number TP316.8

        1 引言

        近年來,操作系統(tǒng)Windows一統(tǒng)天下的局面正在逐漸被Linux打破,Linux操作系統(tǒng)正以其獨特的魅力得到越來越多使用者的青睞。在Linux操作系統(tǒng)下開發(fā)應(yīng)用程序不但會獲得較高的運行效率,而且可通過較小的投入獲得較大的收益。

        目前,某海洋環(huán)境信息系統(tǒng)就是在該平臺下實現(xiàn)的。海洋環(huán)境信息應(yīng)用系統(tǒng)集成海洋中溫度、鹽度、密度、聲場、海流、潮汐、水深、底質(zhì)等諸多信息,為船舶航行、操縱等活動提供必要的支持和保障。由于海洋信息的復(fù)雜多樣性以及信息傳輸要求的高效性,對信息的處理能力將是選用操作系統(tǒng)的一項重要參考。使用Linux這樣一個功能強大的多用戶多任務(wù)網(wǎng)絡(luò)操作系統(tǒng)環(huán)境,開發(fā)應(yīng)用程序?qū)Q笮畔⒌奶幚沓蔀榱丝赡堋?/p>

        2 Linux進程數(shù)據(jù)結(jié)構(gòu)及基本進程函數(shù)庫

        2.1 Linux進程數(shù)據(jù)結(jié)構(gòu)分析

        進程是程序執(zhí)行的基本單位,它是特定程序的個體實例化。按照Linux的定義,進程就是處于執(zhí)行期的程序。進程并不是僅指一段可執(zhí)行的代碼,通常還包括一些資源,如打開的文件,進程的地址空間處理器狀態(tài)、寄存器的內(nèi)容等[1~2]。

        Linux內(nèi)核利用一個數(shù)據(jù)結(jié)構(gòu)代表一個進程。在該結(jié)構(gòu)中保存進程的屬性和其他信息。在此對比較重要的域進行分析。

        1) volatile long state:用于保存進程的狀態(tài),在進程的生命期內(nèi),可以從該域獲得自己的狀態(tài)。

        2) struct thread_info *thread_info:當(dāng)前進程的一些運行環(huán)境信息。

        3) int prio,static_prio:prio表示優(yōu)先級,static_prio表示靜態(tài)優(yōu)先級。

        4) struct list_head run_list:表示運行隊列,在該隊列中包含所有可運行的進程。

        5) int exit_code,exit_signal:分別用于存放進程的退出值和終止信號,是將子進程的退出值傳給父進程的方式。

        6) pid_t pid:進程的唯一標(biāo)識符。

        7) struct task_struct*real_parent:用于標(biāo)識該進程的父進程的描述符。若該進程的父進程已經(jīng)死亡,那么該域?qū)⒅赶騣nit()的進程描述符。

        8) struct list_head children:指向該進程的子進程的列表。

        9) uid_t uid,euid,suid,fsuid:uid用于保存創(chuàng)建該進程的用戶的ID。

        在Linux中,內(nèi)核將這些結(jié)構(gòu)體用兩種方式組織起來:(1)用一個哈希表的形式,(2)用一個雙向循環(huán)鏈表將所有task_struct組織起來。

        2.2 Linux基本進程函數(shù)庫

        1) 啟動新進程

        int system(const char*string)。

        2) 替換進程映像

        exec函數(shù)系列由一組相關(guān)的函數(shù)組成,它們在進程的啟動方式和程序參數(shù)的表達方式上各有不同。一個exec函數(shù)可以把當(dāng)前進程替換為一個新進程。

        3) 復(fù)制進程映像

        圖1 復(fù)制進程映像過程

        fork()函數(shù),實現(xiàn)復(fù)制進程映像。在父進程中的fork()調(diào)用返回的是新進程的子進程的PID。新進程將繼續(xù)執(zhí)行,就像原進程一樣,不同之處在于,子進程中的fork調(diào)用返回的是0。父子進程可以通過這一點來判斷究竟誰是父進程,誰是子進程。具體實現(xiàn)流程如圖1所示。

        4) 等待一個進程

        可以通過在父進程中調(diào)用wait函數(shù)讓父進程等待子進程的結(jié)束。這個調(diào)用返回子進程的PID,它通常是已經(jīng)結(jié)束運行的子進程的PID。狀態(tài)信息允許父進程了解子進程的退出狀態(tài)[3~5]。

        3 常用的進程間通信技術(shù)

        Linux系統(tǒng)中常用的進程通信機制包括管道、信號量、共享內(nèi)存和消息隊列[2,7]。下面分別進行介紹。

        3.1 管道

        管道是許多應(yīng)用程序的基本構(gòu)建模塊。管道是半雙工的,數(shù)據(jù)只能向一個方向流動,如需要雙向通信時,需建立兩個管道。管道對于管道兩端的進程而言,單獨構(gòu)成一個文件系統(tǒng)。它們的數(shù)據(jù)是一個字節(jié)流,類似于TCP連接。在某一進程往管道中寫入數(shù)據(jù)前,要求另外某一進程在該管道上等待數(shù)據(jù)的到達,如果讀出者不存在,則先有寫入者是沒有意義的。

        3.2 信號量

        為了防止多個程序同時訪問一個共享資源,通過生成并使用令牌來授權(quán),即在任一時刻只能有一個執(zhí)行線程訪問代碼的臨界區(qū)域。常使用信號量完成這種對資源訪問的管理。

        3.3 共享內(nèi)存

        共享內(nèi)存允許兩個不相關(guān)的進程訪問同一邏輯內(nèi)存。共享內(nèi)存是在兩個正在運行的進程之間傳遞數(shù)據(jù)的一種非常有效的方式。共享內(nèi)存是有IPC為進程創(chuàng)建的一個特殊的地址范圍,它將出現(xiàn)在該進程的地址空間中。其他進程可以將同一段共享內(nèi)存連接到它們自己的地址空間中。所有進程都可以訪問共享內(nèi)存中的地址。如果一個進程更新了其中的數(shù)據(jù),其他的進程會立即更新[6]。

        3.4 消息隊列

        消息隊列可以認(rèn)為是一個消息鏈表。有足夠?qū)憴?quán)限的進程可往隊列中寫入消息,有足夠讀權(quán)限的進程可從隊列中讀出消息。每個消息是一個記錄,它由發(fā)送者賦予一個優(yōu)先級。一個進程可往某一隊列中寫入消息后終止,讓另一個進程在后某個時刻讀出這些消息。這跟管道是相反的[8]。

        在上述四種進程間通信技術(shù)中,每種技術(shù)都有自己的特點和使用范圍,可以根據(jù)需求進行選擇應(yīng)用。

        4 多進程在海洋環(huán)境信息系統(tǒng)中的需求與設(shè)計

        4.1 多進程應(yīng)用在本系統(tǒng)應(yīng)用中的必要性

        海洋環(huán)境信息系統(tǒng)主要由終端顯示處理器和網(wǎng)絡(luò)通信子系統(tǒng)構(gòu)成。系統(tǒng)終端顯示器完成人機交互功能,實現(xiàn)對多種海洋信息查詢和航海作業(yè)操作。

        為提高海洋環(huán)境信息系統(tǒng)處理性能,從以下幾方面因素考慮,采用多進程并發(fā)處理是比較合適的。

        1) 時間因素。網(wǎng)絡(luò)通信通常要求系統(tǒng)能并發(fā)處理多種任務(wù),而串行處理必然降低系統(tǒng)資源利用率和處理效率。

        2) 應(yīng)用處理對象因素。海洋信息種類繁多,需進行大量信息數(shù)據(jù)庫操作,如批量數(shù)據(jù)裝載、海量數(shù)據(jù)的查詢統(tǒng)計等,其主要瓶頸為I/O,啟用多進程無助于性能改善。相應(yīng)的,如果應(yīng)用存在大量計算處理,則采用多個進程并行處理可提高性能。

        3) 網(wǎng)絡(luò)實現(xiàn)機制因素。基于TCP/IP協(xié)議族的socket網(wǎng)絡(luò)編程默認(rèn)狀態(tài)是阻塞的。阻塞機制是為防止進程在等待中通過循環(huán)反復(fù)查詢某一條件造成系統(tǒng)資源的浪費[9]。雖然可以使用fcntl()函數(shù)使其成為非阻塞的socket,但由于海洋環(huán)境信息系統(tǒng)終端顯示處理器要處理及管理眾多信息,與外部進行網(wǎng)絡(luò)通信只是其部分功能,為對系統(tǒng)資源的合理分配利用,可以選擇阻塞socket。而阻塞的socket又帶來一定的不足,它使人機交互界面無法顯示。而使用多進程將可以很好地解決該問題。

        4) 開發(fā)環(huán)境因素。本實例Linux操作系統(tǒng)。

        該系統(tǒng)是一個多用戶、多任務(wù)、交互式的網(wǎng)絡(luò)操作系統(tǒng),其開發(fā)環(huán)境支持子進程的創(chuàng)建,而且實現(xiàn)較為容易。

        4.2 多進程編程在本系統(tǒng)中設(shè)計方案

        基于以上分析,系統(tǒng)各進程功能獨立,需求時能相互通信是最理想狀態(tài)。

        圖2 系統(tǒng)多進程的父子關(guān)系圖

        1) 系統(tǒng)多進程方案

        在系統(tǒng)設(shè)計中,采用了樹形結(jié)構(gòu)進行復(fù)制進程映像操作。將人機交互界面作為程序主進程,網(wǎng)絡(luò)通信部分作為它的子進程。又對網(wǎng)絡(luò)傳輸?shù)牟煌畔⑦M行多次復(fù)制進程映像操作,從而形成多種網(wǎng)絡(luò)信息處理進程。其結(jié)構(gòu)簡意圖如圖2所示。

        2) 系統(tǒng)多進程通信機制

        系統(tǒng)人機交互界面與網(wǎng)絡(luò)通信間的關(guān)系主要是將經(jīng)網(wǎng)絡(luò)獲取的導(dǎo)航信息及部分海洋環(huán)境信息實時顯示在人機交互界面的動態(tài)顯示區(qū)。由多進程方案設(shè)計可以知道兩者是處于不同的進程,此時是需要進程間通信的。經(jīng)仔細(xì)分析以上幾種進程間通信機制,選擇共享內(nèi)存方式實現(xiàn)窗口顯示與網(wǎng)絡(luò)通信的信息交互比較合適的。

        圖3 海洋環(huán)境信息系統(tǒng)人機交互界面圖

        3) 進程狀態(tài)的管理及資源的回收

        通過上述相關(guān)方案設(shè)計,可以解決網(wǎng)絡(luò)通信阻塞與人機交互界面顯示間的制約矛盾,并能很好地對各種海洋環(huán)境信息進行處理。但因網(wǎng)絡(luò)信息的動態(tài)性,將產(chǎn)生大量僵尸進程。因此,進程的管理及資源的回收是系統(tǒng)多進程應(yīng)用設(shè)計所必須考慮的問題。

        對進程狀態(tài)的管理設(shè)計如下操作。在系統(tǒng)應(yīng)用主程序中設(shè)置信號處理函數(shù)。當(dāng)子進程結(jié)束時系統(tǒng)捕獲該信號并進行相應(yīng)處理。具體設(shè)計如下:在應(yīng)用主程序中使用signal(SIGCHLD,ClearChild);語句。當(dāng)系統(tǒng)收到SIGCHLD信號后調(diào)用ClearChild函數(shù)。而在ClearChild函數(shù)內(nèi)部又調(diào)用waitpid函數(shù)(wait函數(shù)族中的一個)來收集子進程信息,從而避免僵尸進程的產(chǎn)生。

        5 多進程在海洋環(huán)境信息系統(tǒng)中的實現(xiàn)

        系統(tǒng)采用如上所述的多進程方案,通過網(wǎng)絡(luò)技術(shù)將現(xiàn)場傳感器獲取的基本導(dǎo)航信息和海域環(huán)境信息傳送給終端顯示處理器。在通信子進程中進行解析處理,利用共享內(nèi)存的進程間通信機制將基本導(dǎo)航信息及部分海洋環(huán)境信息實時顯示。

        表1 測試數(shù)據(jù)列表

        為確認(rèn)多進程方案在海洋環(huán)境信息系統(tǒng)中解決問題的處理能力,進行了以VxWorks 5.4為客戶端的網(wǎng)絡(luò)測試,其測試結(jié)果如表1所示??梢钥吹桨l(fā)送時間間隔的減小,數(shù)據(jù)包的增大,會帶來一定量的丟包率。但從系統(tǒng)硬件設(shè)備及網(wǎng)絡(luò)應(yīng)用協(xié)議因素等方面考慮,系統(tǒng)是滿足性能要求的。

        6 結(jié)語

        本文通過多進程編程在海洋環(huán)境信息系統(tǒng)中的應(yīng)用,解決了海洋環(huán)境信息系統(tǒng)人機交互界面與網(wǎng)絡(luò)通信并行工作問題,實現(xiàn)了人機交互界面上實時顯示網(wǎng)絡(luò)獲取的基礎(chǔ)導(dǎo)航數(shù)據(jù)。通過對系統(tǒng)的測試,發(fā)現(xiàn)其運行效率、穩(wěn)定性和可靠性都比較高,達到令人滿意的效果。實驗證明,該方案是行之有效的。

        [1] 吳國偉,李張,任廣臣.Linux內(nèi)核分析及高級編程[M].北京:電子工業(yè)出版社,2008:11-20.

        [2] 毛德操,胡希明.Linux內(nèi)核源代碼情景分析[M].杭州:浙江大學(xué)出版社,2001:21-30.

        [3] 陳健,宋健建.Linux程序設(shè)計[M].第3版.北京:人民郵電出版社,2007:36-40.

        [4] 朱珂.Linux編程白皮書[M].北京:機械工業(yè)出版社,2000:9-11.

        [5] 劉軍.UNIX環(huán)境下的多進程編程[J].電腦知識與技術(shù),2008,2:265-267.

        [6] 王文啟,韓秀玲,孫波.基于MiniGUI的多進程圖形用戶界面的研究[J].微計算機信息,2007,23:78-80.

        [7] 程樹良.UNIX下的多進程及進程間的通信[J].交通與計算機,2000,2:40-2.

        [8] 胡英楣,沈文海,宋之光.多進程并發(fā)在國內(nèi)氣象通信系統(tǒng)的應(yīng)用[J].應(yīng)用氣象學(xué)報,2007,12:878-885.

        [9] 陳遠森,鄧可.UNIX網(wǎng)絡(luò)實用編程技術(shù)[M].北京:水利水電出版社,2000:31-40.

        [10] 高峰.基于Linux的船用海洋環(huán)境數(shù)據(jù)庫系統(tǒng)設(shè)計與實現(xiàn)[D].哈爾濱:哈爾濱工程大學(xué)碩士學(xué)位論文,2008:8-17,19-38,48-57.

        [11] 許兆新,方明,徐婧.基于國際標(biāo)準(zhǔn)的電子海圖顯示系統(tǒng)設(shè)計[J].計算機與數(shù)字工程,2005,33(9):93-96.

        The Application of Multi-Processes Programming under Linux in the Information System of the Ocean Environment

        ZHAO Meizhen

        (China Ship Development and Design Center, Wuhan 430064)

        This paper introduced the structure of a process under Linux operation system and the method of multi-processes programming. It included the management of the statement of a process and the inter-process communication. It analyzed the necessaries of multi-processes programming to the Information System of the Ocean Environment(ISOE) and designed the implementation of Multi-Processes programming between man-machine mutual interface and net communication. It solved the conflicts between net communication blocking and man-machine mutual interface showing. Meanwhile it accomplished the basic navigation data got by net communication showing in real-time by inter-process communication. Testes showed the application could make ISOE work well by good man-machine mutual interface and net communication.

        information system of the ocean environment, Linux, multi-processes, net communication

        2015年6月17日,

        2015年7月31日

        趙美珍,女,碩士,工程師,研究方向:船舶導(dǎo)航系統(tǒng)設(shè)計。

        TP316.8

        10.3969/j.issn.1672-9730.2015.12.029

        猜你喜歡
        網(wǎng)絡(luò)通信進程信息
        海上軍用網(wǎng)絡(luò)通信的安全控制技術(shù)
        債券市場對外開放的進程與展望
        中國外匯(2019年20期)2019-11-25 09:54:58
        基于網(wǎng)絡(luò)通信的智能照明系統(tǒng)設(shè)計
        電子制作(2019年15期)2019-08-27 01:11:48
        網(wǎng)絡(luò)通信中信息隱藏技術(shù)的應(yīng)用
        談計算機網(wǎng)絡(luò)通信常見問題及技術(shù)發(fā)展
        電子制作(2017年17期)2017-12-18 06:41:06
        訂閱信息
        中華手工(2017年2期)2017-06-06 23:00:31
        展會信息
        中外會展(2014年4期)2014-11-27 07:46:46
        社會進程中的新聞學(xué)探尋
        我國高等教育改革進程與反思
        Linux僵死進程的產(chǎn)生與避免
        噜噜噜色97| 国产精品毛片无遮挡| 久久精品国产视频在热| 国产精品-区区久久久狼| 无码专区亚洲avl| 国产极品大秀在线性色| 国产日产亚洲系列最新| 中文字幕一区二区三区精彩视频| 在线综合亚洲欧洲综合网站 | 韩国黄色三级一区二区| 久久亚洲道色综合久久| 无码免费一区二区三区| 精品视频入口| 亚洲av第一区综合激情久久久| 久久国产精品亚洲我射av大全| 亚洲综合自拍偷拍一区| 亚洲乱色伦图片区小说| 乌克兰少妇xxxx做受6| 久久久久AV成人无码网站| 91色区在线免费观看国产| 国产免费艾彩sm调教视频| 久久精品国产日本波多麻结衣| 亚欧免费视频一区二区三区| 青青草是针对华人绿色超碰| 国产狂喷水潮免费网站www| 亚洲国产激情一区二区三区| 亚洲欧美日韩国产综合专区| 男女视频一区二区三区在线观看| 亚洲一区二区女搞男| 在线亚洲欧美日韩精品专区| 一区二区视频观看在线| 人妻少妇偷人精品一区二区| 久久久久无码国产精品一区| 狠狠躁夜夜躁人人爽超碰97香蕉| 精品免费一区二区三区在| 中日无码精品一区二区三区| 亚洲第一黄色免费网站| 国产亚洲日韩在线一区二区三区| 欧美性群另类交| 中文字幕日韩熟女av| 亚洲精品午夜久久久九九|