Linux核心學習筆記(一)——Linux核心簡介
Unix系統業已演化成一個具有相似應用程式程式設計介面(API),並且基於相似設計理念的作業系統家族。
1、Unix的歷史
Unix是從貝爾實驗室的一個失敗的多使用者作業系統Multics中涅槃而生的。
時間 | 事件 |
---|---|
1969 | 貝爾實驗室的程式設計師實際了一個檔案系統原型,最終演化成Unix。Ken Thompson在PDP-7型機上實現了這個作業系統。 |
1971 | Unix被移植到PDP-11型機中。 |
1973 | Unix作業系統用C語言進行了重寫,為unix系統的廣泛移植鋪平了道路。第一個在貝爾實驗室外廣泛使用的Unix版本是V6。 |
1977 | 貝爾實驗室綜合各種變體推出了Unix System Ⅲ。 |
1977 | 加州大學伯克利分校推出Unix演化版1BSD(Berkeley Software Distribution)。 |
1977 | 伯克利繼續推出了2BSD系統。其中包含仍在使用的csh、vi等應用軟體。 |
1979 | 伯克利獨立開發了3BSD系統,支援虛擬記憶體。之後相繼推出4BSD系列,實現了任務管理、換頁機制、TCP/IP等新特性 |
1983 | AT&T推出了System V。 |
1994 | 伯克利大學重寫了虛擬記憶體子系統(VM),推出最終官方版4.4BSD。BSD的開發由Darwin、FreeBSD、NetBSD和OpenBSD繼續。 |
80 / 90年代 | Digital的Tru64、HP的HP-UX、IBM的AIX、Sequent的DYNIX/ptx、SGI的IRIX和Sun的Solaris和SunOS。 |
Unix的特點:
(1)Unix很簡潔,僅僅提供幾百個系統呼叫;
(2)所有的東西都被當做檔案對待(Sockets除外);
(3)Unix的核心和相關的系統工具軟體是用C語言編寫而成,移植性強;
(4)程序建立非常迅速,提供簡單穩定的程序間通訊機制。
Unix已經發展成為一個搶佔式多工、多執行緒、虛擬記憶體、換頁、動態連結和TCP/IP網路的現代化作業系統。
2、Linux簡介
1991年,Linus Torvalds為Intel80386微處理器的計算機開發了一款全新的作業系統,Linux由此誕生。
Linux是類Unix系統,但它不是Unix。
Linux核心是自由(公開)軟體,使用GUN的General Public License(GPL)作為限制條款。
3、作業系統和核心簡介
作業系統是指在整個系統中負責完成最基本功能和系統管理的部分。應該包括核心、裝置驅動程式、啟動載入程式、命令列Shell或者其他種類的使用者介面、基本的檔案管理工具和系統工具。
核心通常由負責響應中斷的中斷服務程式,負責管理多個程序從而分享處理器時間的排程程式,負責管理程序地址空間的記憶體管理程式和網路、程序間通訊等系統服務程式共同組成。被稱作管理者或作業系統核心。
核心獨立於普通應用程式,一般處於系統態,擁有受保護的記憶體空間和訪問硬體裝置的所有許可權。系統態和被保護起來的記憶體空間,被稱為核心空間。
應用程式在使用者空間執行,只能看到允許它們使用的部分系統資源,並且只使用某些特定的系統功能,不能直接訪問硬體,也不能訪問核心劃給別人的記憶體範圍,還有其他使用限制。
當核心執行的時候,系統以核心態進入核心空間執行。執行一個普通使用者程式時,系統以使用者態進入以使用者空間執行。
應用程式通過系統呼叫來與核心通訊。當一個應用程式執行一條系統呼叫,我們說核心正在代其執行。應用程式通過系統呼叫在核心空間執行,而核心運行於程序上下文中。應用程式通過系統呼叫陷入核心是應用程式完成其工作的基本行為方式。
硬體和系統通訊,首先要發出一個非同步的中斷訊號打斷處理器的執行,繼而打斷核心的執行。中斷通常對應一箇中斷號,核心通過中斷號查詢相應的中斷服務程式,呼叫這個程式響應和處理中斷。中斷服務程式在中斷上下文中執行。
核心的活動必然為下列三者之一:
- 運行於使用者空間,執行使用者程式。
- 運行於核心空間,處於程序上下文,代表某個特定的程序執行。
運行於核心空間,處於中斷上下文,與任何程序無關,處理某個特定的中斷。
4、Linux核心和傳統Unix核心比較
Unix核心需要硬體系統提供頁機制(MMU)管理記憶體,一些特殊版本的Linux並不依賴。不過現實中簡單的嵌入式系統都具備記憶體管理單元功能。
定義 | 優勢 | 劣勢 | |
---|---|---|---|
單核心 | 從整體上作為一個單獨的大過程來實現,執行在一個單獨的地址空間上 | 簡單、效能高:所有核心服務都執行在核心態,並身處統一地址空間,可以直接呼叫函式 | 一個功能的崩潰會導致整個核心無法使用 |
微核心 | 核心的功能被劃分成多個獨立的過程(伺服器)。所有的伺服器都保持獨立並執行在自己的地址空間上 | 伺服器的各自獨立有效地避免了一個伺服器的失效禍及另一個,允許一個伺服器為了另一個伺服器換出 | 系統採用了程序間通訊(IPC)機制,涉及核心空間與使用者空間的上下文切換,需要一定週期 |
Linux是單核心,核心執行在單獨的核心地址空間上,同時汲取了微核心的精華:模組化設計、搶佔式核心、支援核心執行緒以及動態裝載核心模組的能力,避免了微核心的缺陷:讓所有事情都執行在核心態,直接呼叫函式,無需訊息傳遞。
Linux核心與傳統Unix系統間的差異:
- Linux支援動態載入核心模組。
- Linux支援對稱多處理(SMP)機制。
- Linux核心可以搶佔。
- 核心並不區分執行緒和其他的一般程序。
- Linux提供具有裝置類的面向物件的裝置模型、熱插拔事件,以及使用者空間的裝置檔案系統(sysfs)。
- 忽略了拙劣的Unix特性,像STREAMS,以及難以實現的過時標準。
體現了自由的精髓。
5、Linux核心版本
副版本號表示這個版本是穩定版(偶數)還是開發版(奇數)。
修訂版本號的升級包括BUG修正,新的驅動以及新的特性的追加。