微內核操作系統及L4概述

傑夫

[email protected]

 

摘要:本文是對微內核操作系統及L4的發展歷程和主要功能的綜述。本文還對微內核操作系統的優缺點及發展前景發表評論。

關鍵詞:微內核,操作系統,L4

Abstract : This paper describes the history of microkernel-based operating systems, andthe structure and main functions ofL4.  It al so discusses the pros and consof microkernelsystems and their prospect of actualdeployments in the industry.

Keywords: microkernel, operating system, L4

 

1. Introduction

       微內核(microkernel) 並非是一個新的概念,這個名詞至少在七十年代初就有了。一般認爲,他的發明權屬於Hansen [Han70]  和Wulf[Wul74].  但是在這一名詞出現之前已經有人使用類似的想法設計計算機操作系統了。早期的操作系統絕大多數是Monolithic Kernel, 意思是整個操作系統 - 包括Scheduling (調度), File system  (文件系統),Networking  (網絡), Devicedriver(設備驅動程序), Memory management  (存儲管理),Paging (存儲頁面管理)–都在內核中完成。一直到現在廣泛應用的操作系統,如 UNIX,Linux,和Windows 還大都是monolithic kernel操作系統。但隨着操作系統變得越來越複雜(現代操作系統的內核有一兩百萬行C 程序是很常見的事情),把所有這些功能都放在內核中使設計難度迅速增加。微內核是一個與Monolithic Kernel相反的設計理念。它的目的是使內核縮到最小,把所有可能的功能模塊移出內核。理想情況下,內核中僅留下Address SpaceSupport(地址空間支持),IPC(Inter-Process Communication ,進程間通訊) ,和Scheduling(調度),其他功能模塊做爲用戶進程運行。對於內核來說,他們和一般用戶進程並無區別。它們與其他用戶進程之間的通訊通過IPC 進行。在八十年代中期,微內核的概念開始變得非常熱門。第一代微內核操作系統的代表作品是Mach [Mac85]。Mach是由位於痞子堡的卡內基梅隆大學(CMU)設計。CMU 是美國計算機科學研究重鎮,其計算機排名長期位於美國大學前五位。美國只有少數幾所大學的計算機是學院不是系,CMU 就是其中之一。除Mach外,CMU 的另一重要成果是衡量計算機軟件設計能力的CMM(Capability Maturity Model) 模型,廣泛用於評價業界軟件公司的計算機軟件開發能力。好像印度的軟件公司們非常熱衷於此,通過CMM-5 最高規格評價的軟件公司們有一半是印度的。

在微內核剛興起時,學術界普遍認爲其優點是顯而易見的:

•   支持更加模塊化的設計;

•   小的內核更易於更新與維護,bug會更少。大家知道Windows 的死機很多是因爲device drivers 造成的。如果把他們移出內核,他們中的bugs 很可能就不會造成死機;

•   許多模塊的bugs 可被封閉在其模塊內,更加易於debug。軟件工程師都知道 kernel debug  是件非常頭疼的事情。如果filesystem , memory management,和device drivers 成爲一個個獨立的進程,不用說這肯定會使kernel engineers 的日子好過許多。

        由於上述原因,很多學術研究人員和軟件廠家開始嘗試使用微內核的概念設計操作系統。甚至Microsoft 也有所動作,在設計 Windows NT 時,他們把UI (User Interface) 從Windows kernel 中整個拿了出來。由此可看出microkernel的流行程度,因爲Microsoft 總是最後一個嘗試新想法的。但是這一熱潮很快就冷了下來,原因只有一個字Performance(Well ,漢語是兩個字:性能)。Microsoft 在Windows NT後續版本中,又把部分底層UI放回了Windowskernel。這種現象在計算機界並不少見。在Java 剛開始流行時,由於其許多C/C++ 沒有的優點,很多人認爲它會很快取代C/C++ 成爲第一編程語言。但直至今天也沒有發生,其中一個重要原因就是Java 程序的performance落後於C 程序,至今還限制着它在許多場合的應用。

        第一代的微內核操作系統的性能,包括Mach在內,遠不及monolithic kernel操作系統。所以大多數人又回到傳統技術中去了。Microkernel 也像過時的流行歌曲或減肥方法,很快被遺忘了。但在九十年代後期,微內核迎來了其生命中的第二春。一些研究人員認真分析了微內核系統性能差的原因,指出其性能差並非根本內在的因素造成,而是設計實現的失誤。爲證明其論點,他們設計並實現了幾個性能遠超第一代的微內核操作系統,我們把它們稱爲第二代微內核系統 [Bar03, Eng95, Lie93A] 。其中的一個代表作品就是L4 [Lie93A, Lie93B, Lie95, Lie96]。

         L4由德國的GMD設計。GMD是德國國家信息技術研究院,相當於中科院計算所加上軟件所(但在計算機研究能力方面,GMD 遠非中科院可比。與作者一起工作過的幾位GMD研究人員都是extremely smart )。L4的創始人和總設計師是 JochenLiedtke [Kar05] 。此公在GMD 之後,還供職於 IBM 的T.J. WatsonResearch Center ,後成爲德Univ. ofKarlsruhe 操作系統方向的正教授(full professor )。瞭解德國大學系統的人都知道,當德國的正教授可比當美國的正教授要難許多倍,地位也要高許多,因爲一個系往往只有一兩個正教授。Prof. Liedtke已於2001年過世,但他創建的L4正在發展壯大中。近年來,多個運行於不同硬件平臺的L4系統已被幾個不同研究機構設計出來 [SAG03, Tew01]。

       本文以後的部分將分析微內核系統的performance bottleneck 所在,以及 L4如何試圖克服這一困難。微內核系統到底有沒有固有的障礙,先天的缺陷?以L4爲代表的新一代微內核系統的前景如何?請看下文。

 

2.微內核系統的性能爲什麼會這麼差?

        基於消息傳遞(Message Passing )IPC 機制是微內核系統的基本特點之一。這一設計理念有助於提高系統的靈活性,模塊化,安全性,以及可擴展性。IPC 的性能表現是決定微內核系統性能的關鍵因素,因爲絕大多數系統調用和很多應用程序的服務都需要兩個IPC, 一個服務請求,一個結果返回。消息傳遞IPC 機制現在已經大量用於多種計算機系統中,但是很多IPC 實現的性能並不太好。根據CPU 性能和消息長短不同,一個IPC 大概需要50到500  µs。經過許多研究人員多年的努力,也沒有實現IPC 性能的突破,所以直至最近,消息傳遞IPC 被公認爲使一個很好的設計理念,但對其適用範圍學術界還存在很大爭

議。

        Linux Kernel 創始人LinusTorvalds  在2000 年的一段話說得生動(Sorry,是極端),也代表了當時很多人的觀點。爲了在有些讀者受到冒犯時擺脫干係,作者決定不翻譯以下這段話。如果您看不懂,good for you.“Message passing as the fundamental operation of the operating system is just  an exercise in computer science masturbation.  It may feel good, but you don't actually get anything DONE. Nobody has ever shown that it made sense in the real world.”由於IPC 對微內核系統的重要性,其設計人員們也花費了大量時間在改善它的性能上面。微內核系統中IPC 性能不斷提高,但到90年代初似乎達到了頂峯。Mach3 的IPC 最好性能大約是115 µs( 在486-DX 50 機器上),其它微內核系統也大致如此。當時許多研究人員認爲,有100 µs 左右的時間是IPC 的固有消耗,這一時間已無法縮短。但是與之相比,在同樣硬件平臺上,一個UNIX 系統調用只需20 µs, 好過微內核系統10倍。

        第一代微內核系統一直未在IPC 性能上有重大突破,這是導致他們失敗的根本原因。對第一代微內核系統的性能分析表明,他的耗時巨大的操作包括用戶- 內核模式轉換,地址空間轉換,和內存訪問。表面上看起來這一結果似乎合理,但進一步分析發現它們並非真正問題所在。[Lie96]  中給出Figure 1, 顯示這些操作的硬件固


Figure 1. IPC 耗時分析

        有的時間消耗只佔IPC 總耗時的3%- 7% (圖中深色爲硬件固有時間消耗)。這些證據表明早期微內核的性能差距其實來自於它們的基本構造。早期的微內核系統大多是由Monolithic Kernel 一步步逐漸改進而來。其很多設計並未發生重大改變。他們雖然被稱爲微內核,但其代碼量還是很大。例如,Mach 3內核支持140個系統調用,代碼量爲300K  字節。

        這種情況不改變,微內核系統的性能恐難提高。第二代微內核系統設計者認識到這一問題,他們對系統內核的基本構造做出重大精簡,從而使其性能大步提高。L4只支持7 個系統調用,代碼量只有12K 字節。本文下一部分將簡單介紹L4的一些基本設計,有興趣的讀者可在 [Lie95]  中找到對L4的詳細介紹。

 

3. L4  基本結構

        L4是由GMD於1995年設計,它的兩個基本設計原則是:1)高性能和靈活性的要求決定微內核必須儘可能縮到最小,2 )微內核實現本身取決於硬件結構,它是不可移植的。雖然微內核可以改善整個系統的移植性,但它本身是不可移植的,因爲要達到高性能,它的實現必須緊密聯繫於硬件結構。L4內核支持三種抽象概念:地址空間,線程,和IPC。他只提供7 個系統調用,只有12K 字節代碼。在486-DX50  機器上,一個地址空間切換IPC,8  字節參數傳遞,只需要5 µs 。如果參數量爲512 字節,只需要18 µs。Mach 3 相應的時間消耗爲115 µs (8 字節)  和172 µs (512 字節) 。下面我們來看L4時如何實現高性能 IPC 的。進程間通信的一個基本問題是數據需要跨越不同的地址空間。大多數操作系統的解決辦法是用兩次數據拷貝:用戶地址空間A -> 內核地址空間 ->  用戶地址空間 B。用戶數據被拷貝兩次,因爲大多數操作系統的地址空間分配模型是用戶可防問的地址空間加上內核地址空間,內核空間爲所有用戶共享。因爲用戶的地址空間各個不同用戶是不同的,所以數據拷貝必須通告內核空間進行,如Figure 2 所示。


Figure 2. 兩次拷貝的信息傳遞過程

        這兩次數據拷貝可能耗時很大,如果引起TLB 和Cache miss  耗時會更大。如果數據可以由用戶空間A 直接轉移到用戶空間B,這將大大提高IPC 性能。但兩個用

戶直接共享邏輯地址空間會帶來一系列的安全問題。L4的解決辦法是通過暫時地址映射:內核把數據的目的地址暫時映射到一個通訊窗口(Communication Window),這一窗口存在於內核地址空間。然後內核把數據從用戶A 地址空間拷貝到通訊窗口供用戶B 使用。如Figure 3  所示,這一窗口屬於內核所有,但用戶B,只有用戶B,可以訪問。除以上討論的方法之外,L4還採用了許多新穎的技術來提高內核性能,例如,直接地址轉換,懶惰調度(Lazy Scheduling ),使用寄存器傳送短消息,減少緩存及TLB Miss等等。本文不再詳述,請參見[Lie95] 。

 

Fi gure 3. L4 的信息傳遞過程

4. Conclusion

        微內核操作系統已有二三十年的發展歷史,但早期系統的性能不夠理想。所以儘管微內核的概念有許多可取之處,但它並未廣泛應用於工業界。近年來,新一代的微內核系統,如L4,Exokernel,在性能上取得了巨大突破,所以學術界,工業界對微內核的興趣又出現了復甦。對微內核被廣泛應用,取代傳統Monolithic Kernel操作系統,的前景作出預測還爲時尚早。但是,至少在一些應用場合,例如,嵌入式系統,實時系統,作者對微內核系統的前景持樂觀態度。

 

References

[Bar03] Xen and the Art of  Virtualization, Barham, Paul , etc, ACMSymposium on Operating Systems, Oct, 2003, BoltonLanding, New York.

[Eng95] Exokernel, an operating systemarchitecture of application-level resource management, Engler, Dl, Kaashock, M.F., andO’Toole, J., 15 the ACM Symposium on Operating Systems, Dec. 1995, CoperMountain, Colorado.

[Han70] The mucleus of a multiprogrammi ngsystem, Hansen, Brinch, Communication of ACM 13, April, 1970, 238-241.

[Kar05] http://i30www.ira.uka.de/aboutus/people/personal/liedtke?lid=en&publ=y, Prof.Liedtke memorial page, Univ. of Karlsruhe,2005.

[Lie93A] A persistent System in Real Use –Experiences of the First 13 years, Liedtke, Jochen, German National Research Center forComputer Science, 1993.

[Lie94B] Improving IPC by Kernel Design,Liedtke, Jochen, 14 the ACMSymposium on Operating Systems, Dec. 1993, Asheville,North Carolina.

[Lie95] On u-Kernel Construction, Liedtke,Jochen, 15 the ACMSymposium on Operating Systems, Dec. 1995, Coper Mountain,Colorado.

[Lie96] Toward Real Microkernels,Liedtke,  Jochen, Communications of theACM, Sep.,1996.

[Mac85]http://www.cs.cmu.edu/afs/cs/project/mach/public/www/mach.html, the mach project, CMU, 1985-1994.

[SAG03] The L4Ka:: Pistachio Microkernel,Sy stem Architecture Group, University ofKarlsruhe, white paper, May, 2003.

[Tew01] VFiasco - Towards a ProvablyCorrect Microkernel, He ndrik Tews, Hermann Härtig, Michael Hohmuth, TU Dresden TechnicalReport TUD-FI01-1,Jan. 2001.

[Wul74] Hydram: The kernel of a multiprocessing operating system, Wulf, W., Cohen, E.,Corwin, W., Jones, A., Levin, R., Pierson,C. and Pollack, F., 1974, Communication of ACM 17, July, 1974, 337-345.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章