薛楠 張樂(lè)樂(lè) 逯計(jì)劃 胡靖宇
摘要:航電網(wǎng)絡(luò)系統(tǒng)中,每一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)都有其獨(dú)立的嵌入式操作系統(tǒng)和基于此操作系統(tǒng)所開(kāi)發(fā)的驅(qū)動(dòng)軟件以及應(yīng)用,而操作系統(tǒng)又決定了此網(wǎng)絡(luò)節(jié)點(diǎn)相關(guān)驅(qū)動(dòng)軟件和應(yīng)用的開(kāi)發(fā)方式,間接也影響了此網(wǎng)絡(luò)節(jié)點(diǎn)的穩(wěn)定性、可靠性和安全性。因此,在PCI/PCIe驅(qū)動(dòng)軟件設(shè)計(jì)中,操作系統(tǒng)平臺(tái)的選擇和驅(qū)動(dòng)軟件的開(kāi)發(fā)方式是非常重要的。該文介紹了基于嵌入式實(shí)時(shí)多分區(qū)操作系統(tǒng)平臺(tái)下PCI/PCIe驅(qū)動(dòng)軟件的設(shè)計(jì)和開(kāi)發(fā)方式以及驅(qū)動(dòng)軟件的應(yīng)用場(chǎng)景。
關(guān)鍵詞:航電網(wǎng)絡(luò);網(wǎng)絡(luò)總線驅(qū)動(dòng);分區(qū)操作系統(tǒng)
中圖分類(lèi)號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)29-0069-02
1 引言
隨著航空電子技術(shù)的快速發(fā)展,航電網(wǎng)絡(luò)也在不斷創(chuàng)新,規(guī)模和復(fù)雜度也在不斷擴(kuò)充。而整個(gè)航電網(wǎng)絡(luò)是由一個(gè)個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)組成的,網(wǎng)絡(luò)節(jié)點(diǎn)的設(shè)計(jì)標(biāo)準(zhǔn)、應(yīng)用的使用規(guī)范直接影響網(wǎng)絡(luò)節(jié)點(diǎn)自身的穩(wěn)定性、可靠性,也間接影響整個(gè)航電網(wǎng)絡(luò)系統(tǒng)的安全性。一般航電網(wǎng)絡(luò)節(jié)點(diǎn)的設(shè)計(jì)從底層到上層的順序依次是底層硬件相關(guān)層、操作系統(tǒng)服務(wù)層、上層驅(qū)動(dòng)和應(yīng)用層[1]。由于操作系統(tǒng)在航電網(wǎng)絡(luò)節(jié)點(diǎn)中的位置介于底層硬件層和上層軟件層之間,所以操作系統(tǒng)的穩(wěn)定性是航電網(wǎng)絡(luò)節(jié)點(diǎn)乃至整個(gè)航電網(wǎng)絡(luò)系統(tǒng)穩(wěn)定性的前提。
機(jī)載嵌入式操作系統(tǒng)分為非分區(qū)操作系統(tǒng)和分區(qū)操作系統(tǒng),其中非分區(qū)操作系統(tǒng)相當(dāng)于沒(méi)有分區(qū)層只有內(nèi)核層。若要在軟件設(shè)計(jì)上實(shí)現(xiàn)不同功能模塊的獨(dú)立性,需將航電網(wǎng)絡(luò)系統(tǒng)綜合化和模塊化,系統(tǒng)設(shè)計(jì)需要采用嵌入式實(shí)時(shí)多分區(qū)操作系統(tǒng),保證應(yīng)用軟件在不同應(yīng)用模塊下實(shí)現(xiàn)時(shí)間和空間上的隔離性。
2 分區(qū)操作系統(tǒng)介紹
根據(jù)美國(guó)航電委員會(huì)制定的ARINC653標(biāo)準(zhǔn),規(guī)定了分區(qū)操作系統(tǒng)應(yīng)用程序接口標(biāo)準(zhǔn),并且提出了分區(qū)操作系統(tǒng)必須具有的三層軟件結(jié)構(gòu):應(yīng)用軟件層、操作系統(tǒng)支持層和硬件支持層。其中航電網(wǎng)絡(luò)節(jié)點(diǎn)的應(yīng)用軟件在應(yīng)用軟件層實(shí)現(xiàn),且運(yùn)行在對(duì)應(yīng)的應(yīng)用分區(qū)中,時(shí)間和空間受限于分區(qū)[1]。不同功能的應(yīng)用運(yùn)行在對(duì)應(yīng)分區(qū)中,各個(gè)分區(qū)實(shí)現(xiàn)了時(shí)間和空間的隔離,保證了使用獨(dú)立性和安全性。
操作系統(tǒng)本身也分為分區(qū)操作系統(tǒng)和核心操作系統(tǒng),其中分區(qū)操作系統(tǒng)存在于分區(qū)中,管理分區(qū)內(nèi)部的數(shù)據(jù)資源,包括分區(qū)進(jìn)程管理和相關(guān)調(diào)度等;核心操作系統(tǒng)駐留于內(nèi)核中,主要負(fù)責(zé)分區(qū)之間的通信、分區(qū)調(diào)度管理、分區(qū)故障監(jiān)控、分區(qū)資源管理等功能[1]。應(yīng)用軟件在分區(qū)操作系統(tǒng)和核心操作系統(tǒng)共同協(xié)作下完成其在航電網(wǎng)絡(luò)系統(tǒng)中的功能,核心操作系統(tǒng)的代碼和驅(qū)動(dòng)程序運(yùn)行在系統(tǒng)層,分區(qū)操作系統(tǒng)的代碼、驅(qū)動(dòng)程序和用戶的應(yīng)用軟件運(yùn)行在上層[1,2]。不同于非分區(qū)操作系統(tǒng),基于分區(qū)操作系統(tǒng)下的驅(qū)動(dòng)軟件設(shè)計(jì)在地址訪問(wèn)方面比較復(fù)雜,且一般情況下分區(qū)層和核心層之間的訪問(wèn)有限制,實(shí)現(xiàn)數(shù)據(jù)的隔離性和安全性。嵌入式實(shí)時(shí)多分區(qū)操作系統(tǒng)的架構(gòu)如圖1所示:
3 驅(qū)動(dòng)軟件設(shè)計(jì)實(shí)現(xiàn)
3.1 分區(qū)層與核心層訪問(wèn)
分區(qū)操作系統(tǒng)為PCI/PCIe設(shè)備驅(qū)動(dòng)軟件開(kāi)發(fā)提供了虛端口、虛分區(qū)、擴(kuò)展系統(tǒng)調(diào)用和設(shè)備管理等方式,本文重點(diǎn)研究基礎(chǔ)擴(kuò)展系統(tǒng)調(diào)用下驅(qū)動(dòng)軟件的開(kāi)發(fā)。在一般的分區(qū)操作系統(tǒng)下,為了安全和保護(hù)數(shù)據(jù),核心層來(lái)管理各個(gè)分區(qū)層,但是分區(qū)層一般不能直接訪問(wèn)核心層。由于分區(qū)層和核心層的訪問(wèn)權(quán)限不同,若用戶應(yīng)用需要調(diào)用核心層的接口,則必須通過(guò)系統(tǒng)調(diào)用功能來(lái)使用核心層的接口。底層硬件將中斷傳至核心層,核心層收到中斷信息后,使用虛中斷的方式將中斷信息從核心層發(fā)至分區(qū)層再告知用戶應(yīng)用進(jìn)行相關(guān)處理,核心層也可以將自身的命令通過(guò)虛中斷方式發(fā)至分區(qū)層通知分區(qū)進(jìn)行相關(guān)處理。如果操作系統(tǒng)配置允許,分區(qū)層中不同分區(qū)之間或者分區(qū)層與核心層之間也可以通過(guò)配置好的共享數(shù)據(jù)區(qū)進(jìn)行數(shù)據(jù)的交互。
3.2驅(qū)動(dòng)軟件分層實(shí)現(xiàn)
鑒于分區(qū)操作系統(tǒng)的特殊性,在此操作系統(tǒng)下PCI/PCIe驅(qū)動(dòng)軟件的設(shè)計(jì)就要考慮到分區(qū)層和核心層兩層關(guān)系。由于用戶應(yīng)用運(yùn)行在分區(qū)層,而驅(qū)動(dòng)軟件本身要調(diào)用核心層操作系統(tǒng)提供的系統(tǒng)接口,所以要在分區(qū)層和核心層都要有驅(qū)動(dòng)軟件的代碼實(shí)現(xiàn),并用系統(tǒng)調(diào)用方式實(shí)現(xiàn)分區(qū)層訪問(wèn)核心層接口,用虛中斷的方式實(shí)現(xiàn)中斷消息從核心層傳遞至分區(qū)層。在兩層驅(qū)動(dòng)軟件的設(shè)計(jì)中,要同時(shí)兼顧分區(qū)操作系統(tǒng)使用的特殊性以及驅(qū)動(dòng)軟件自身的維護(hù)兩個(gè)方面,保證驅(qū)動(dòng)軟件的穩(wěn)定性和安全性。
在分區(qū)層,若用戶應(yīng)用在多個(gè)分區(qū)都使用了驅(qū)動(dòng)軟件所提供的接口對(duì)應(yīng)的功能,那么要在軟件設(shè)計(jì)上就要考慮可以同時(shí)用于多分區(qū)調(diào)用的函數(shù)接口,保證應(yīng)用可以同時(shí)在多個(gè)分區(qū)使用從而來(lái)實(shí)現(xiàn)應(yīng)用的需求[2]。
3.3 驅(qū)動(dòng)軟件地址分配和轉(zhuǎn)換
在非分區(qū)操作系統(tǒng)開(kāi)發(fā)的驅(qū)動(dòng)軟件中,若有兩個(gè)或更多任務(wù)接口調(diào)用同一個(gè)函數(shù),則調(diào)用的是同一個(gè)地址空間中的函數(shù)和對(duì)應(yīng)變量,如果是同時(shí)調(diào)用且需要修改全局變量的值,那么就可能會(huì)產(chǎn)生調(diào)用沖突甚至導(dǎo)致變量?jī)?nèi)容錯(cuò)誤,高度并發(fā)訪問(wèn)處理會(huì)導(dǎo)致嚴(yán)重的資源競(jìng)爭(zhēng)。若在分區(qū)操作系統(tǒng)中實(shí)現(xiàn)并發(fā)調(diào)用同一個(gè)函數(shù)訪問(wèn)同一個(gè)地址,在分區(qū)層看到是使用同一個(gè)邏輯地址,但是對(duì)應(yīng)在物理地址上是不同的,不會(huì)產(chǎn)生調(diào)用沖突。
在分區(qū)操作系統(tǒng)下,開(kāi)發(fā)PCI/PCIe驅(qū)動(dòng)軟件所使用的地址空間包含虛擬地址、物理地址和PCI地址三個(gè)。其中物理地址指的是實(shí)實(shí)在在存在的地址,相當(dāng)于非分區(qū)操作系統(tǒng)中直接可以訪問(wèn)的地址;虛擬地址是在分區(qū)層應(yīng)用看到并可以訪問(wèn)的地址,不是真實(shí)的物理地址,但是和某一塊物理地址空間存在一一對(duì)應(yīng)的關(guān)系,在核心層根據(jù)需要也可能設(shè)計(jì)有核心層的虛擬地址,和真正的物理地址也是一一對(duì)應(yīng)關(guān)系;PCI地址指的是若CPU上面掛接了PCI設(shè)備,PCI設(shè)備要訪問(wèn)CPU內(nèi)存時(shí)所使用的地址空間。根據(jù)三種地址空間的含義,需在光纖網(wǎng)絡(luò)總線驅(qū)動(dòng)軟件設(shè)計(jì)中,針對(duì)不同的地址空間需要進(jìn)行對(duì)應(yīng)的操作處理。分區(qū)層驅(qū)動(dòng)軟件只能操作分區(qū)層虛擬地址,在設(shè)計(jì)核心層驅(qū)動(dòng)軟件時(shí)要進(jìn)行準(zhǔn)確的PCI地址和虛擬地址的轉(zhuǎn)換,才能保證用戶應(yīng)用在使用驅(qū)動(dòng)軟件時(shí)對(duì)CPU內(nèi)存物理地址操作的準(zhǔn)確性,保證網(wǎng)絡(luò)節(jié)點(diǎn)應(yīng)用使用的安全性。
4 應(yīng)用實(shí)例
在航電網(wǎng)絡(luò)設(shè)備當(dāng)中,硬件的設(shè)計(jì)模式?jīng)Q定了驅(qū)動(dòng)軟件中關(guān)于地址空間的分配和訪問(wèn)方式。在使用分區(qū)操作系統(tǒng)的航電網(wǎng)絡(luò)節(jié)點(diǎn)中,使用最多的就是單CPU上面掛接一個(gè)或者幾個(gè)PCI設(shè)備(PCI/PCIe硬件設(shè)備),此時(shí)主機(jī)訪問(wèn)和PCI設(shè)備訪問(wèn)CPU的內(nèi)存地址是一樣的,即都是操作同一個(gè)虛擬地址映射的物理地址,此種硬件結(jié)構(gòu)的訪問(wèn)方式?jīng)Q定了驅(qū)動(dòng)軟件在設(shè)計(jì)中,不需要進(jìn)行地址轉(zhuǎn)換,對(duì)應(yīng)的PCI地址和虛擬地址是同一個(gè)地址。具體內(nèi)存地址訪問(wèn)方式如圖2所示。
另外一種比較復(fù)雜的應(yīng)用情形,就是航電網(wǎng)絡(luò)節(jié)點(diǎn)中有多個(gè)CPU,一個(gè)主CPU上面掛接一個(gè)或者多個(gè)從CPU,PCI設(shè)備掛接在其中某一個(gè)從CPU上面,整體是通過(guò)PCI交換設(shè)備連接的星型物理結(jié)構(gòu)。CPU存儲(chǔ)空間分為IO空間、RAM空間、PCIE配置空間等,其中主CPU的PCIE配置空間給從CPU以及外接PCI設(shè)備分配對(duì)應(yīng)的使用空間,僅當(dāng)?shù)谝粋€(gè)CPU正常運(yùn)行時(shí),才能給其他從CPU以及PCI設(shè)備分配資源,保證其正常運(yùn)行使用,用戶的應(yīng)用軟件運(yùn)行在主CPU之上。這種情況下,PCI設(shè)備的PCI地址就不是驅(qū)動(dòng)軟件里面的虛擬地址了。在光纖網(wǎng)絡(luò)總線驅(qū)動(dòng)軟件的實(shí)現(xiàn)中,必須通過(guò)一層地址轉(zhuǎn)換關(guān)系,才能得到PCI設(shè)備的PCI地址從而實(shí)現(xiàn)PCI設(shè)備訪問(wèn)主CPU分配給它的虛擬地址。此種方式的內(nèi)存地址訪問(wèn)方式如圖3所示:
目前,在航電系統(tǒng)某型號(hào)飛機(jī)某網(wǎng)絡(luò)節(jié)點(diǎn)上正在使用多分區(qū)操作系統(tǒng)的多CPU掛接PCI設(shè)備的硬件結(jié)構(gòu)模式,機(jī)載應(yīng)用和驅(qū)動(dòng)軟件基于此種模式的操作系統(tǒng)和硬件結(jié)構(gòu)進(jìn)行針對(duì)性設(shè)計(jì)。經(jīng)過(guò)長(zhǎng)時(shí)間的測(cè)試和驗(yàn)證,此節(jié)點(diǎn)應(yīng)用功能正常,穩(wěn)定性強(qiáng)。
5 結(jié)束語(yǔ)
嵌入式實(shí)時(shí)多分區(qū)操作系統(tǒng)所應(yīng)用的硬件環(huán)境復(fù)雜,且針對(duì)不同的應(yīng)用環(huán)境驅(qū)動(dòng)軟件的設(shè)計(jì)架構(gòu)也略有不同,要根據(jù)對(duì)應(yīng)的操作系統(tǒng)類(lèi)型、硬件環(huán)境模式以及用戶應(yīng)用的使用方式的不同針對(duì)性地進(jìn)行驅(qū)動(dòng)軟件的開(kāi)發(fā),保證驅(qū)動(dòng)軟件的穩(wěn)定性。在開(kāi)發(fā)驅(qū)動(dòng)軟件時(shí)基于多分區(qū)特性,在多分區(qū)操作系統(tǒng)下進(jìn)行驅(qū)動(dòng)軟件和航電網(wǎng)絡(luò)應(yīng)用程序的開(kāi)發(fā),可以很大程度上提高航電網(wǎng)絡(luò)系統(tǒng)的安全性。
參考文獻(xiàn):
[1] 仝敏,張東.嵌入式實(shí)時(shí)多分區(qū)操作系統(tǒng)兩態(tài)訪問(wèn)的研究[J].航空計(jì)算技術(shù), 2014,44(6): 88-91.
[2] 楊曉寧,曹原. 嵌入式實(shí)時(shí)分區(qū)操作系統(tǒng)中健康監(jiān)控機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代導(dǎo)航, 2013,21(13):101-103.
[3] 徐曉光,折楠,邢亮.分區(qū)操作系統(tǒng)下的BIT 軟件的設(shè)計(jì)[J]. 電子設(shè)計(jì)工程, 2013,21(13):187-190.
【通聯(lián)編輯:代影】