• 
    

    
    

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

      嵌入式實(shí)時(shí)操作系統(tǒng)中系統(tǒng)調(diào)用方法的設(shè)計(jì)與實(shí)現(xiàn)

      2011-05-21 00:42:00衛(wèi)一芃李運(yùn)喜
      電子設(shè)計(jì)工程 2011年13期
      關(guān)鍵詞:體系結(jié)構(gòu)調(diào)用分區(qū)

      衛(wèi)一芃,李運(yùn)喜

      (中航工業(yè)西安計(jì)算技術(shù)研究所 陜西 西安 710068)

      隨著微電子、容錯(cuò)、軟件技術(shù)的發(fā)展,航空電子系統(tǒng)已逐步從原有的體系結(jié)構(gòu)向綜合化模塊化航空電子系統(tǒng)(IMA)發(fā)展,以提高未來飛機(jī)的作戰(zhàn)能力[1]。上世紀(jì)末,美國就已經(jīng)開始研制新一代飛機(jī),并制定了滿足新一代飛機(jī)綜合化要求的技術(shù)標(biāo)準(zhǔn)ARINC。其中,ARINC 653是美國航電委員會針對數(shù)據(jù)綜合化的要求提出的應(yīng)用程序接口標(biāo)準(zhǔn)[2-3]。新一代飛機(jī)的航電系統(tǒng)將是高度模塊化、綜合化的,其操作系統(tǒng)需采用專用的航電實(shí)時(shí)操作系統(tǒng),在滿足綜合化要求以及保證實(shí)時(shí)性的前提下,對安全性要求非常高。在高安全性的實(shí)時(shí)操作系統(tǒng)中支持兩種運(yùn)行形態(tài):系統(tǒng)態(tài)和用戶態(tài)。用戶態(tài)的程序在運(yùn)行過程中可能需要使用系統(tǒng)態(tài)的功能,由于跨兩態(tài),用戶態(tài)的應(yīng)用不能直接調(diào)用系統(tǒng)態(tài)下的服務(wù),因此需要使用系統(tǒng)調(diào)用機(jī)制為用戶態(tài)的應(yīng)用訪問系統(tǒng)態(tài)的服務(wù)提供解決途徑。

      筆者詳細(xì)討論了某嵌入式實(shí)時(shí)操作系統(tǒng)中系統(tǒng)調(diào)用的機(jī)制以及實(shí)現(xiàn)方法。

      1 概 述

      某嵌入式實(shí)時(shí)操作系統(tǒng)是滿足ARINC 653標(biāo)準(zhǔn)要求的嵌入式實(shí)時(shí)操作系統(tǒng),其軟件結(jié)構(gòu)如圖1所示。

      圖1 某嵌入式實(shí)時(shí)操作系統(tǒng)軟件結(jié)構(gòu)圖Fig.1 Software structure diagram of an embedded real-time operating system

      ARINC 653為保證IMA系統(tǒng)中運(yùn)行的多個(gè)航電應(yīng)用程序執(zhí)行時(shí)不相互影響,提出分區(qū)的概念。分區(qū)是IMA系統(tǒng)中的一組功能相關(guān)的應(yīng)用軟件,這些軟件在配置和執(zhí)行時(shí)作為一個(gè)單一的軟件來對待[4]。相當(dāng)于通用操作系統(tǒng)中的進(jìn)程,包含自己的存儲器,上下文以及配置屬性。分區(qū)OS運(yùn)行在用戶態(tài),提供分區(qū)管理、分區(qū)間及分區(qū)內(nèi)通信、時(shí)間管理、進(jìn)程管理等功能。核心OS運(yùn)行系統(tǒng)態(tài),提供任務(wù)管理、任務(wù)間通信、信號管理、系統(tǒng)調(diào)用管理等功能。位于用戶態(tài)下的程序不能直接訪問系統(tǒng)態(tài)下的服務(wù),系統(tǒng)調(diào)用機(jī)制為應(yīng)用分區(qū)訪問核心OS的服務(wù)提供解決途徑,有效保護(hù)核心OS的安全[5-6]。

      2 系統(tǒng)調(diào)用機(jī)制

      內(nèi)核提供應(yīng)用的服務(wù)需統(tǒng)一編號,使用表方式統(tǒng)一管理。當(dāng)用戶態(tài)的應(yīng)用需要調(diào)用內(nèi)核提供的服務(wù)時(shí),首先要執(zhí)行一組特殊的指令使系統(tǒng)進(jìn)入系統(tǒng)態(tài),通過系統(tǒng)調(diào)用號查表得到函數(shù)的入口地址,執(zhí)行內(nèi)核服務(wù),當(dāng)調(diào)用完成后,內(nèi)核將執(zhí)行另一組特征指令將系統(tǒng)返回到用戶態(tài)。這里將從系統(tǒng)調(diào)用號、系統(tǒng)調(diào)用表、系統(tǒng)調(diào)用生成及工作過程4個(gè)方面描述系統(tǒng)調(diào)用機(jī)制。

      2.1 系統(tǒng)調(diào)用號

      核心OS為每個(gè)系統(tǒng)調(diào)用定義一個(gè)唯一的編號,編號的定義方式如下:

      #define__NR_函數(shù)名 X

      其中,X代表系統(tǒng)調(diào)用號,系統(tǒng)調(diào)用號定義的部分代碼如下:

      #define__NR_SysCallInit 1

      #define__NR_RegisterDynamicLibrary 2

      #define__NR_fstat 18

      #define__NR_creat 19

      #define__NR_hmEventDispatch 20

      通過這個(gè)獨(dú)一無二的編號可以關(guān)聯(lián)到一個(gè)特定的系統(tǒng)調(diào)用。當(dāng)用戶空間的進(jìn)程執(zhí)行一個(gè)系統(tǒng)調(diào)用的時(shí)候,這個(gè)系統(tǒng)調(diào)用號就被用來指定要執(zhí)行的系統(tǒng)調(diào)用,進(jìn)程不會提及系統(tǒng)調(diào)用的名稱。

      系統(tǒng)調(diào)用號一旦分配且完成編譯,就不能有任何變更。

      2.2 系統(tǒng)調(diào)用表

      系統(tǒng)調(diào)用表(syscall_table)用于記錄各個(gè)系統(tǒng)調(diào)用處理函數(shù)的入口地址,以系統(tǒng)調(diào)用號為偏移量能夠很容易在該表中找到對應(yīng)處理函數(shù)地址,部分代碼如下:

      .long SYM(syscall_entry) /*0*/

      .long SYM(SysCallInit) /*1*/

      .long SYM(fstat) /*18*/

      .long SYM(creat) /*19*/

      .long SYM(hmEventDispatch) /*20*/

      2.3 系統(tǒng)調(diào)用生成

      核心OS內(nèi)的syscall.h文件中定義了所有核心OS提供給上層應(yīng)用的函數(shù)。通過編譯,系統(tǒng)生成系統(tǒng)調(diào)用號及系統(tǒng)調(diào)用表項(xiàng),同時(shí)為每一個(gè)函數(shù)生成一個(gè)文件名為XXX_trap.c的文件,XXX代表函數(shù)名。該文件中記錄用_syscallN()封裝后的函數(shù)。

      應(yīng)用程序本身無法直接執(zhí)行內(nèi)核代碼,而是通過引發(fā)一個(gè)異常來促使系統(tǒng)切換到系統(tǒng)態(tài)執(zhí)行系統(tǒng)調(diào)用處理程序_syscallN(),其中N表示參數(shù)個(gè)數(shù),在X86體系結(jié)構(gòu)上支持函數(shù)最多帶5個(gè)參數(shù),PPC體系結(jié)構(gòu)上支持函數(shù)最多帶7個(gè)參數(shù)。

      在陷入核心OS時(shí),_syscallN()將系統(tǒng)調(diào)用號傳給核心OS。在PPC體系結(jié)構(gòu)中,系統(tǒng)調(diào)用號通過通用寄存器傳入,系統(tǒng)調(diào)用處理程序一旦執(zhí)行,可以從通用寄存器中獲得數(shù)據(jù),以下為PPC體系結(jié)構(gòu)的_syscall2()代碼片段:

      #define_syscall2(type,name,type1,arg1,type2,arg2)

      type name(type1 arg1, type2 arg2)

      {

      unsigned long__sc_ret;

      {

      register unsigned long__sc_0__asm__ ("r0");

      register unsigned long__sc_3__asm__ ("r3");

      register unsigned long__sc_4__asm__ ("r4");

      __sc_3= (unsigned long) (arg1);

      __sc_4= (unsigned long) (arg2);

      __sc_0=__NR_##name;

      __asm____volatile__

      ("sc "

      : "=&r" (__sc_3)

      : "0" (__sc_3), "r" (__sc_0),

      "r" (__sc_4)

      : __syscall_clobbers);

      __sc_ret=__sc_3;

      }

      __syscall_return (type);

      }

      由上述代碼片段可以看出,系統(tǒng)調(diào)用帶有2個(gè)參數(shù),分別通過寄存器r3和r4傳遞,系統(tǒng)調(diào)用號通過寄存器r0傳遞。

      以打開文件函數(shù)creat()為例,通過編譯后將生成creat_trap.c文件,該文件中記錄通過系統(tǒng)調(diào)用處理程序封裝后的creat()函數(shù)。應(yīng)用程序調(diào)用creat()時(shí),實(shí)際就是通過執(zhí)行用_syscall2()封裝后的函數(shù)從用戶態(tài)進(jìn)入系統(tǒng)態(tài),完成系統(tǒng)調(diào)用功能。creat_trap.c文件中代碼片段如下:

      _syscall2(T_WORD,creat,T_CONST T_BYTE*,name,T_WORD,mode)

      2.4 系統(tǒng)調(diào)用工作步驟

      系統(tǒng)調(diào)用的工作步驟如下:

      1)保存所有當(dāng)前上下文(即用戶態(tài)上下文);

      2)應(yīng)用程序通過軟中斷方式通知核心OS需要執(zhí)行一個(gè)系統(tǒng)調(diào)用。X86體系結(jié)構(gòu)上的軟中斷由int 0x80指令產(chǎn)生,PPC體系結(jié)構(gòu)上的軟中斷由sc指令產(chǎn)生。

      3)引起0x0c00中斷(系統(tǒng)調(diào)用中斷),進(jìn)行異常處理,進(jìn)入核心OS;

      4)判斷系統(tǒng)調(diào)用號是否合法,如果為非法系統(tǒng)調(diào)用號,則退出;否則根據(jù)系統(tǒng)調(diào)用號在系統(tǒng)調(diào)用表syscall_table中查找函數(shù)的入口地址,并跳轉(zhuǎn)到該地址。

      5)執(zhí)行完畢后返回。

      圖2以creat()為例反映了系統(tǒng)調(diào)用的工作步驟。

      圖2 系統(tǒng)調(diào)用工作步驟Fig.2 Work steps of system call

      3 阻塞性系統(tǒng)調(diào)用

      分區(qū)OS中的進(jìn)程通過系統(tǒng)調(diào)用產(chǎn)生阻塞性請求的時(shí)候,進(jìn)程因等待系統(tǒng)調(diào)用的返回而阻塞。當(dāng)分區(qū)OS中一個(gè)進(jìn)程阻塞的時(shí)候,將導(dǎo)致整個(gè)分區(qū)阻塞,影響應(yīng)用分區(qū)的正常執(zhí)行。為解決阻塞性系統(tǒng)調(diào)用帶來的問題,引入worker任務(wù)機(jī)制進(jìn)行處理。

      3.1 worker任務(wù)

      當(dāng)應(yīng)用請求了阻塞性的服務(wù)時(shí),核心OS中將會啟動(dòng)相應(yīng)的系統(tǒng)任務(wù)來進(jìn)行應(yīng)用請求的操作,通過這樣的方法實(shí)現(xiàn)異步IO機(jī)制。這種為實(shí)現(xiàn)異步IO操作而創(chuàng)建的系統(tǒng)任務(wù)稱為worker任務(wù)。筆者將從worker任務(wù)創(chuàng)建、分派及清理3方面描述worker任務(wù)。

      3.1.1 worker任務(wù)創(chuàng)建

      每個(gè)分區(qū)可支持的worker任務(wù)數(shù)在配置數(shù)據(jù)中定義。在分區(qū)創(chuàng)建的過程中,將根據(jù)配置的worker任務(wù)數(shù)創(chuàng)建任務(wù),這些任務(wù)隸屬于對應(yīng)的應(yīng)用分區(qū)。所有創(chuàng)建的worker任務(wù)都處于worker任務(wù)空閑隊(duì)列中。

      3.1.2 worker任務(wù)分派

      分區(qū)OS根據(jù)調(diào)用的服務(wù)是否為阻塞服務(wù)決定是否分派worker任務(wù),分派worker任務(wù)前,首先從可用的worker任務(wù)隊(duì)列中取得一個(gè)worker任務(wù)并激活該任務(wù),將系統(tǒng)調(diào)用的方法交由worker任務(wù)處理,當(dāng)worker任務(wù)能夠獲得資源則直接處理,完成后發(fā)送系統(tǒng)調(diào)用完成的事件,否則worker任務(wù)將阻塞在等待的資源上,直到資源被釋放,方可啟動(dòng)運(yùn)行,并通知應(yīng)用分區(qū)。

      3.1.3 worker任務(wù)清理

      worker任務(wù)在處理阻塞性系統(tǒng)調(diào)用過程中,如果處于等待狀態(tài),那么在應(yīng)用分區(qū)設(shè)置為IDLE模式、應(yīng)用分區(qū)重啟動(dòng)過程中,需要對未完成的系統(tǒng)調(diào)用進(jìn)行刷新操作,在對系統(tǒng)調(diào)用進(jìn)行清理的同時(shí),還需要對阻塞的worker任務(wù)進(jìn)行清理,將阻塞在資源等待鏈上的worker任務(wù)摘除,并停止worker任務(wù)的執(zhí)行。

      3.2 worker任務(wù)處理機(jī)制

      采用worker任務(wù)機(jī)制可以有效地解決應(yīng)用分區(qū)因阻塞性系統(tǒng)調(diào)用而無法繼續(xù)運(yùn)行的問題。當(dāng)系統(tǒng)調(diào)用發(fā)生阻塞時(shí),啟動(dòng)worker任務(wù)去等待資源,而當(dāng)前系統(tǒng)調(diào)用返回特定的狀態(tài)給應(yīng)用分區(qū),應(yīng)用分區(qū)經(jīng)過狀態(tài)判斷,掛起分區(qū)內(nèi)相應(yīng)的應(yīng)用進(jìn)程,從而產(chǎn)生進(jìn)程切換,執(zhí)行其他應(yīng)用進(jìn)程,當(dāng)worker任務(wù)等待的資源得到滿足時(shí),則解掛worker任務(wù)執(zhí)行,并通過發(fā)送信號通知應(yīng)用分區(qū)阻塞狀態(tài)的解除。worker任務(wù)機(jī)制示意圖如圖3所示。

      圖3 worker任務(wù)處理機(jī)制示意圖Fig.3 Schematic diagram of worker task processing mechanism

      4 結(jié)束語

      筆者深入研究了嵌入式實(shí)時(shí)操作系統(tǒng)中系統(tǒng)調(diào)用原理、參考國內(nèi)外先進(jìn)嵌入式實(shí)時(shí)操作系統(tǒng)中系統(tǒng)調(diào)用的實(shí)現(xiàn)方法,設(shè)計(jì)并實(shí)現(xiàn)了一種有效的系統(tǒng)調(diào)用方法,解決阻塞性系統(tǒng)調(diào)用給分區(qū)正常運(yùn)行帶來的影響,保證分區(qū)的正常運(yùn)行。通過在某嵌入式實(shí)時(shí)操作系統(tǒng)中的實(shí)現(xiàn),文中涉及的設(shè)計(jì)和實(shí)現(xiàn)方法是安全的、可行的、有效的。在今后的工作中,將著重于更進(jìn)一步提高系統(tǒng)調(diào)用的訪問效率及安全性方面的研究。

      [1]王樹紅.嵌入式系統(tǒng)的現(xiàn)狀及發(fā)展趨勢[J].太原大學(xué)學(xué)報(bào),2007,8(2):121-122,139.WANG Shu-hong,The present situation and developing trend of embedded system[J]Journal of Taiyuan university,2007,8(2):121-122,139.

      [2]王麗杰.嵌入式實(shí)時(shí)操作系統(tǒng)設(shè)計(jì)探討[J].軟件世界,2007(20):51-53.WANG Li-jie.Discussion of embedded real time operating system design[J].Software World,2007(20):51-53.

      [3]徐曉光,葉宏.分區(qū)間通信在航空電子系統(tǒng)中的設(shè)計(jì)與實(shí)現(xiàn)[J].航空計(jì)算技術(shù),2005,35(1):45-47,58.XU Xiao-guang,YE Hong.The design and implementation of inter-partition communication in avionics systems[J].Aeronautical Computing Technique,2005,35(1):45-47,58.

      [4]ARINC.Specification 653-1,avionics application software standard interface[S].2003.

      [5]Rushby J.Partitioning in avionics architectures requirements mechanisms and assurance[R].NASA,2000.

      [6]葛仁北.系統(tǒng)調(diào)用與操作系統(tǒng)安全[J].計(jì)算機(jī)工程與應(yīng)用,2002(19):97-99.GE Ren-bei.System call and computer operation system security [J].Computer Engineering and Applications,2002(19):97-99.

      猜你喜歡
      體系結(jié)構(gòu)調(diào)用分區(qū)
      上海實(shí)施“分區(qū)封控”
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      浪莎 分區(qū)而治
      基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
      基于粒計(jì)算的武器裝備體系結(jié)構(gòu)超網(wǎng)絡(luò)模型
      作戰(zhàn)體系結(jié)構(gòu)穩(wěn)定性突變分析
      基于DODAF的裝備體系結(jié)構(gòu)設(shè)計(jì)
      基于云計(jì)算的航天器控制系統(tǒng)自組織體系結(jié)構(gòu)
      基于SAGA聚類分析的無功電壓控制分區(qū)
      電測與儀表(2015年8期)2015-04-09 11:50:16
      苏尼特右旗| 石狮市| 神农架林区| 开远市| 苏州市| 孟村| 湟源县| 台湾省| 依安县| 西藏| 济宁市| 林西县| 枣强县| 深州市| 邮箱| 大名县| 长宁县| 资兴市| 玉门市| 黔西| 全椒县| 图片| 株洲县| 德兴市| 龙游县| 宁海县| 英德市| 天镇县| 仙居县| 宽甸| 应用必备| 奈曼旗| 古浪县| 晋州市| 乌兰察布市| 京山县| 富宁县| 蓬安县| 永康市| 望奎县| 福鼎市|