天天看點

Linux 核心概述 - Linux Kernel

Linux 核心學習筆記整理。

Unix

unix 已有40曆史,但計算機科學家仍認為其是現存作業系統中最大和最優秀的系統,它已成為一種傳奇的存在,曆經時間的考驗卻依然聲名不墜。

1973 年,在用 C 語言重寫了 Unix 系統後,大量的Unix衍生版本開始出現,許多公司把 unix 移植到新的機型上,開發者們都按照自己的方式不斷增強系統的功能。Unix 系統設計簡潔并在釋出時提供源代碼,是以許多團體都對其進行了進一步的開發。加州大學伯克利分校便是其中影響最大的一個。在BSD基礎上,很多廠商也推出了自己的unix ,如 SunOS、HP-UX 等。1991 年,linus 在Internet 上釋出了它的 Unix 。從此 linux 便起航了,Linux很快吸引了衆多開發者、黑客對其代碼進行修改和完善,由于其開源性,Linux 迅速成為多人合作的開源項目。

作業系統與核心

作業系統包括核心、裝置驅動程式、啟動引導程式、指令行shell、基本系統工具等部分。核心是作業系統的真正核心,負責硬體裝置管理、配置設定系統資源等任務。核心一般處于系統态,擁有受保護的記憶體空間和通路硬體裝置的所有權限,這種系統态和被保護起來的空間統稱為核心空間。應用程式在使用者空間隻能看到允許它們通路的部分系統資源、隻能使用某些特定的系統功能,無法直接通路硬體、也不能通路核心劃給别人的記憶體範圍,還有一些其他的限制。應用程式通過 系統調用 與核心通信,讓核心代其完成不同的任務。

核心還負責管理系統的硬體裝置。當硬體裝置想要和系統通信的時候,它會發出一個異步的中斷信号以打斷處理器執行,繼而打斷核心執行。中斷通常對應着一個中斷号,核心通過中斷号查找相應的中斷服務程式,并調用這個程式響應和進行中斷。中斷服務程式在一個與所有程序都無關的、專門進行中斷的上下文中運作,以保證中斷服務程式能在第一時間響應和進行中斷請求并快速退出。

單核心與微核心

作業系統的核心可分為兩大陣營:單核心和微核心。單核心就是把它從整體上作為一個大的過程來實作,同時也運作在一個單獨的位址空間上,其特點是高性能。微核心并不作為一個單獨的大過程來實作,其根據功能不同劃分成多個獨立的過程,其特點是各過程獨立運作,避免了一個子產品出現問題後禍及另一個。其相比單核心設計多了子產品間的通信機制等環節,而單核心卻沒有這些消息傳遞的開銷。是以,大部分基于微核心的系統都讓大部分或全部功能過程全部運作在核心,如此便可以直接調用函數,消除頻繁的上下文切換。windowNT、Mach就是微核心的典型執行個體。Linux 是單核心,但是其汲取了微核心的精華部分。Linux是子產品化的、多線程的以及核心本身可排程的作業系統。

核心版本号

主版本号.副版本号.修訂版本号

副版本号反映了該核心是一個穩定版本還是一個處于開發中的版本:如果該數字是偶數,那麼此版本就是穩定版;如果是奇數,那麼他就是開發版。

擷取源碼

官網位址:www.kernel.org

倉庫位址:git.kernel.org

編譯核心

由于從未配置過核心,是以使用預設配置編譯核心,據說這個預設配置是 Linus 本人的配置。

$make defconfig       

如果要減少編譯過程中的輸出資訊,可以使用下列指令

$make > .. /detritus      

如此一來,如果你要檢視編譯資訊,可檢視該檔案。當然你也可以直接 $make > /dev/null 把無用資訊重定向。

安裝核心

% make modules_install      

上面指令可以把所有已編譯的子產品安裝到正确的主目錄。編譯時會在核心代碼根目錄生成一個 system.map 檔案,這是一個符号對照表。

核心開發

核心開發對性能的要求非常高。核心開發不能通路 C 庫,也不能通路标準的 C 頭檔案。核心開發必須使用 GNU C,對核心來說完整的 C 庫(甚至是一個子集)太大且太低效了。但大部分常用的 C 庫函數在核心中都已經得到了實作。Linux 的核心混合使用了 C 語言和彙編語言,在靠近底層或對執行時間要求嚴格的地方,一般使用的都是彙編語言。GCC 支援使用 asm() 指令在 C 中嵌入彙報代碼。

條件分支優化

對于條件選擇語句,在經常條件經常出現或極少出現的時候,編譯前可根據分支聲明語句對條件分支進行優化。示例:

/* 把一個條件标記成極少發生的分支。 */
if (unlikely(err)){
    ...
}      

這裡一定要確定是否目前條件在絕大多數都會成立,如果你判斷正确,那麼程式性能将得到答複提升,否則,反而會降低性能。

沒有記憶體保護機制

如果使用者程式試圖進行一次非法的記憶體通路,核心會發現這個錯誤,并結束這個程序。然而如果核心自己非法通路了記憶體,那後果就很難控制了,因為沒有其他的任何東西可以對核心進行監控。還有一點,核心中的記憶體都不分頁。

擴充

核心擁有整個系統的最高權限,關于核心開發的特别注意事項還有很多,可以到更專業一點的文章中了解。

轉載于:https://www.cnblogs.com/kelsen/p/5808879.html

繼續閱讀