微核心,單核心和linux

來源:互聯網
上載者:User

Linux大部分都是單核心的
 
作業系統核心可能是微核心,也可能是單核心(後者有時稱之為宏核心Macrokernel)。按照類似封裝的形式,這些術語定義如下:
l 微核心(Microkernel kernel)――在微核心中,大部分核心都作為單獨的進程在特權狀態下運行,他們通過訊息傳遞進行通訊。在典型情況下,每個概念模組都有一個進程。因此,假如在設計中有一個系統調用模組,那麼就必然有一個相應的進程來接收系統調用,並和能夠執行系統調用的其他進程(或模組)通訊以完成所需任務。
在這些設計中,微核心部分經常只但是是個訊息轉寄站:當系統調用模組要給文檔系統模組發送訊息時,訊息直接通過核心轉寄。這種方式有助於實現模組間的隔離。(某些時候,模組也能夠直接給其他模組傳遞訊息。)在一些微核心的設計中,更多的功能,如I/O等,也都被封裝在核心中了。但是最根本的思想還是要保持微核心盡量小,這樣只需要把微核心本身進行移植就能夠完成將整個核心移植到新的平台上。其他模組都只依賴於微核心或其他模組,並不直接直接依賴硬體。
微核心設計的一個長處是在不影響系統其他部分的情況下,用更高效的實現代替現有文檔系統模組的工作將會更加容易。我們甚至能夠在系統運行時將研發出的新系統模組或需要替換現有模組的模組直接而且迅速的加入系統。另外一個長處是無需的模組將不會被載入到記憶體中,因此微核心就能夠更有效利用記憶體。
l 單核心(Monolithic kernel)――單核心是個很大的進程。他的內部又能夠被分為若干模組(或是層次或其他)。但是在啟動並執行時候,他是個單獨的二進位大映象。其模組間的通訊是通過直接調用其他模組中的函數實現的,而不是訊息傳遞。
單核心的支援者聲稱微核心的訊息傳遞開銷引起了效率的損失。微核心的支援者則認為因此而增加的核心設計的靈活性和可維護效能夠彌補任何損失。
我並不想討論這些問題,但必須說明很有趣的一點是,這種爭論經常會令人想到前幾年CPU領域中RISC和CISC的鬥爭。現代的成功CPU設計中包含了任何這兩種技術,就像Linux核心是微核心和單一核心的混合產物相同。Linux核心基本上是單一的,但是他並不是個純粹的整合核心。前面一章所介紹的核心模組系統將微核心的許多長處引入到Linux的單核心設計中。(順便提一下,我考慮過一種有趣的情況,就是Linux的核心模組系統能夠將系統核心轉化成為簡單的不傳遞訊息的微核心設計。雖然我並不贊成,但是他仍然是個有趣的想法。)
為什麼Linux必然是單核心的呢?一個方面是曆史的原因:在Linus的觀點看來,通過把核心以單一的方式進行組織並在最初始的空間中運行是相當容易的事情。這種決策避免了有關訊息傳遞體繫結構,計算模組裝載方式等方面的相關工作。(核心模組系統在隨後的幾年中又進行了不斷地改進。)
另外一個原因是充足的研發時間的結果。Linux既沒有研發時間的限制,也沒有深受市場壓力的發行進度。任何的限制只有並但是分的對核心的修改和擴充。核心的單一設計在內部實現了充分的模組化,在這種條件下的修改或增加都並不怎麼困難。而且問題還在於沒有必要為了追求尚未證實的可維護性的微小增長而重寫Linux的核心。(Linus曾多次特彆強調了如下的觀點:為了這點利益而損耗速度是不值得的。)後面章節中的部分內容將周詳的重新考慮充足研發時間的效果。
假如Linux是純微核心設計,那麼向其他體繫結構上的移植將會比較容易。實際上,有一些微核心,如Mach微核心,就已成功的證實了這種可移植性的長處。實際的情況是,Linux核心的移植雖然不是很簡單,但也絕不是不可能的:大約的數字是,向一個全新的體繫結構上的典型的移植工作需要30,000到 60,000行代碼,再加上不到20,000行的驅動程式代碼。(並不是任何的移植都需要新的驅動程式代碼。)粗略的計算一下,我估計一個典型的移植平均需要50,000行代碼。這對於一個程式員或最多一個程式小組來說是力所能及的,能夠在一年之內完成。雖然這比微核心的移植需要更多的代碼,但是 Linux的支援者將會提出,這樣的Linux核心移植版本比微核心更能夠有效利用底層硬體,因而移植過程中的額外工作是能夠從系統效能的提高上得到補償的。
這種特別設計的權衡也不是很輕鬆就能夠達到的,單核心的實現策略公然違背了傳統的看法,後者認為微核心是未來發展的趨勢。但是由於單一模式(大部分情況下)在Linux中運行狀態良好,而且核心移植相對來說比較困難,但沒有明顯地阻礙程式員團體的工作,他們已熱情高漲地把核心成功的移植到了現存的大部分實際系統中,更不用說類似掌上型電腦的一些看起來很不實際的目標了。只要Linux的眾多特點仍然值得移植,新的移植版本就會不斷湧現。

另一篇文字

Linux核心和傳統Unix核心的比較
    所有的Unix核心都同宗同源,並且提供相同的API,現代的Unix核心存在許多設計上的相似之處。

Unix核心幾乎毫無例外的都是一個不可分割的靜態可執行塊(檔案)。也就是說,它們必須以完整、單

獨的可執行塊的形式在一個單獨的地址空間中運行。

Unix核心幾乎都需要硬體系統提供頁機制以管理記憶體。這種頁機制可以加強記憶體空間的保護,並保證每

個進程都可以運行於不同的虛地址空間上。
    單核心與微核心設計之比較
    作業系統核心可以分為兩大設計陣營:單核心和微核心(第三陣營外核心,主要用在科研系統中,

但也逐漸在現實世界中壯大起來)。

    單核心是兩大陣營中一種較為簡單的設計,在1980年之前,所有的核心都設計成單核心。所謂單內

核就是把它從整體上作為一個單獨的大過程來實現,並同時運行在一個單獨的地址空間。因此,這樣的

核心通常以單個靜態二進位檔案的形式存放於磁碟。所有核心服務都在這樣的一個大核心空間中運行。

核心之間的通訊是微不足道的,因為大家都運行在核心態,並身處同一地址空間:核心可以直接調用函

數,這與使用者空間沒有什麼區別。這種模式的支援者認為單模組具有簡單和高效能的特點。大多數Unix

系統都設計為單模組。

    另一方面,微核心並不作為一個單獨的大過程來實現。相反,微核心的功能被劃分為獨立的過程,

每個過程叫做一個伺服器。理想情況下,只有強烈請求特權服務的伺服器才運行在特權模式下,其他服

務器都運行在使用者空間。不過,所有的伺服器都保持獨立並運行在各自的地址空間。因此,就不可能像

單模組核心那樣直接調用函數,而是通過訊息傳遞處理微核心通訊:系統採用了處理序間通訊(IPC)機制,

因此,各種伺服器之間通過IPC機制互連訊息,互換“服務”。伺服器的各自獨立有效地避免了一個服務

器的失效禍及另一個。

    同樣,模組化的系統允許一個伺服器為了另一個伺服器而換出。因為IPC機制的開銷比函數調用多,

又因為會涉及核心空間到使用者空間的環境切換,因此,訊息傳遞需要一定的周期,而單核心中簡單的

函數調用沒有這些開銷。基於此,付之於實際的微核心系統讓大部分或全部伺服器位於核心,這樣,就

可以直接調用函數,消除頻繁的環境切換。Windows NT核心和Mach(Mac OS X的組成部分)是微核心

的典型執行個體。不管是Windows NT還是Mac OS X,都在其新近版本中不讓任何微核心伺服器運行在使用者空

間,這違背了微核心設計的初衷。

    Linux是一個單核心,也就是說,Linux核心運行在單獨的核心地址空間。不過,Linux汲取了微核心

的精華:其引以為豪的是模組化設計、搶佔式核心、支援核心線程以及動態裝載核心模組的能力。不僅

如此,Linux還避其微核心設計上效能損失的缺陷,讓所有事情都運行在核心態,直接調用函數,無需消

息傳遞。至今,Linux是模組化的、多線程的以及核心本身可調度的作業系統。實用主義再次佔了上風。

    當Linus和其他核心開發人員設計Linux核心時,他們並沒有完全徹底地與Unix訣別。他們充分地認識

到,不能忽視Unix的底蘊(特別是Unix的 API)。而由於Linux並沒有基於某種特定的Unix,Linus和他

的夥伴們對每個特定的問題都可以選擇已知最理想的解決方案—在有些時候,當然也可以創造一些新的

方案。以下是對Linux核心與Unix各種變體的核心特點所作的分析比較:
    ·Linux支援動態載入核心模組。儘管Linux核心也是單核心,可是允許在需要的時候動態地卸載和

載入部分核心代碼。

    ·Linux支援對稱式多處理(SMP)機制,儘管許多Unix的變體也支援SMP,但傳統的Unix並不支援這種

機制。

    ·Linux核心可以搶佔(preemptive)。與傳統的Unix不同,Linux核心具有允許在核心啟動並執行任務

優先執行的能力。在其他各種Unix產品中,只有Solaris和IRIX支援搶佔,但是大多數傳統的Unix核心不

支援搶佔。

    ·Linux對線程支援的實現比較有意思:核心並不區分線程和其他的一般進程。對於核心來說,所有

的進程都一樣—只不過其中的一些共用資源而已。

    ·Linux提供具有裝置類的物件導向的裝置模型、熱插拔事件,以及使用者空間的裝置檔案系統

(sysfs)。

    ·Linux忽略了一些被認為是設計得很拙劣的Unix特性,像STREAMS,它還忽略了那些實際上已經根

本不會使用的過時標準。

    ·Linux體現了自由這個詞的精髓。現有的Linux特性集就是Linux公開開發模型自由發展的結果。如

果一個特性沒有任何價值或者創意很差,沒有任何人會被迫去實現它。相反的,在Linux的發展過程中已

經形成了一種值得稱讚的務實態度:任何改變都要針對現實中確實存在的問題,經過完善的設計並有正

確簡潔的實現。於是,許多其他現代Unix系統包含的特性,如核心換頁機制,都被毫不遲疑的引入進來

    不管Linux和Unix有多大的不同,它身上都深深地打上了Unix烙印

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.