Linux內核設計與實現 之一 Linux內核簡介

 
Linux內核設計與實現 之一 Linux內核簡介

1991年 Linus Torvalds 開發全新的操作系統Linux

Linux克隆了Unix,但Linux不是Uninx

Linux不是一個商業化的產品

Linux用途廣泛

用戶界面是操作系統的外在表象,內核纔是操作系統內在的核心

通常一個內核由負責響應中斷的中斷服務程序,進程調度程序,內存管理程序,進程間通信等組成

內核一般處於系統態,擁有受保護的內存空間和訪問硬件設備的所有權限

內核還要管理系統的硬件設備       

處理器在任何指定的時間點上的活動範圍概括爲下列三者之一:
1、運行於內核空間,處於進程上下文,代表某個特定的進程執行;
2、運行與內核空間,處於中斷上下文,與任何進程無關,處理某個特定的中斷;
3、運行與用戶空間,執行用戶進程。

 
操作系統內核可以分爲兩大設計陣營:單內核和微內核

在1980年以前,所有的內核都設計成單內核,所謂單內核,就是把它從整體上作爲一個單獨的大過程來實現,並同時運行在一個單獨的地址空間,通常以單個靜態的二進制文件的形式存放於磁盤,所有的內核服務都在這樣一個大內核空間運行,內核之間通信是微不足道的,內核可以直接調用函數,這與用戶空間沒有區別,這種模式的支持者認爲,單模塊具有簡單和高性能的特點,大多數的Unix都設計爲單模塊。

微內核並不作爲一個單獨的大過程來實現,微內核的功能被劃分爲獨立的過程,每個過程叫做一個服務器,理想情況下,只有強烈請求特權服務的服務器才運行在特權模式下,其他服務器都運行在用戶空間,不過,所有服務器都保持獨立並運行在各自的地址空間內,因此就不能像單內核那樣直接調用函數,而是通過消息傳遞處理微內核通信:系統採用了進程間通信(IPC)機制,因此各種服務器之間通過IPC機制互通消息,互換“服務”。服務器的各自獨立有效地避免了一個服務器的失效禍及另一個。

因爲IPC機制比函數調用開銷大,又因爲會涉及到用戶空間到內核空間的上下文切換,因此消息傳遞需要一定的週期,因此,實際的微內核系統讓大部分或全部服務器位於內核,這樣就可以直接調用函數,消除頻繁的上下文切換,windowsNT和Mach是微內核的典型實例,在最近的版本中,這兩個系統都不讓任何微內核服務器位於用戶空間中,這違背了微內核設計的初衷。

Linux是一個單內核,也就是說Linux內核運行在單獨的內核地址空間中,不過,Linux吸取了微內核的精華:其引以爲豪的是模塊化設計、搶佔式內核、支持內核線程以及動態加載內核模塊的能力,不僅如此,Linux還避其微內核設計上性能損失的缺陷, 讓所有事情都運行在內核態,直接調用函數,無需消息傳遞。至今,Linux是模塊化的、多線程的以及內核本身可調度的操作系統。

當然Linux也借鑑了Unix的優點,以下是Linux內核與Unix各種變體的內核特點所做的分析比較:
1、Linux支持動態加載內核模塊。儘管Linux內核也是單內核,可是允許在需要的時候動態的卸載和加載部分內核代碼;
2、Linux支持對稱多處理(SMP)機制。儘管許多Unix變種也支持SMP,但傳統的Unix並不支持這種機制;
3、Linux內核支持搶佔。與傳統Unix不同,Linux內核具有允許在內核運行的任務優先執行的能力,在其他各種Unix產品中,只有Solaris和IRIX支持搶佔,但是大多數傳統的Unix不支持。
4、Linux對線程的支持比較有意思,內核並不區分線程和其他一般進程,對於內核來說,所有的進程都一樣——只不過其中的一些共享資源而已;
5、Linux提供了具有設備類的面向對象的設備模型、熱插拔事件,以及用戶空間的設備文件系統(sysfs)
6、Linux忽略了一些被認爲是設計的很拙劣的Unix特性,如STREAMS
7、Linux體現了自由這個詞的精髓

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

    
發佈了9 篇原創文章 · 獲贊 2 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章