【Linux核心設計與實現】Linux核心簡介

jiange_zh發表於2016-09-22

之前在讀《APUE》的時候,更多的是從上層去了解如何使用Linux系統的API,那個時候就十分喜歡Linux的設計,覺得一切都很奇妙。

最近有些迷茫,不知道自己以後更加具體的技術方向在哪,所以最近廣泛閱讀了很多方面的書——C++方面,服務端網路程式設計方面,多執行緒方面,作業系統核心方面。

在linux核心方面,目前打算閱讀兩本書,《Linux核心設計與實現》就是其中一本,另一本是《深入理解linux核心》。

接下來我也會做一系列的讀書筆記,目的有二:
1.通過寫筆記讓自己的閱讀慢下來,因為要總結,所以免不了要反覆閱讀;
2.寫筆記的過程是一個總結的過程,實際上就是把書讀薄——以後再回過頭來看,也只需要看看自己的筆記,而不需要從內容繁多的書中去找。

本系列讀書筆記會按照書中的章節來。

第一章 Linux核心簡介

Unix的歷史

Unix是從貝爾實驗室的一個失敗的多使用者作業系統Multics中涅盤而生的。

1969年,Thompson首先在一臺無人問津的PDP-7型機上實現了這個全新的作業系統。

1971年,Unix被移植到PDP-11型機中。

1973年,整個Unix用C語言進行了重寫。

1977年,貝爾實驗室綜合各種變體推出了Unix System Ⅲ;

1983年,AT&T推出了System V。

由於Unix系統設計簡潔並且在釋出時提供原始碼,所以許多其他組織和團體都對它進行了進一步的開發。加州大學伯克利分校便是其中影響最大的一個,他們推出的變體叫Berkeley Software Distributions(BSD)。

伯克利的第一個Unix演化版是1977年推出的1BSD系統。1978年推出了2BSD系統,其中包含了csh,vi等應用軟體。1979年推出3BSD系統,引入了虛擬記憶體。

Unix幾個特點:

1.很簡潔:僅僅提供幾百個系統呼叫並且有一個非常明確的設計目的。

2.基本所有的東西都被當做檔案對待,這種抽象使得對資料和對裝置的操作都是通過一套相同的系統呼叫介面來進行的:open(),read(),write(),lseek()和close()。

3.Unix的核心和相關的系統工具軟體是用C語言編寫而成的——這使得它在各種硬體體系架構面前具有很強的移植能力。

4.Unix的程式建立非常迅速。

5.Unix提供了一套非常簡單但又很穩定的程式間通訊原語,快速簡潔的程式建立過程使Unix的程式把目標放在一次執行保質保量地完成一個任務上,而簡單穩定的程式間通訊機制又可以保證這些單一目的的簡單程式可以方便地組合在一起。正是由於這種策略和機制分離的設計理念,確保了Unix系統具備清晰的層次化結構。

追尋Linus足跡:Linux簡介

1991年,Linus Torvalds為當時新推出的,使用Intel 80386微處理器的計算機開發了一款全新的作業系統,Linux由此誕生。

Linus熱衷於使用Minix,一種教學用的廉價Unix,但是他不能輕易修改和釋出該系統的原始碼(由於Minix的許可證)。於是他決定開發自己的作業系統。由於Linux的許可證條款的約定,Linux迅速成為多人的合作開發專案。

Linux是類Unix系統,但它不是Unix。儘管Linux借鑑了Unix的許多設計並且實現了Unix的API,但是Linux沒有像其他Unix變種一樣直接使用Unix的原始碼。

儘管Linus被認為是Linux之父,但開發工作實際是由一個結構鬆散的工作組協力完成的,任何人都可以開發核心,其核心是自由(公開)軟體,它使用GPL 2.0作為限制條款——你可以自由地獲取核心程式碼並隨意修改它,但如果你希望釋出你修改過的核心,你也得保證讓得到你核心的人同時享有你曾經享受過的所有權利,當然,也包括全部的原始碼。

作業系統和核心簡介

通常一個核心由負責響應中斷的中斷服務程式,負責管理多個程式從而分享處理器時間的排程程式,負責管理程式地址空間的記憶體管理程式,和網路、程式間通訊等系統服務程式共同組成。

核心獨立於普通應用程式,它一般處於系統態,擁有受保護的記憶體空間和訪問硬體設計的所有許可權。這種系統態和被保護起來的記憶體空間,統稱為核心空間

相對的,應用程式在使用者空間執行,它們只能看到允許它們使用的部分系統資源,且只能使用某些特定的系統功能,不能直接訪問硬體,也不能訪問核心劃給別人的記憶體範圍。

在系統中執行的應用程式通過系統呼叫來與核心通訊,當一個應用程式執行一條系統呼叫,我們說核心正在代其執行

這裡寫圖片描述

核心還要管理系統的硬體裝置,當硬體裝置想和系統通訊時,首先要發出一個非同步的中斷訊號去打斷處理器的執行,繼而打斷核心的執行。中斷通常對應一箇中斷號,核心通過這個中斷號查詢相應的中斷服務程式,並呼叫這個程式相應和處理中斷。

中斷服務程式不在程式上下文中執行,而是在一個與程式無關的、專門的中斷上下文中執行。使用這樣一個專門的執行環境,是為了保證中斷服務程式能夠在第一時間相應和處理中斷請求,然後快速地退出。

每個處理器在任何指定時間點上的活動可概況為以下三者之一:

1.執行於使用者空間,執行使用者程式。
2.執行於核心空間,處於程式上下文,代表某個特定的程式執行。
3.執行於核心空間,處於中斷上下文,與任何程式無關,處理某個特定的中斷。

注:當CPU空閒時,核心就執行一個空程式,處於程式上下文,但執行於核心空間。

Linux核心和傳統Unix核心的比較

作業系統核心兩大陣營:單核心和微核心。

單核心

整個核心都在一個大核心地址空間上執行。

優點:
1.簡單。
2.高效:所有核心都在一個大的地址空間上,所以核心各個功能之間的呼叫和呼叫函式類似,幾乎沒有效能開銷。

缺點:
一個功能的崩潰會導致整個核心無法使用。

微核心

核心按功能被劃分成各個獨立的過程。每個過程獨立的執行在自己的地址空間上。

優點:
安全:核心的各種服務獨立執行,一種服務掛了不會影響其他服務。
可換出:允許一個伺服器為了另一個伺服器而換出。

缺點:
核心各個服務之間的呼叫涉及程式間的通訊,比較複雜且效率低。

Linux核心

Linux是一個單核心,不過,Linux汲取了微核心的精華:模組化設計、搶佔式核心、支援核心執行緒以及動態裝載核心模組的能力。(體現了Linux實用至上的原則)

Linux與傳統Unix系統之間的顯著差異:

1.支援動態載入核心模組;
2.支援對稱多處理(SMP)機制;
3.核心可以搶佔(preemptive),允許核心執行的任務有優先執行的能力;
4.核心不區分執行緒和其他的一般程式。對於核心來說,所有的程式都一樣——只不過是其中的一些共享資源而已。

Linux核心版本

核心的版本號主要由四個數字組成。比如版本號:2.6.26.1 其中,

2 - 主版本號

6 - 從版本號或副版本號

26 - 修訂版本號

1 - 穩定版本號

副版本號表示這個版本是穩定版(偶數)還是開發版(奇數),上面例子中的版本號是穩定版。

穩定的版本可用於企業級環境。

修訂版本號的升級包括BUG修正,新的驅動以及新的特性的追加。

穩定版本號主要是一些關鍵性BUG的修改。

相關文章