LKD 3rd 讀書筆記——第1章/Linux Versus Classic Unix Kernels

來源:互聯網
上載者:User

Linux Versus Classic Unic Kernels

由於具有共同的祖先和相同的API,現代的Unix核心有很多共同的設計特點。沒有任何意外,Unix通常是一個完整的、靜態二進位檔案(聚核心)。這是指,它是一個運行在單個地址空間的單獨的大的可執行鏡像檔案。Unix系統通過需要可分頁的記憶體管理單元(MMU),這個硬體協助系統加強記憶體保護並向每個進程提供單獨虛擬位址空間。Linux曆史上也需要MMU,但特殊的版本也可以運行在沒有MMU的硬體環境上。這是一個巧妙的特性,允許Linux運行在沒有MMU的小巧的嵌入式裝置上,當然這是一個偏學術而不太實用的特性——因為在今天即使是簡單的嵌入式系統也通常擁有進階的特性例如MMU。在本書裡,我們聚焦在基於MMU的系統上。

聚核心與微核心

可以把核心分為主要的兩個類別:聚核心與微核心(還有第三類,外核,主要存在於研究領域)。聚核心比其它兩類的設計更簡單,在1980之前所有核心都採用聚核心的方式。聚核心被實現為運行在單一的地址空間裡的單一的進程。因此,這種核心通常以一個靜態二進位檔案儲存在磁碟中。所以核心的服務都存在並執行於一個大的核心地址空間裡。在核心的內部進行通訊顯得直接了當,因為所有運行在核心態的代碼都在相同的地址空間裡:核心可以直接調用函數,就像使用者空間的應用程式一樣。這個模型的支援者們以聚核心的簡潔和效能為理由。多大數Unix系統都採用聚核心的設計方法。

微核心則不是實現為單個的大的進程。而是把核心的功能分解成不同的進程,通常把這些進程稱為服務。理想情況,只有在必要的時候服務才運行在特權模式下。其他服務都運行在使用者空間裡。所有這些服務,都被分解到不同的地址空間裡,因此,像聚核心那樣的直接的函數調用不再可能(指在多個服務間進行通訊時)。替代地,微核心的通訊通過訊息傳遞:一套處理序間通訊(IPC)的機制被內嵌到系統中,各種服務通過在IPC之上發送訊息來相互調用彼此的服務。把各種服務的分離可以防止一個服務的失敗引起其他服務的失敗。同樣的,這種模組化的系統允許一個服務替換掉另一個服務。

由於IPC的機制會導致比平常的函數調用更多一些的開銷,此外,它還包含在核心空間與使用者空間之間進行環境切換的開銷,同時訊息傳遞也會有一些延遲,所以微核心的輸送量似乎不如採用簡潔函數調用的聚核心。因此,所有實用的基於微核心的系統,現在都把大多數或所有服務放在核心空間,以避免頻繁的環境切換帶來的開銷,並潛在的支援直接的函數調用。Windows NT核心(被用於Windows XP,Vista,7)和Mach(被用於部分Mac OS X)就是微核心的例子。最新版的Windows NT和Mac OS X都不會在使用者空間運行微核心的服務,它們都背離了微核心的設計初衷。

Linux屬於聚核心,也就是說,整個Linux核心運行在核心態的單一的地址空間裡。然而,Linux也從微核心中借鑒了很多好的想法:Linux推崇模組化的設計、可以搶點它自己(稱為搶佔式核心)、支援核心線程、可以動態載入二進位檔案(核心模組)到核心鏡像中。因此,Linux沒有任何一個微核心設計帶來的效能損耗:核心的代碼都運行在核心態、直接的函數調用、沒有訊息傳遞的通訊模式。雖然如此,Linux是模組化的、線程的、並且它自己是可調度的。實用主義再一次勝利。

 

隨著Linus和其它開發人員貢獻到Linux核心,他們考慮如何更好的發展Linux而又不會疏忽掉它的Unix特性(更重要的是,Unix API)。因此,由於Linux不基於任何Unix變種,Linus和其他公司可以選擇最好的解決方案來處理Unix面對的問題——或偶爾,發明新的解決方案。少量顯著的差異存在於Linux和傳統的Unix系統中:

1、Linux支援動態載入Linux模組。儘管Linux是聚核心,它可以按需動態地載入或卸載模組。2、Linux支援對稱式多處理器(SMP)。儘管大多數商業版的Unix變種已經支援SMP,大多數傳統的Unix實現是不支援的。3、Linux核心是搶佔式的。與傳統Unix變種不一樣,Linux核心可以搶佔一個任務,即使這個任務正在執行。在其他的商業版Unix實現中,Solaris和IRIX是搶佔式,其他大多數都不是。4、Linux採用了有趣的方式支援線程:它並不區分線程和普通進程。對Linux核心而言,線程和進程都一樣的——線程只是共用資源的進程。5、Linux提供物件導向的裝置模型。包括:裝置類別、熱插撥的事件、以及一個使用者空間的裝置系統(sysfs)。6、Linux忽略某些通用的核心開發人員們認為不良設計的Unix特性。例如STREAMS,或無法簡潔地實現的標準。7、Linux在任何意義上都是免費的。這個特性使Linux的實現成為Linux開放開發模型的自由運動的必然結果。如果一個特性沒有價值或沒有考慮透徹,Linux開發人員們沒有義務去實現它。相反地,Linux在面對變化時,採用一種先進的理念:修改必須解決一個特定的現實問題、來源於一個簡潔的設計,並且有穩健的實現。因此,在其他現代Unix變種中,某些只是為了製造銷售的噱頭或是針對某個單一的需求而開發的一些特性,如可分頁的核心記憶體,Linux是不會考慮的。

 

儘管有這些差異,Linux還是保持了很強的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.