亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)任務(wù)調(diào)度方法

文檔序號(hào):7747824閱讀:233來(lái)源:國(guó)知局
專利名稱:無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)任務(wù)調(diào)度方法
技術(shù)領(lǐng)域
本發(fā)明主要屬于無(wú)線傳感器網(wǎng)絡(luò)系統(tǒng)軟件技術(shù)領(lǐng)域,特指一種應(yīng)用于無(wú)線傳感器網(wǎng)絡(luò)操作系統(tǒng)的搶占式多任務(wù)調(diào)度方法。
背景技術(shù)
無(wú)線傳感器網(wǎng)絡(luò)近年來(lái)已在各個(gè)領(lǐng)域得到了越來(lái)越廣泛的應(yīng)用。無(wú)線傳感器網(wǎng)絡(luò) 通常包括了大量的傳感節(jié)點(diǎn)和少量的基站節(jié)點(diǎn),由前者采集數(shù)據(jù),并以無(wú)線傳輸?shù)姆绞桨l(fā) 送到后者進(jìn)行匯總和分析。傳感節(jié)點(diǎn)通常由傳感器、處理器、無(wú)線通信部件、電源等幾個(gè)部 分組成。其中處理器作為整個(gè)傳感節(jié)點(diǎn)的核心,一般采用價(jià)格、能耗均較低的單片機(jī),以降 低成本、減小體積,并且能夠用普通干電池驅(qū)動(dòng),便于大規(guī)模部署。作為一種典型的傳感節(jié) 點(diǎn),美國(guó)的Crossbow公司制造的MICA2節(jié)點(diǎn)采用8位的ATMegal28L單片機(jī)作為處理器,不 支持特權(quán)指令、虛地址保護(hù)等現(xiàn)代微處理器的常見功能。隨著無(wú)線傳感器網(wǎng)絡(luò)的深入應(yīng)用,其軟件系統(tǒng)日趨復(fù)雜。單一任務(wù)的應(yīng)用程序在 很多情況下已經(jīng)很難滿足要求,需要有傳感節(jié)點(diǎn)專用的操作系統(tǒng),支持多任務(wù)并發(fā)執(zhí)行。比 如一個(gè)傳感節(jié)點(diǎn)可能既需要執(zhí)行環(huán)境監(jiān)測(cè)的任務(wù),同時(shí)還要對(duì)傳感器網(wǎng)絡(luò)自身的連通程度 進(jìn)行監(jiān)測(cè),兩個(gè)任務(wù)相互獨(dú)立,不能彼此影響。在這種情況下,無(wú)線傳感器網(wǎng)絡(luò)中硬件的簡(jiǎn)單性和軟件的復(fù)雜性形成了矛盾。傳 統(tǒng)操作系統(tǒng)能夠很好的支持搶占式多任務(wù)調(diào)度,但需要通過(guò)硬件支持,確保時(shí)鐘中斷不被 屏蔽,從而能夠定期執(zhí)行調(diào)度程序。而傳感節(jié)點(diǎn)的處理器過(guò)于簡(jiǎn)單,傳統(tǒng)操作系統(tǒng)(包括 VxWorks等嵌入式操作系統(tǒng))中常用的技術(shù)都不能直接應(yīng)用于無(wú)線傳感器網(wǎng)絡(luò),或者即使 采用傳統(tǒng)技術(shù),也具有較大的局限性。TinyOS (http://www. tinyos. net)是目前在無(wú)線傳感器網(wǎng)絡(luò)中應(yīng)用最廣泛的專用 操作系統(tǒng)。TinyOS通過(guò)在編程語(yǔ)言層面上的封裝,隱藏了多種硬件平臺(tái)的細(xì)節(jié),大大簡(jiǎn)化了 無(wú)線傳感器網(wǎng)絡(luò)應(yīng)用程序開發(fā)的難度。但考慮到傳感節(jié)點(diǎn)的硬件限制,TinyOS的任務(wù)調(diào)度 是非搶占式的,每個(gè)任務(wù)必須在恰當(dāng)?shù)臅r(shí)候主動(dòng)讓出執(zhí)行權(quán),否則其他任務(wù)無(wú)法得到執(zhí)行。 這樣簡(jiǎn)單的多任務(wù)模型僅能滿足最基本的要求,對(duì)于較復(fù)雜的應(yīng)用,會(huì)大大增加程序開發(fā) 人員的負(fù)擔(dān)。C. Duffy, U. Roedig, J. Herbert, et al. Adding preemption to TinyOS. InProceedings of the 4th workshop on Embedded networked sensors, pages88-92. 2007.由于TinyOS的不足,這篇論文試圖在TinyOS的基礎(chǔ)上增加搶占式調(diào)度的功能,各 個(gè)任務(wù)可以有不同的優(yōu)先級(jí),優(yōu)先級(jí)較高的任務(wù)能夠搶占優(yōu)先級(jí)較低的任務(wù),但優(yōu)先級(jí)最 高的任務(wù)仍然無(wú)法被搶占,如果這樣的任務(wù)不主動(dòng)讓出執(zhí)行權(quán),其他任務(wù)仍然無(wú)法得到執(zhí) 行。S. Bhatti, J. Carlson, H.Dai, et al. MANTIS OS :an embeddedmultithreaded operating system for wireless micro sensor platforms.In MobileNetworkApplications. 10(4) :563_579,2005.A. Dunkels, B. Gronval 1, and Τ. Voigt. Contiki-a lightweight and flexibleoperating system for tiny networked sensors. In Proceedings of the 29thAnnual IEEE International Conference on Local Computer Networks, pages455-462. 2004.A . Eswaran,A . Rowe,and R . Rajkumar. Nano-RK A η energy-awareresource-centric RTOS for sensor networks. In Proceedings of the 26th IEEEInternational Real-Time Systems Symposium, pages 256—265,2005.H. Cha,S. Choi,I. Jung,H. Kim, et al. RETOS :resilient,expandable, andthreaded operating system for wireless sensor networks. In Proceedings ofthe 6th international conference on Information processing in sensornetworks,pages 148-157. ACM, 2007.上述幾篇論文從不同的角度,設(shè)計(jì)并實(shí)現(xiàn)了 MANTIS OS等幾種支持搶占式多任務(wù)的無(wú)線傳感器網(wǎng)絡(luò)專用操作系統(tǒng),但其多任務(wù)的實(shí)現(xiàn)方式都釆用了與傳統(tǒng)計(jì)算機(jī)類似的技 術(shù),即依靠時(shí)鐘中斷執(zhí)行調(diào)度程序,并且假設(shè)應(yīng)用程序不會(huì)屏蔽中斷。而目前很多傳感器網(wǎng) 絡(luò)應(yīng)用程序恰恰需要依靠屏蔽中斷來(lái)確保獨(dú)占式訪問硬件,不能滿足這一基本假設(shè)。也就 是說(shuō),由于硬件限制,傳統(tǒng)操作系統(tǒng)中的技術(shù)即使應(yīng)用于傳感節(jié)點(diǎn)中,仍然存在難以彌補(bǔ)的 缺陷。Lin Gu and John A. Stankovic. t-kernel -providing reliable OS support towireless sensor networks. In Proceedings of the 4th international conferenceon embedded networked sensor systems, pages 1-14. ACM,2006這篇論文采用代碼翻譯技術(shù)實(shí)現(xiàn)面向傳感節(jié)點(diǎn)的任務(wù)調(diào)度方法,操作系統(tǒng)在應(yīng)用 程序被傳感節(jié)點(diǎn)加載后,對(duì)關(guān)鍵指令進(jìn)行翻譯,確保操作系統(tǒng)能夠隨時(shí)搶占應(yīng)用程序的執(zhí) 行,并且大多數(shù)非關(guān)鍵指令的執(zhí)行仍然不受影響,從而提高了速度。但傳感節(jié)點(diǎn)的硬件過(guò)于 簡(jiǎn)單,使得其翻譯能力受限,難以進(jìn)行全局分析和優(yōu)化。因此只能令操作系統(tǒng)搶占應(yīng)用程序 的執(zhí)行,而不能實(shí)現(xiàn)真正的搶占式多任務(wù)調(diào)度。P. Levis and David Culler· Mate a virtual machine for tiny networkedsensors. In Proceedings of the IOth international conference on ArchitecturalSupport for Programming Languages and Operating Systems. 2002.這篇論文采用了語(yǔ)言級(jí)虛擬機(jī)的方法,設(shè)計(jì)了一套虛擬指令集,并把應(yīng)用程序全 部編譯為使用該指令集的二進(jìn)制代碼,通過(guò)解釋執(zhí)行上述代碼,能夠確保應(yīng)用程序的執(zhí)行 始終受到操作系統(tǒng)的直接控制。但這種逐指令解釋的方法嚴(yán)重影響了執(zhí)行性能,實(shí)驗(yàn)表明, 應(yīng)用程序該操作系統(tǒng)中執(zhí)行的速度比一般的傳感節(jié)點(diǎn)專用操作系統(tǒng)慢兩個(gè)數(shù)量級(jí)以上。

發(fā)明內(nèi)容
本發(fā)明的技術(shù)解決問題是克服現(xiàn)有技術(shù)的不足,提供一種無(wú)線傳感器網(wǎng)絡(luò)專用 操作系統(tǒng)中的任務(wù)調(diào)度方法,在傳感節(jié)點(diǎn)這樣的硬件條件下,實(shí)現(xiàn)類似于傳統(tǒng)操作系統(tǒng)的 分時(shí)、并發(fā)、搶占式多任務(wù)調(diào)度功能。每個(gè)任務(wù)在執(zhí)行時(shí)有獨(dú)立的時(shí)間片,時(shí)間片信息由操 作系統(tǒng)進(jìn)行維護(hù),任務(wù)無(wú)需主動(dòng)讓出執(zhí)行權(quán),操作系統(tǒng)自動(dòng)將時(shí)間片用完的任務(wù)掛起,并切換到其他任務(wù),從而滿足應(yīng)用程序的多任務(wù)需求。本發(fā)明的技術(shù)解決方案是無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)任務(wù)調(diào)度方法,該方法基于無(wú)線傳感器網(wǎng)絡(luò)專用操作系統(tǒng)實(shí)現(xiàn),所述的專用操作系統(tǒng)包括一種二進(jìn)制代碼翻譯工具和一種 操作系統(tǒng)內(nèi)核,其中二進(jìn)制代碼翻譯工具運(yùn)行在基站節(jié)點(diǎn)上,提供對(duì)應(yīng)用程序的預(yù)處理;操 作系統(tǒng)內(nèi)核運(yùn)行在傳感節(jié)點(diǎn)上,提供一系列內(nèi)核服務(wù);兩者共同作用,實(shí)現(xiàn)傳感節(jié)點(diǎn)中的搶 占式多任務(wù)調(diào)度;其主要步驟如下(1)對(duì)無(wú)線傳感器網(wǎng)絡(luò)應(yīng)用程序進(jìn)行編譯,生成二進(jìn)制執(zhí)行代碼和符號(hào)表;(2)將上述生成的二進(jìn)制執(zhí)行代碼和符號(hào)表集中到基站節(jié)點(diǎn)上進(jìn)行代碼分析和翻 譯,所述的代碼分析和翻譯過(guò)程如下(2. 1) 二進(jìn)制代碼翻譯工具通過(guò)分析符號(hào)表,識(shí)別每個(gè)應(yīng)用程序所包含的二進(jìn)制 執(zhí)行代碼和內(nèi)聯(lián)數(shù)據(jù),并對(duì)二進(jìn)制執(zhí)行代碼和內(nèi)聯(lián)數(shù)據(jù)進(jìn)行分離;(2. 2)對(duì)二進(jìn)制執(zhí)行代碼進(jìn)行反編譯,掃描其指令序列,識(shí)別所有可能改變CPU執(zhí) 行流程的敏感指令,包括跳轉(zhuǎn)和調(diào)用指令、內(nèi)聯(lián)數(shù)據(jù)讀寫指令、休眠指令和中斷指令,并將 上述敏感指令修改為調(diào)用內(nèi)核服務(wù)的指令;(3)將經(jīng)過(guò)分析和翻譯的所有應(yīng)用程序與操作系統(tǒng)內(nèi)核共同進(jìn)行鏈接,形成二進(jìn) 制代碼映像文件,并分發(fā)至傳感節(jié)點(diǎn)開始運(yùn)行,運(yùn)行階段包括下列步驟(3. 1)應(yīng)用程序的執(zhí)行實(shí)例被稱為任務(wù),當(dāng)任務(wù)執(zhí)行到被修改的跳轉(zhuǎn)和調(diào)用指令 時(shí),調(diào)用相應(yīng)的內(nèi)核服務(wù),內(nèi)核服務(wù)統(tǒng)計(jì)每個(gè)任務(wù)的時(shí)間片,判斷是否需要切換任務(wù),若不 需要進(jìn)行任務(wù)切換,則恢復(fù)任務(wù)的執(zhí)行,否則,進(jìn)行下一步;(3. 2)內(nèi)核服務(wù)掛起當(dāng)前任務(wù),自動(dòng)保存當(dāng)前任務(wù)的狀態(tài)信息,并恢復(fù)即將執(zhí)行的 任務(wù)的狀態(tài)信息,切換到該任務(wù);(3. 3)當(dāng)任務(wù)執(zhí)行到被修改的內(nèi)聯(lián)數(shù)據(jù)讀寫指令時(shí),內(nèi)核服務(wù)動(dòng)態(tài)計(jì)算其內(nèi)聯(lián)數(shù) 據(jù)的實(shí)際地址,并進(jìn)行讀寫訪問;(3. 4)當(dāng)任務(wù)執(zhí)行到被修改的休眠指令時(shí),內(nèi)核服務(wù)會(huì)掛起當(dāng)前任務(wù),選擇其他任 務(wù)繼續(xù)執(zhí)行,直到?jīng)]有合適的任務(wù)可以運(yùn)行時(shí),將傳感節(jié)點(diǎn)置于休眠狀態(tài);(3. 5)當(dāng)執(zhí)行過(guò)程中發(fā)生中斷時(shí),內(nèi)核服務(wù)依次調(diào)用每個(gè)任務(wù)的中斷處理例程。所述步驟(2)代碼翻譯過(guò)程中內(nèi)存地址產(chǎn)生偏移,采用偏移表記錄翻譯過(guò)程中發(fā) 生偏移的內(nèi)存地址,內(nèi)核服務(wù)在運(yùn)行時(shí),利用查找偏移表的方法計(jì)算偏移前后的程序內(nèi)存 地址對(duì)應(yīng)關(guān)系。所述步驟(3. 1)根據(jù)時(shí)間片輪轉(zhuǎn)的調(diào)度算法統(tǒng)計(jì)每個(gè)任務(wù)的時(shí)間片并判斷是否 需要切換任務(wù)。所述步驟(3. 2)在切換任務(wù)時(shí),內(nèi)核服務(wù)把所有的通用寄存器、必要的I/O寄存器 和其他的任務(wù)狀態(tài)信息一起進(jìn)行保存,并在任務(wù)恢復(fù)執(zhí)行時(shí),對(duì)上述狀態(tài)信息進(jìn)行恢復(fù)。所述步驟(3. 2)利用行程編碼算法對(duì)當(dāng)前任務(wù)的狀態(tài)信息采用環(huán)形隊(duì)列結(jié)構(gòu)進(jìn) 行壓縮保存和恢復(fù)。所述步驟(3. 2)中恢復(fù)即將執(zhí)行的任務(wù)的狀態(tài)信息時(shí),可能造成環(huán)形隊(duì)列不連 續(xù),出現(xiàn)內(nèi)存碎片的問題,需進(jìn)行碎片整理。如果檢測(cè)到內(nèi)存碎片,則評(píng)估將碎片左側(cè)所有狀態(tài)信息右移、或者將右側(cè)所有狀 態(tài)信息左移的代價(jià),并選擇其中代價(jià)較小者進(jìn)行移動(dòng)操作,從而消除碎片。
本發(fā)明的原理是由于傳感節(jié)點(diǎn)的硬件過(guò)于簡(jiǎn)單,使其操作系統(tǒng)的能力受到了很 大限制,無(wú)法對(duì)應(yīng)用程序進(jìn)行有效的翻譯。而通常傳感器網(wǎng)絡(luò)的應(yīng)用程序是由基站節(jié)點(diǎn)分 發(fā)到傳感節(jié)點(diǎn)的,基站節(jié)點(diǎn)一般使用通用計(jì)算機(jī)構(gòu)建,具有豐富的硬件資源。如果基站節(jié)點(diǎn) 在分發(fā)應(yīng)用程序之前即對(duì)其關(guān)鍵代碼進(jìn)行分析和翻譯,傳感節(jié)點(diǎn)僅僅負(fù)責(zé)執(zhí)行翻譯后的代 碼,則能夠在基站節(jié)點(diǎn)上進(jìn)行更徹底的分析,從而實(shí)現(xiàn)更復(fù)雜、更完備的功能。具體來(lái)說(shuō),一 方面基站節(jié)點(diǎn)的內(nèi)存空間足夠大,能夠?qū)鞲泄?jié)點(diǎn)上的應(yīng)用程序一次性載入內(nèi)存,在對(duì)其 中關(guān)鍵指令進(jìn)行修改的過(guò)程中,不會(huì)受到內(nèi)存空間的限制,而且代碼翻譯效率更高。另一 方面,基站節(jié)點(diǎn)上的信息更充分,不僅包括應(yīng)用程序代碼,還可以根據(jù)編譯過(guò)程中產(chǎn)生的符 號(hào)表信息,準(zhǔn)確識(shí)別代碼中的內(nèi)聯(lián)數(shù)據(jù),避免誤修改。通過(guò)上述方法,不僅能實(shí)現(xiàn)完整的搶 占式多任務(wù)調(diào)度等功能,也避免了在傳感節(jié)點(diǎn)上進(jìn)行代碼翻譯帶來(lái)的計(jì)算能力和電能的消耗。
本發(fā)明與現(xiàn)有技術(shù)相比有益效果為(1)利用基站節(jié)點(diǎn)的硬件資源,對(duì)應(yīng)用程序的二進(jìn)制代碼進(jìn)行高效的翻譯,翻譯的 過(guò)程不消耗有限的傳感節(jié)點(diǎn)的資源,翻譯后的代碼在執(zhí)行時(shí)的時(shí)間和空間開銷較小。實(shí)驗(yàn) 表明,與非搶占式調(diào)度的操作系統(tǒng)如TinyOS相比,執(zhí)行效率僅降低不到20%。與全解釋執(zhí) 行的語(yǔ)言級(jí)虛擬機(jī)如Mat6相比,執(zhí)行效率提高1-2個(gè)數(shù)量級(jí)。(2)其他基于代碼翻譯的無(wú)線傳感器網(wǎng)絡(luò)專用操作系統(tǒng)往往需要占用傳感節(jié)點(diǎn)的 資源,對(duì)未修改的代碼進(jìn)行備份,并把內(nèi)聯(lián)數(shù)據(jù)的訪問重定向到未修改的代碼中。本發(fā)明利 用符號(hào)表,在基站節(jié)點(diǎn)上即可準(zhǔn)確區(qū)分執(zhí)行代碼和內(nèi)聯(lián)數(shù)據(jù),從根本上防止誤修改。并能自 動(dòng)處理翻譯前后程序內(nèi)存地址發(fā)生的偏移。(3)采用共享環(huán)形隊(duì)列和行程編碼的方式,以較小的內(nèi)存開銷保存多個(gè)任務(wù)的狀 態(tài),并支持對(duì)環(huán)形隊(duì)列中內(nèi)存碎片的檢測(cè)和整理。實(shí)驗(yàn)表明,在MICA2節(jié)點(diǎn)上僅需大約50 個(gè)字節(jié)即可保存一個(gè)任務(wù)的狀態(tài)。應(yīng)用程序不需要考慮任務(wù)切換和狀態(tài)保存,有效降低了 應(yīng)用程序的開發(fā)難度。(4)全面兼容大量已有的TinyOS應(yīng)用程序,不需要重新開發(fā)。并且支持多個(gè)獨(dú)立 的應(yīng)用程序以分時(shí)的方式在同一個(gè)傳感節(jié)點(diǎn)上執(zhí)行,進(jìn)一步增加了無(wú)線傳感器網(wǎng)絡(luò)應(yīng)用程 序的靈活性。


圖1為目前常見的TinyOS應(yīng)用程序的開發(fā)、發(fā)布和執(zhí)行的總體過(guò)程;圖2為采用本發(fā)明進(jìn)行無(wú)線傳感器網(wǎng)絡(luò)應(yīng)用程序開發(fā)、發(fā)布和執(zhí)行的總體過(guò)程;圖3為本發(fā)明基站節(jié)點(diǎn)將應(yīng)用程序中的關(guān)鍵指令修改為調(diào)用內(nèi)核服務(wù),從而實(shí)現(xiàn) 搶占式任務(wù)調(diào)度的示例;圖4為本發(fā)明重新構(gòu)造中斷向量表,由相應(yīng)的內(nèi)核服務(wù)把多個(gè)任務(wù)的中斷處理例 程連接執(zhí)行的過(guò)程;圖5為本發(fā)明采用環(huán)形隊(duì)列保存經(jīng)過(guò)行程編碼的任務(wù)狀態(tài)的過(guò)程。
具體實(shí)施例方式為方便敘述,下面以常用的MICA2傳感節(jié)點(diǎn)為例進(jìn)行說(shuō)明。該節(jié)點(diǎn)采用8位ATMegal28L單片機(jī),其硬件結(jié)構(gòu)的簡(jiǎn)單性使得通用操作系統(tǒng)無(wú)法適用。因此,開源的操作系統(tǒng)和開發(fā)平臺(tái)TinyOS成為了事實(shí)標(biāo)準(zhǔn)。目前的無(wú)線傳感器網(wǎng)絡(luò)應(yīng)用程序大都面向TinyOS 進(jìn)行開發(fā),其過(guò)程大致如下(如圖1所示)(1)利用TinyOS提供的編程環(huán)境,在傳統(tǒng)計(jì)算機(jī)上編寫應(yīng)用程序的源代碼,編譯 后形成二進(jìn)制執(zhí)行代碼。(2)采用無(wú)線傳輸?shù)姆绞剑ㄟ^(guò)基站節(jié)點(diǎn),把二進(jìn)制執(zhí)行代碼分發(fā)到各個(gè)傳感節(jié) 點(diǎn)。如果傳感節(jié)點(diǎn)尚未部署或部署后易于回收,也可以采用硬件編程器將二進(jìn)制執(zhí)行代碼 直接寫入傳感節(jié)點(diǎn)。(3) 二進(jìn)制執(zhí)行代碼在傳感節(jié)點(diǎn)上以獨(dú)占方式執(zhí)行。代碼中包含一個(gè)或多個(gè)輕量 級(jí)的任務(wù)。輕量級(jí)的含義是指任務(wù)可以主動(dòng)讓出執(zhí)行權(quán),但不能被搶占執(zhí)行。任務(wù)在主動(dòng) 讓出執(zhí)行權(quán)的時(shí)候,其狀態(tài)必須由任務(wù)進(jìn)行保存,以備之后再次取得執(zhí)行權(quán)的時(shí)候恢復(fù)狀 態(tài)。由此可見,雖然TinyOS具有諸多優(yōu)點(diǎn),但其任務(wù)調(diào)度功能過(guò)于簡(jiǎn)單,不能滿足無(wú) 線傳感器網(wǎng)絡(luò)應(yīng)用程序日益復(fù)雜的需求。本發(fā)明在無(wú)線傳感器網(wǎng)絡(luò)專用操作系統(tǒng)中,設(shè)計(jì) 一種二進(jìn)制代碼翻譯工具和一種操作系統(tǒng)內(nèi)核,系統(tǒng)運(yùn)行環(huán)境是一個(gè)基于通用計(jì)算機(jī)構(gòu)建 的基站節(jié)點(diǎn)和多個(gè)資源受限的傳感節(jié)點(diǎn)共同組成的無(wú)線傳感器網(wǎng)絡(luò);其中二進(jìn)制代碼翻譯 工具運(yùn)行在基站節(jié)點(diǎn)上,提供對(duì)應(yīng)用程序的預(yù)處理;操作系統(tǒng)內(nèi)核運(yùn)行在傳感節(jié)點(diǎn)上,提供 一系列內(nèi)核服務(wù);利用二進(jìn)制代碼翻譯和操作系統(tǒng)內(nèi)核的配合,使翻譯后的代碼能夠按照 傳統(tǒng)操作系統(tǒng)中的搶占式多任務(wù)調(diào)度方式,以時(shí)間片的方式分時(shí)執(zhí)行,并由操作系統(tǒng)內(nèi)核 提供任務(wù)掛起時(shí)的狀態(tài)保存和任務(wù)恢復(fù)執(zhí)行時(shí)的狀態(tài)恢復(fù)等功能。與現(xiàn)有方式相比,采用本發(fā)明的無(wú)線傳感器網(wǎng)絡(luò)應(yīng)用程序開發(fā)、發(fā)布和執(zhí)行過(guò)程, 具有一定的變化(如圖2所示),如下所述(1)仍然利用TinyOS提供的編程環(huán)境,在傳統(tǒng)計(jì)算機(jī)上編寫應(yīng)用程序的源代碼, 編譯后形成二進(jìn)制執(zhí)行代碼和對(duì)應(yīng)的符號(hào)表。(2)通過(guò)基站節(jié)點(diǎn)向傳感節(jié)點(diǎn)分發(fā)執(zhí)行代碼。但在分發(fā)之前,基站節(jié)點(diǎn)結(jié)合二進(jìn)制 代碼和符號(hào)表進(jìn)行分析,并對(duì)二進(jìn)制代碼進(jìn)行翻譯。(3)翻譯后的代碼和操作系統(tǒng)內(nèi)核(已預(yù)先編譯)進(jìn)行鏈接,形成統(tǒng)一的二進(jìn)制映 像文件,并采用已有的分發(fā)技術(shù),分發(fā)至傳感節(jié)點(diǎn)。(4)翻譯后的代碼在傳感節(jié)點(diǎn)上執(zhí)行時(shí)的實(shí)例即為任務(wù),操作系統(tǒng)內(nèi)核維護(hù)每個(gè) 任務(wù)的時(shí)間片,并以分時(shí)的方式調(diào)度和切換任務(wù)的執(zhí)行。在運(yùn)行階段包括下列步驟(4. 1)當(dāng)任務(wù)執(zhí)行到被修改的跳轉(zhuǎn)和調(diào)用指令時(shí),將會(huì)調(diào)用相應(yīng)的內(nèi)核服務(wù);(4. 2)內(nèi)核服務(wù)按照時(shí)間片輪轉(zhuǎn)的算法統(tǒng)計(jì)每個(gè)任務(wù)的時(shí)間片,并決定是否需要 進(jìn)行任務(wù)切換。如果不需要進(jìn)行任務(wù)切換,則恢復(fù)任務(wù)的執(zhí)行,否則,掛起當(dāng)前任務(wù),并切換 到另一個(gè)任務(wù);(4. 3)操作系統(tǒng)內(nèi)核在切換任務(wù)時(shí),能夠自動(dòng)保存當(dāng)前任務(wù)的狀態(tài)信息,并恢復(fù)即 將執(zhí)行的任務(wù)的狀態(tài)信息;(4. 4)當(dāng)任務(wù)執(zhí)行到被修改的內(nèi)聯(lián)數(shù)據(jù)讀寫指令時(shí),操作系統(tǒng)內(nèi)核會(huì)動(dòng)態(tài)計(jì)算其 內(nèi)聯(lián)數(shù)據(jù)的實(shí)際地址,并進(jìn)行讀寫訪問。(4. 5)當(dāng)任務(wù)執(zhí)行到被修改的休眠指令時(shí),操作系統(tǒng)內(nèi)核將會(huì)掛起當(dāng)前任務(wù),選擇其他任務(wù)繼續(xù)執(zhí)行,直到?jīng)]有合適的任務(wù)可以運(yùn)行時(shí),才會(huì)實(shí)際將傳感節(jié)點(diǎn)置于休眠狀態(tài);(4.6)當(dāng)執(zhí)行過(guò)程中發(fā)生中斷時(shí),操作系統(tǒng)內(nèi)核將會(huì)依次調(diào)用每個(gè)任務(wù)的中斷處
理例程。對(duì)二進(jìn)制代碼進(jìn)行分析和翻譯的具體細(xì)節(jié)如下無(wú)線傳感器網(wǎng)絡(luò)應(yīng)用程序通常會(huì)在編譯時(shí)將所有的常量數(shù)據(jù)直接插入二進(jìn)制執(zhí) 行代碼之中,并與執(zhí)行代碼一起發(fā)布到傳感節(jié)點(diǎn)。我們稱這樣的數(shù)據(jù)為內(nèi)聯(lián)數(shù)據(jù)。編譯完 成后,僅依靠二進(jìn)制執(zhí)行代碼無(wú)法識(shí)別出其中的內(nèi)聯(lián)數(shù)據(jù),而如果把內(nèi)聯(lián)數(shù)據(jù)也當(dāng)作機(jī)器 指令進(jìn)行修改,則有可能破壞其原有內(nèi)容,使程序無(wú)法正常運(yùn)行。對(duì)于這一問題,目前使用 二進(jìn)制代碼翻譯的傳感節(jié)點(diǎn)操作系統(tǒng)通常會(huì)把所有未修改的二進(jìn)制代碼(包括內(nèi)聯(lián)數(shù)據(jù)) 全部復(fù)制一份,并在運(yùn)行時(shí)將對(duì)內(nèi)聯(lián)數(shù)據(jù)的訪問重定向到未經(jīng)修改的二進(jìn)制代碼中。這種 方法需要消耗大量程序內(nèi)存,對(duì)于資源受限的傳感節(jié)點(diǎn)來(lái)說(shuō),往往難以接受。本發(fā)明利用基 站節(jié)點(diǎn)進(jìn)行二進(jìn)制代碼翻譯,由于基站節(jié)點(diǎn)的資源充足,可以在翻譯代碼的同時(shí),分析其對(duì) 應(yīng)的符號(hào)表,從而準(zhǔn)確識(shí)別和分離內(nèi)聯(lián)數(shù)據(jù),避免誤修改。為保證執(zhí)行性能,在二進(jìn)制代碼翻譯的過(guò)程中,代碼中的大部分內(nèi)容并不進(jìn)行修 改。需要修改的內(nèi)容包括(1)跳轉(zhuǎn)和調(diào)用指令包括相對(duì)跳轉(zhuǎn)、直接跳轉(zhuǎn)、間接跳轉(zhuǎn)以及對(duì)應(yīng)的相對(duì)、直接、 間接調(diào)用指令。需要把這些指令修改為一條調(diào)用內(nèi)核服務(wù)的指令,在此內(nèi)核服務(wù)中,會(huì)更新 任務(wù)的時(shí)間片,并根據(jù)時(shí)間片輪轉(zhuǎn)的調(diào)度算法判斷是否需要切換任務(wù)。執(zhí)行完畢上述調(diào)度 邏輯后,將會(huì)跳轉(zhuǎn)到原有的跳轉(zhuǎn)或調(diào)用目標(biāo)地址。如圖3所示。上述時(shí)間片輪轉(zhuǎn)調(diào)度算法 為傳統(tǒng)的調(diào)度算法,為本領(lǐng)域技術(shù)人員的公知常識(shí),這里不再進(jìn)行贅述。(2)內(nèi)聯(lián)數(shù)據(jù)讀寫指令由于程序內(nèi)存地址可能產(chǎn)生偏移,需要對(duì)內(nèi)聯(lián)數(shù)據(jù)讀寫 指令進(jìn)行修改,使其調(diào)用內(nèi)核服務(wù)例程,在運(yùn)行時(shí)計(jì)算和調(diào)整其目標(biāo)地址,具體的偏移產(chǎn)生 原因和計(jì)算過(guò)程在下文中詳述。(3)休眠指令該指令會(huì)將傳感節(jié)點(diǎn)置于休眠狀態(tài),直到發(fā)生中斷的時(shí)候才被喚 醒,以達(dá)到省電的目的。在多任務(wù)系統(tǒng)中,需要把該指令修改為一條向操作系統(tǒng)內(nèi)核主動(dòng)請(qǐng) 求切換其他任務(wù)的調(diào)用指令,直到?jīng)]有合適的任務(wù)可以運(yùn)行時(shí),才會(huì)實(shí)際將傳感節(jié)點(diǎn)置于 休眠狀態(tài)。(4)中斷向量表由于每個(gè)任務(wù)是單獨(dú)開發(fā)和編譯的,其中斷向量表各有不同。需 要重新設(shè)置一個(gè)中斷向量表,把每個(gè)需要處理的中斷都指向相應(yīng)的內(nèi)核服務(wù),在運(yùn)行時(shí)由 內(nèi)核服務(wù)判斷各個(gè)任務(wù)的中斷處理例程是否存在、是否打開,并依次調(diào)用相應(yīng)的中斷處理 例程。如圖4所示,圖中ISR代表中斷處理例程(Interrupt Service Routine)。值得注意的是,上述二進(jìn)制代碼翻譯的過(guò)程可能會(huì)導(dǎo)致程序內(nèi)存地址產(chǎn)生偏移。 偏移源于兩個(gè)方面一方面,由于每個(gè)任務(wù)都是獨(dú)立編譯的,編譯器總是為其分配從程序內(nèi) 存的起始地址開始的空間,而實(shí)際上,在多任務(wù)環(huán)境中需要對(duì)各個(gè)任務(wù)所占用的程序內(nèi)存 進(jìn)行調(diào)整,使其互不交叉。另一方面,由于代碼翻譯時(shí)會(huì)將一條指令替換為保存和恢復(fù)寄存 器、調(diào)用內(nèi)核服務(wù)等多條指令,導(dǎo)致程序內(nèi)存占用量變大,從而令后續(xù)指令產(chǎn)生偏移。由于程序內(nèi)存地址產(chǎn)生偏移,對(duì)于操作系統(tǒng)內(nèi)核來(lái)說(shuō),需要在執(zhí)行內(nèi)聯(lián)數(shù)據(jù)讀寫 指令,以及間接跳轉(zhuǎn)指令時(shí),計(jì)算偏移前后的程序內(nèi)存地址對(duì)應(yīng)關(guān)系。為了使偏移規(guī)整化,從而便于計(jì)算,本發(fā)明在修改指令時(shí),會(huì)將保存和恢復(fù)寄存器等程序邏輯移至程序內(nèi)存末端,并把被修改的指令替換為一個(gè)調(diào)用上述程序邏輯的指令,如圖3所示。對(duì)于使用 ATMegal28L單片機(jī)的MICA2傳感節(jié)點(diǎn),被修改的指令通常占用2個(gè)字節(jié),而修改后的調(diào)用指 令需要占用4個(gè)字節(jié),因此仍然會(huì)產(chǎn)生2個(gè)字節(jié)的偏移,但由于偏移量總是2個(gè)字節(jié),其計(jì) 算過(guò)程可以大大簡(jiǎn)化。本發(fā)明將每個(gè)發(fā)生偏移的地址按順序依次記錄下來(lái),稱為偏移表。對(duì) 于任意程序內(nèi)存地址,其偏移量總是相當(dāng)于該地址在偏移表中所處位置,乘以每次偏移的2 個(gè)字節(jié)。通過(guò)對(duì)順序的偏移表進(jìn)行二分查找,能夠快速計(jì)算某個(gè)地址在偏移表中的位置,進(jìn) 而計(jì)算出其偏移后的地址。操作系統(tǒng)內(nèi)核與經(jīng)過(guò)翻譯的應(yīng)用程序在傳感節(jié)點(diǎn)上運(yùn)行的細(xì)節(jié)如下對(duì)于搶占式任務(wù)調(diào)度來(lái)說(shuō),應(yīng)用程序并不負(fù)責(zé)保存其執(zhí)行狀態(tài),而需要操作系統(tǒng) 內(nèi)核在任務(wù)切換的時(shí)候進(jìn)行保存和恢復(fù)。執(zhí)行狀態(tài)包括通用寄存器、I/O寄存器和其他的 狀態(tài)信息,對(duì)于采用ATMegal28L單片機(jī)的MICA2傳感節(jié)點(diǎn)來(lái)說(shuō),這些信息總共需約90-100 字節(jié)來(lái)保存,而傳感節(jié)點(diǎn)僅有4KB數(shù)據(jù)內(nèi)存。如果在一個(gè)傳感節(jié)點(diǎn)上并發(fā)執(zhí)行6個(gè)任務(wù), 其執(zhí)行狀態(tài)就需要占用大約14%的數(shù)據(jù)內(nèi)存,這對(duì)于資源受限的傳感節(jié)點(diǎn)來(lái)說(shuō)是難以接受 的。本發(fā)明采用基本的行程編碼算法對(duì)任務(wù)的執(zhí)行狀態(tài)進(jìn)行壓縮保存,實(shí)踐表明,對(duì)于大部 分應(yīng)用程序其壓縮率均可達(dá)到50%左右,因而降低了內(nèi)存開銷。但是,采用壓縮方式保存任務(wù)狀態(tài),也會(huì)由于壓縮率的不同,導(dǎo)致每個(gè)任務(wù)的狀態(tài) 大小不一,無(wú)法為其分配固定大小的存儲(chǔ)空間。因此,本發(fā)明設(shè)計(jì)了一種環(huán)形隊(duì)列結(jié)構(gòu)對(duì)其 進(jìn)行保存,該結(jié)構(gòu)為所有任務(wù)狀態(tài)分配統(tǒng)一的、共享的存儲(chǔ)空間,并由系統(tǒng)內(nèi)核維護(hù)每個(gè)任 務(wù)的狀態(tài)在隊(duì)列中的保存位置。當(dāng)任務(wù)切換時(shí),將被掛起的任務(wù)的狀態(tài)保存在隊(duì)列尾,同時(shí) 將需要執(zhí)行的任務(wù)的狀態(tài)從隊(duì)列中取出。由于壓縮率的不同,也有可能出現(xiàn)環(huán)形隊(duì)列的空 間不足,無(wú)法容納全部任務(wù)的狀態(tài)信息的情況。這時(shí),操作系統(tǒng)內(nèi)核將自動(dòng)結(jié)束當(dāng)前任務(wù), 保證其他任務(wù)仍然能夠正常運(yùn)行。本發(fā)明在現(xiàn)有的實(shí)現(xiàn)過(guò)程中采用了最基本的時(shí)間片輪轉(zhuǎn)調(diào)度算法,即為每個(gè)任務(wù) 分配固定長(zhǎng)度的執(zhí)行時(shí)間片,并按照固定的順序輪流執(zhí)行。對(duì)于這種調(diào)度算法來(lái)說(shuō),在任務(wù) 切換時(shí),將要執(zhí)行的任務(wù)的狀態(tài)總是位于隊(duì)列頭部。但是,根據(jù)實(shí)際需求,本發(fā)明也可以采 用其他調(diào)度算法(例如帶優(yōu)先級(jí)的時(shí)間片輪轉(zhuǎn)調(diào)度算法等等),此時(shí)可能出現(xiàn)將要執(zhí)行的 任務(wù)的狀態(tài)不在隊(duì)列頭部的情況,進(jìn)而導(dǎo)致環(huán)形隊(duì)列中所保存的任務(wù)狀態(tài)信息不連續(xù),出 現(xiàn)難以利用的“碎片”,如圖5所示。為了解決這一問題,本發(fā)明在操作系統(tǒng)內(nèi)核中設(shè)計(jì)了相 應(yīng)的碎片檢測(cè)和整理機(jī)制,當(dāng)任務(wù)的狀態(tài)信息從環(huán)形隊(duì)列中恢復(fù)的時(shí)候,操作系統(tǒng)內(nèi)核會(huì) 檢測(cè)其左右兩端是否有其他任務(wù)的狀態(tài)信息,如果檢測(cè)到,則評(píng)估將左側(cè)所有狀態(tài)信息右 移、或者將右側(cè)所有狀態(tài)信息左移的代價(jià),并選擇其中代價(jià)較小者進(jìn)行移動(dòng)操作,以消除環(huán) 形隊(duì)列中的碎片。本發(fā)明未詳細(xì)說(shuō)明部分屬于本領(lǐng)域技術(shù)人員公知常識(shí)。
權(quán)利要求
無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)任務(wù)調(diào)度方法,其特征在于該方法基于無(wú)線傳感器網(wǎng)絡(luò)專用操作系統(tǒng)實(shí)現(xiàn),所述的專用操作系統(tǒng)包括一種二進(jìn)制代碼翻譯工具和一種操作系統(tǒng)內(nèi)核,其中二進(jìn)制代碼翻譯工具運(yùn)行在基站節(jié)點(diǎn)上,提供對(duì)應(yīng)用程序的預(yù)處理;操作系統(tǒng)內(nèi)核運(yùn)行在傳感節(jié)點(diǎn)上,提供一系列內(nèi)核服務(wù);兩者共同作用,實(shí)現(xiàn)傳感節(jié)點(diǎn)中的搶占式多任務(wù)調(diào)度;其主要步驟如下(1)對(duì)無(wú)線傳感器網(wǎng)絡(luò)應(yīng)用程序進(jìn)行編譯,生成二進(jìn)制執(zhí)行代碼和符號(hào)表;(2)將上述生成的二進(jìn)制執(zhí)行代碼和符號(hào)表集中到基站節(jié)點(diǎn)上進(jìn)行代碼分析和翻譯,所述的代碼分析和翻譯過(guò)程如下(2.1)二進(jìn)制代碼翻譯工具通過(guò)分析符號(hào)表,識(shí)別每個(gè)應(yīng)用程序所包含的二進(jìn)制執(zhí)行代碼和內(nèi)聯(lián)數(shù)據(jù),并對(duì)二進(jìn)制執(zhí)行代碼和內(nèi)聯(lián)數(shù)據(jù)進(jìn)行分離;(2.2)對(duì)二進(jìn)制執(zhí)行代碼進(jìn)行反編譯,掃描其指令序列,識(shí)別所有可能改變CPU執(zhí)行流程的敏感指令,包括跳轉(zhuǎn)和調(diào)用指令、內(nèi)聯(lián)數(shù)據(jù)讀寫指令、休眠指令和中斷指令,并將上述敏感指令修改為調(diào)用內(nèi)核服務(wù)的指令;(3)將經(jīng)過(guò)分析和翻譯的所有應(yīng)用程序與操作系統(tǒng)內(nèi)核共同進(jìn)行鏈接,形成二進(jìn)制代碼映像文件,并分發(fā)至傳感節(jié)點(diǎn)開始運(yùn)行,運(yùn)行階段包括下列步驟(3.1)應(yīng)用程序的執(zhí)行實(shí)例被稱為任務(wù),當(dāng)任務(wù)執(zhí)行到被修改的跳轉(zhuǎn)和調(diào)用指令時(shí),調(diào)用相應(yīng)的內(nèi)核服務(wù),內(nèi)核服務(wù)統(tǒng)計(jì)每個(gè)任務(wù)的時(shí)間片,判斷是否需要切換任務(wù),若不需要進(jìn)行任務(wù)切換,則恢復(fù)任務(wù)的執(zhí)行,否則,進(jìn)行下一步;(3.2)內(nèi)核服務(wù)掛起當(dāng)前任務(wù),自動(dòng)保存當(dāng)前任務(wù)的狀態(tài)信息,并恢復(fù)即將執(zhí)行的任務(wù)的狀態(tài)信息,切換到該任務(wù);(3.3)當(dāng)任務(wù)執(zhí)行到被修改的內(nèi)聯(lián)數(shù)據(jù)讀寫指令時(shí),內(nèi)核服務(wù)動(dòng)態(tài)計(jì)算其內(nèi)聯(lián)數(shù)據(jù)的實(shí)際地址,并進(jìn)行讀寫訪問;(3.4)當(dāng)任務(wù)執(zhí)行到被修改的休眠指令時(shí),內(nèi)核服務(wù)會(huì)掛起當(dāng)前任務(wù),選擇其他任務(wù)繼續(xù)執(zhí)行,直到?jīng)]有合適的任務(wù)可以運(yùn)行時(shí),將傳感節(jié)點(diǎn)置于休眠狀態(tài);(3.5)當(dāng)執(zhí)行過(guò)程中發(fā)生中斷時(shí),內(nèi)核服務(wù)依次調(diào)用每個(gè)任務(wù)的中斷處理例程。
2.根據(jù)權(quán)利要求1所述的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)任務(wù)調(diào)度方法,其特征在于所述步驟 (2)代碼翻譯過(guò)程中內(nèi)存地址產(chǎn)生偏移,采用偏移表記錄翻譯過(guò)程中發(fā)生偏移的內(nèi)存地址, 內(nèi)核服務(wù)在運(yùn)行時(shí),利用查找偏移表的方法計(jì)算偏移前后的程序內(nèi)存地址對(duì)應(yīng)關(guān)系。
3.根據(jù)權(quán)利要求1所述的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)任務(wù)調(diào)度方法,其特征在于所述步驟 (3. 1)根據(jù)時(shí)間片輪轉(zhuǎn)的調(diào)度算法統(tǒng)計(jì)每個(gè)任務(wù)的時(shí)間片并判斷是否需要切換任務(wù)。
4.根據(jù)權(quán)利要求1所述的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)任務(wù)調(diào)度方法,其特征在于所述步驟 (3. 2)在切換任務(wù)時(shí),內(nèi)核服務(wù)把所有的通用寄存器、必要的I/O寄存器和其他的任務(wù)狀態(tài) 信息一起進(jìn)行保存,并在任務(wù)恢復(fù)執(zhí)行時(shí),對(duì)上述狀態(tài)信息進(jìn)行恢復(fù)。
5.根據(jù)權(quán)利要求1所述的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)任務(wù)調(diào)度方法,其特征在于所述步驟 (3. 2)利用行程編碼算法對(duì)當(dāng)前任務(wù)的狀態(tài)信息采用環(huán)形隊(duì)列結(jié)構(gòu)進(jìn)行壓縮保存和恢復(fù)。
6.根據(jù)權(quán)利要求1所述的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)任務(wù)調(diào)度方法,其特征在于所述步驟 (3. 2)中恢復(fù)即將執(zhí)行的任務(wù)的狀態(tài)信息時(shí),可能造成環(huán)形隊(duì)列不連續(xù),出現(xiàn)內(nèi)存碎片的問 題,需進(jìn)行碎片整理。
7.根據(jù)權(quán)利要求6所述的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)任務(wù)調(diào)度方法,其特征在于如果檢測(cè)到內(nèi)存碎片,則評(píng)估將碎片左側(cè)所有狀態(tài)信息右移、或者將右側(cè)所有狀態(tài)信息左移的代價(jià),并選擇其中代價(jià)較小者進(jìn)行移動(dòng)操作,從而消除碎片。
全文摘要
無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)任務(wù)調(diào)度方法,該方法基于無(wú)線傳感器網(wǎng)絡(luò)專用操作系統(tǒng)實(shí)現(xiàn),所述的專用操作系統(tǒng)包括一種二進(jìn)制代碼翻譯工具和一種操作系統(tǒng)內(nèi)核,其中二進(jìn)制代碼翻譯工具運(yùn)行在基站節(jié)點(diǎn)上,提供對(duì)應(yīng)用程序的預(yù)處理;操作系統(tǒng)內(nèi)核運(yùn)行在傳感節(jié)點(diǎn)上,提供一系列內(nèi)核服務(wù);兩者共同作用,實(shí)現(xiàn)傳感節(jié)點(diǎn)中的搶占式多任務(wù)調(diào)度;本發(fā)明克服現(xiàn)有技術(shù)的不足,在傳感節(jié)點(diǎn)這樣的硬件條件下,實(shí)現(xiàn)類似于傳統(tǒng)操作系統(tǒng)的分時(shí)、并發(fā)、搶占式多任務(wù)調(diào)度功能。每個(gè)任務(wù)在執(zhí)行時(shí)有獨(dú)立的時(shí)間片,時(shí)間片信息由操作系統(tǒng)進(jìn)行維護(hù),任務(wù)無(wú)需主動(dòng)讓出執(zhí)行權(quán),操作系統(tǒng)自動(dòng)將時(shí)間片用完的任務(wù)掛起,并切換到其他任務(wù),從而滿足應(yīng)用程序的多任務(wù)需求。
文檔編號(hào)H04W84/18GK101848549SQ201010163590
公開日2010年9月29日 申請(qǐng)日期2010年4月29日 優(yōu)先權(quán)日2010年4月29日
發(fā)明者盧錫城, 張一鳴, 彭宇行, 徐傳福, 李東升, 王勇獻(xiàn), 王意潔, 田甜, 褚瑞, 車永剛, 陳振邦 申請(qǐng)人:中國(guó)人民解放軍國(guó)防科學(xué)技術(shù)大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1