主流嵌入式Linux動態擴展技術比較分析

 隨着嵌入式技術的快速發展和嵌入式設備的普及,嵌入式應用發展的一個關鍵趨勢是從靜態的、固定的系統功能到動態的、可擴展的系統功能。php

       本文主要進行嵌入式Linux系統內核動態擴展技術的討論。首先,介紹嵌入式 Linux系統的發展情況和研究嵌入式Linux 動態擴展性的意義。而後,討論目前幾種主要的核心動態擴展技術,以及各類技術在嵌入式系統上的優缺點。最後,分析嵌入式Linux動態擴展性研究所面臨的挑戰和發展趨勢。
  linux

        引言
  算法

       嵌入式系統是計算機技術、通訊技術、半導體技術、微電子技術、語音圖像數據傳輸技術等先進技術和具體應用對象相結合後的更新換代產品。系統無多餘軟件,硬件亦無多餘存儲器,可靠性高,成本低,體積小,功耗少;可應用於家電、工業、通訊、國防等領域。其產品形態豐富多樣,市場潛力巨大。
  shell

       嵌入式Linux的出現,給整個嵌入式世界帶來了無限生機。Linux具備內核可裁剪、效率高、穩定性好、移植性好、源代碼開放等優勢,還內含了完整的TCP/IP網絡協議棧,很適合在嵌入式領域應用。與傳統的實時操做系統(RTOS)相比,採用嵌入式 Linux這樣開放源碼的操做系統的另一個好處是,Linux開發團體看來會比RTOS的供應商更快地支持新的IP協議和其餘協議。例如,用於 Linux的設備驅動程序要比用於商業操做系統的設備驅動程序多。所以,愈來愈多的公司和我的正在把Linux做爲嵌入式操做系統的首選。
  數據庫

       嵌入式系統因爲其工做環境、位置分佈、與應用系統的結合方式等方面的緣由,在系統的升級、修改方面存在着至關的困難,且費用高。目前大多數嵌入式系統內核只能在必定程度上進行靜態擴展,這意味着修改某些內核屬性值後要從新編譯內核,對普通用戶而言難以實現。通訊的發展使得嵌入式操做系統的動態擴展成爲可能,能夠在遠程控制的基礎上增長嵌入式系統的靈活性,延長嵌入式系統的壽命;同時,因爲嵌入式Linux的應用日益普遍,研究嵌入式Linux的動態擴展具備重要意義。
  編程

       動態擴展是指系統在運行狀態下實現系統的升級和維護。動態擴展技術目前被普遍應用在軟件系統開發的各個領域。組件、可擴展的數據庫系統、主動網等多種技術都是動態擴展技術在各個領域的具體體現。在嵌入式操做系統領域,動態擴展技術研究的主要目標是實現內核抽象的擴展。實現操做系統內核抽象的動態擴展可以提升系統的靈活性、適應性,使系統可以根據應用的需求,提供特定的服務。然而,因爲嵌入式系統硬件資源有限,這對研究嵌入式 Linux系統核心的動態擴展性是一個極大的挑戰。
  安全

       本文主要討論嵌入式Linux系統中內核抽象的動態擴展技術。
  服務器

       一、幾種主要的內核動態擴展技術的分析
  網絡

       當前應用於操做系統中的動態擴展技術主要有四種:微內核技術、可擴展內核技術、解釋器技術/JOS技術和內核下載技術/LKM技術\[1,2\]。這三種技術已經在桌面操做系統的不一樣環境中獲得了充分的應用。嵌入式操做系統及其使用環境具備桌面操做系統所不一樣的特徵,它在性能、地址空間、所需存儲空間和底層訪問頻率等方面的特徵,使得咱們在擴展技術的選擇上須要加以權衡。
  app

       (1)微內核技術
  

       在微內核操做系統中,內核中包括了一些基本內核功能(如建立和刪除任務、任務調度、內存管理和中斷處理等),部分操做系統抽象和關鍵服務(如文件系統、網絡協議棧等),都是在用戶空間運行的。這大大減少了內核的體積,同時也極大地方便了整個系統的升級、維護和移植。系統經過核心到用戶層向上調用服務的方法來爲應用程序提供服務。因爲服務存在於用戶層,用戶可經過修改服務來得到不一樣的行爲,於是也稱爲用戶層擴展技術。因爲全部的應用程序都要利用操做系統提供的API或系統調用,完成內存管理、進程管理、I/O、設備管理等,所以經過在用戶空間監視並截獲某個進程的系統調用,而後將擴展功能代碼插入系統調用中,就能夠擴展Linux操做系統功能。
  

       與內核空間功能擴展相比,在用戶空間擴展安全性更強,對Linux操做系統和應用程序更加透明。用戶層擴展技術的缺點在於,將服務提高到用戶層使程序運行過程當中核心態和用戶態之間的切換和自陷次數增長,致使系統負載增長,系統性能降低。另外,微內核與傳統的嵌入式Linux內核在結構上是徹底不一樣的。在嵌入式Linux中,若是採用該技術來增長系統的動態擴展性能,須要對內核結構從新設計\[2\]。
  

       (2)可擴展內核技術
  

       可擴展內核技術容許用戶應用程序向內核植入(inject)代碼以擴展其功能。因爲被植入的代碼是在覈心態運行,從而避免了微內核技術中的系統性能降低的問題。被植入的代碼是在覈心態運行,須要有一個實時檢查機制來驗證代碼的安全性,保證被植入代碼不會致使系統的崩潰。程步奇等人\[1\]使用軟件故障孤立技術來實現擴展模塊的故障孤立,保證系統不受到擴展模塊的破壞。Bershad等人\[3\]也使用軟件故障孤立技術來限制被植入代碼可訪問的內存地址範圍。代碼安全性檢查無疑增長了系統的負擔,問題產生的根本緣由是那些被植入的擴展性代碼對核心來講是不可信任的。爲了減輕系統的負擔,就須要假設被植入的代碼是安全的、可信任的。
  

       (3)解釋器技術/JOS技術
  

       與文獻\[2\]中提到的JOS(Java OperatingSystem)技術相同,該技術容許開發者用Java語言編寫系統模塊,例如TCP/IP協議棧或文件系統。將這些模塊編譯成類(class)文件,並在系統運行時由JVM(Java VirtualMachine)動態地加載。Liao等人\[4\]在1996年提出,將JVM插入到微內核中,從而可讓用戶編寫Java程序,以擴展內核功能。
  

       解釋器技術是以解釋的方式來執行程序代碼的,比較適合於交互式系統;與編譯器相比,解釋器/JVM在移植時相對簡單;解釋器經過採用中間代碼表示的方法,當代碼長度小於500KB的時候,可執行的中間代碼一般比編譯產生的二進制代碼小,這一點很適合於存儲空間很是有限的嵌入式系統;最後,Java代碼容易維護和編寫,可移植性好,可實現代碼重用。採用解釋器技術的缺點是,中間可執行代碼的執行速度慢。在嵌入式 Linux系統中,內核很大一部分由應用所共享,甚至應用程序自己就是內核的一個線程,執行頻率高,採用解釋器技術會大大下降系統的效率。有些Java平臺採用即時(Just?in?time)編譯技術來改進代碼的執行速度\[2\]。該技術是利用空間來換取時間,所以很難在硬件資源很是有限的嵌入式系統上實現。此外,因爲Java語言的類庫很大,在必定程度上也阻礙了其在資源有限的嵌入式系統中的發展。
  

       (4)內核加載技術/LKM技術
  

       許多桌面操做系統,例如Linux,提供LKM(Loadable KernelModule)來動態擴展它們的內核。當模塊(Module)安裝到內核後就做爲核心的一部分,不進行實時安全檢測,全速運行。在嵌入式 Linux系統中,LKM的主要問題是:存儲模塊須要佔用額外空間以及被加載模塊的安全性。模塊的安全問題能夠經過軟件保護技術來解決\[1\]。
  

       Oikawa等人在1996年提出一種與LKM相似的動態核心模塊(DKMs)技術\[5\]。與LKM同樣,DKMs以文件的形式存儲並能在系統運行過程當中動態地加載和卸載。DKMs由一個用戶層的DKM服務器來管理,並不是由內核來管理。當核心須要某模塊時,由DKM服務器負責把相應的DKM加載;當核心的內存資源緊缺時,由DKM服務器負責卸載一個沒有被使用的DKM。缺點是全部的DKM是存儲在本地系統上的,佔用了大量寶貴的存儲空間。
  

       與Oikawa的方法不一樣,Chang DaWei 等人於2003年提出了OperatingSystemPortalframework(OSP)的方法\[2\]。該方法是將核心模塊存儲在一個資源充足的遠程服務器上,並由服務器端工具OSPortal來管理所存儲的模塊,同時也負責處理客戶端(嵌入式系統內核)發出的請求,按照請求動態的選擇並鏈接模塊,而後經過網絡傳到客戶端。因爲模塊的管理和鏈接都在服務器端,因此對客戶端來講能夠節省大量的資源空間。OS Portal的結構如圖1所示。

                                                                    圖1
                    
  OS Portal的結構一般,內核動態加載模塊的時候,模塊的鏈接工做由內核完成。Chang DaWei的方法的獨特之處在於把模塊鏈接的工做交給服務器端執行,不但下降了對內存空間的需求,也減輕了內核的負擔。

        二、其餘相關研究
  

      (1)基於FPGA的可動態配置的片上系統
  

       FPGA (FieldProgrammable GateArray,現場可編程門陣列)是電子設計領域中最具活力和發展前途的一項技術。FPGA能完成任何數字器件的功能,上至高性能CPU,下至簡單的74電路,均可以用它來實現。FPGA在嵌入式系統中的應用愈來愈普遍。John Williams和NeilBergmann\[6\]用uCLinux做爲操做系統平臺,設計出可動態配置的片上系統(rSoC)。uCLinux從遠程服務器上下載FPGA程序代碼,而後利用shell腳本工具將代碼寫進FPGA芯片,實現系統功能的可動態擴展。
  

      (2)動態更新Linux內核變量的方法
  

        在進行Linux內核嵌入式開發時,常用內核啓動過程當中讀取靜態配置文件內容的方法對內核某些變量進行初始化。當靜態配置文件改動時,只有從新啓動內核才能使新的配置生效。北京科技大學的田玉鳳等人\[7\]經過修改文件. /include/linux/proc_fs.h,從新編譯、安裝新內核後,利用/proc文件系統,可動態改變Linux內核變量。
  

     (3)在用戶空間擴展Linux操做系統功能的方法
  

       與內核空間功能擴展相比,在用戶空間擴展安全性更強,對Linux操做系統和應用程序更加透明。魏東林、盧正鼎等人經過在用戶空間跟蹤截獲系統調用並更改系統調用的行爲來達到擴展操做系統功能的目的\[8\]。從本質上來講,該方法和本文第1部分提到的可擴展內核技術是同樣的。
  

       三、動態擴展技術面臨的挑戰和發展趨勢
  

      (1)高實時性是嵌入式系統的基本要求
  

       因爲Linux是一種通用操做系統,而不是一個真正的實時操做系統,內核不支持事件優先級和搶佔實時特性(2003年末推出的Linux2.6內核實現了必定程度上的可搶佔性),因此,在進行嵌入式Linux系統動態擴展性研究開發時,首要的問題是擴展 Linux的實時性能。系統在進行動態擴展的過程當中,若是擴展的過程時間太長,確定會影響到系統的實時響應,因此要求擴展過程快速完成,例如基於LKM的內核擴展機制。若是模塊加載或替換的時間太長,在規定的時間內不能完成,這對於嵌入式Linux的某些應用來講是不能接受的。
  

      (2)資源有限性是嵌入式系統基本特徵
  

       嵌入式系統無多餘軟件也無多餘硬件存儲器,增長存儲空間意味着成本的上升。在很是有限的存儲空間中要實現快速的內核動態擴展,對研究人員來講是一個極大的挑戰。在桌面PC世界,雖然已經有不少動態擴展系統功能的方法,但在嵌入式世界很難實現。例如Linux系統的LKM機制,若模塊加載過程不經改造,在嵌入式Linux系統中是不能使用的。
  

      (3)期待完善的集成開發環境
  

       一個完整的嵌入式系統的集成開發環境通常須要編譯/鏈接器、內核調試/跟蹤器和集成圖形界面開發平臺。其中的集成圖形界面開發平臺包括編輯器、調試器、軟件仿真器和監視器等。在Linux系統中,具備功能強大的 gcc編譯器工具鏈,使用了基於GNU的調試器 gdb的遠程調試功能,通常由一臺客戶機運行調試程序調試宿主機運行的操做系統內核;在使用遠程開發時還可使用交叉平臺的方式,如在Windows平臺下的調試跟蹤器對Linux的宿主系統做調試。可是,Linux在基於圖形界面的特定系統定製平臺的研究上,與Windows操做系統相比還存在差距。所以,要使嵌入式Linux動態擴展的研究更加方便、快捷,總體集成開發環境還有待提升和完善。
  

       桌面Linux使用LKM技術成功實現了系統功能的動態擴展。嵌入式Linux繼承了桌面Linux絕大部分功能和特性,桌面Linux固有的LKM機制爲嵌入式Linux動態擴展的研究帶來了先天性的優點,可大大節省研究人員的時間和精力。在動態模塊替換方面也有了很大的發展,Chris Walton等人\[9\]經過對二空間拷貝垃圾回收算法進行改進,在2000年提出了一種動態模塊替換的抽象機模型。
  

       基於JOS的動態擴展技術是一個主要發展方向。Java代碼可移植性強,容易維護,在嵌入式系統上頗有發展前途。採用Java技術的另一個好處是可實現代碼重用,在進行嵌入式系統開發時沒必要每次都從零開始。不少研究成果也促進了Java在嵌入式系統上的應用。 DerekRayside等人在2002年提出一種類庫子集選擇方法\[10\]。該方法可讓嵌入式系統中的Java程序在運行時從遠程Java類庫中僅選擇所須要的子集,而後下載到本地系統,從而減少對嵌入式系統存儲空間的需求,解決了因Java語言的類庫太大而阻礙了在嵌入式系統中的應用。
  

        結束語
  

        隨着嵌入式Linux的快速發展和嵌入式Linux設備的普及,人們對可動態擴展的嵌入式Linux的需求愈來愈迫切。目前主要的幾種可動態擴展系統功能的技術,例如微內核技術、JOS技術、LKM技術等,因爲嵌入式系統的存儲空間有限,實時性要求高,在應用到嵌入式Linux系統中時都有所不足。其中,桌面Linux固有的LKM機制爲嵌入式Linux動態擴展的研究帶來了先天性的優點;另外,Java代碼可移植性強,維護容易,在嵌入式系統上頗有發展前途,所以基於JOS的動態擴展技術是另外一個主要發展方向。最後,一個完善的嵌入式Linux集成開發環境是每個開發人員所期待的

參考文獻

      1 程步奇,尹寶林.可動態擴展的嵌入式操做系統\[J\]. 小型微型計算機系統, 2003, 24(2): 216~217       2  Chang DaWei, Chang RueiChuan. OS Protal:an economic approach formaking an embedded kernel extensible\[J\]. The Journal of Systems andSoftware , 2003, 67: 19~30       3 Bershad B N, et al. Extensibility,safety and performance in the SPIN operating system\[A\]. In:Proceedings of the 15th ACM symposium on Operating systemsprinciples\[C\]. 1995       4 Liao W S, SeeMong T, Campbell R H.Finegrained, dynamic user customization of operating systems\[A\]. In:Proceedings of the 5th International Workshop on Object Orientation inOperating Systems (IWOOOS '96)\[C\], 1996       5 Oikawa S, Sugiura K,Tokuda H. Adaptive object management for a reconfigurablemicrokernel\[A\]. In: Proceedings of the 5th International Workshop onObject Orientation in Operating Systems (IWOOOS '96)\[C\], 1996       6 John Williams, Neil Bergmann. Embedded Linux as a platform fordynamically self?reconfiguring systems?on?chip\[A\]. In: ProceedingsEngineering of Reconfigurable Systems and Algorithms (ERSA 2004)\[C\].Las Vegas, Nevada, USA. 2004       7 田玉鳳,王沁. 一種動態更新LINUX內核變量的實現方法\[J\]. 計算機工程與設計,2003, 24(11):52~55       8 魏東林,盧正鼎,董俊,等. 在用戶空間擴展Linux操做系統功能方法研究\[J\].華中科技大學學報(天然科學版),2002,30(7): 42~43       9  Chris Walton, Dilsun Kirh, Stephen Gilmore. An abstract machine modelof dynamic module replacement\[J\]. Future Generation Computer Systems.2000,16: 793~808       10 Derek Rayside,Kostas Kontogiannis. ExtractingJava library subsets for deployment on embedded systems\[J\]. Scienceof Computer Programming. 2002, 45: 245~270       武延民:碩士研究生,主要研究方向爲嵌入式系統。姚柳:助教,主要研究方向爲信息技術與課程整合。

相關文章
相關標籤/搜索