Linux 核心概述,linux核心概述
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)){ ...}
這裡一定要確保是否當前條件在絕大多數都會成立,如果你判斷正確,那麼程式效能將得到回覆提升,否則,反而會降低效能。
沒有記憶體保護機制
如果使用者程式試圖進行一次非法的記憶體訪問,核心會發現這個錯誤,並結束這個進程。然而如果核心自己非法訪問了記憶體,那後果就很難控制了,因為沒有其他的任何東西可以對核心進行監控。還有一點,核心中的記憶體都不分頁。
擴充
核心擁有整個系統的最高許可權,關於核心開發的特別注意事項還有很多,可以到更專業一點的文章中瞭解。