歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> Linux 內核概述,linux內核概述

Linux 內核概述,linux內核概述

日期:2017/3/6 9:21:40   编辑:Linux內核

Linux 內核概述,linux內核概述


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)){
    ...
}

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

沒有內存保護機制

如果用戶程序試圖進行一次非法的內存訪問,內核會發現這個錯誤,並結束這個進程。然而如果內核自己非法訪問了內存,那後果就很難控制了,因為沒有其他的任何東西可以對內核進行監控。還有一點,內核中的內存都不分頁。

擴展

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

http://xxxxxx/Linuxjc/1152907.html TechArticle

Copyright © Linux教程網 All Rights Reserved