Linux內(nèi)核簡介
內(nèi)核是操作系統(tǒng)的核心 ,其主要功能有:
- 響應(yīng)中斷,執(zhí)行中斷服務(wù)程序
- 管理多個進程,調(diào)度和分享處理器的時間
- 管理進程地址空間的內(nèi)存管理
- 網(wǎng)絡(luò)和進程間通信等系統(tǒng)服務(wù)程序
為了保護系統(tǒng),通常操作系統(tǒng)被劃分為內(nèi)核空間和用戶空間,內(nèi)核獨立于普通的應(yīng)用程序,一般處于系統(tǒng)態(tài),擁有受保護的內(nèi)存地址和硬件設(shè)備的所有訪問權(quán)限;相對的,應(yīng)用程序工作在用戶空間,僅能訪問系統(tǒng)允許他們使用的部分系統(tǒng)資源,并通過系統(tǒng)調(diào)用的方式對硬件設(shè)備進行訪問,同時不同的應(yīng)用程序不能訪問內(nèi)核劃給其他應(yīng)用程序的內(nèi)存范圍。
內(nèi)核的活動范圍:
- 運行于用戶空間,執(zhí)行用戶進程
- 運行于內(nèi)核空間,處于進程上下文,代表某個特定進程的執(zhí)行
- 運行于內(nèi)核空間,處于中斷上下文,與任何進程無關(guān),處理某個特定的中斷
單內(nèi)核和微內(nèi)核
操作系統(tǒng)內(nèi)核主要分為兩大陣營:單內(nèi)核和微內(nèi)核。
單內(nèi)核
內(nèi)核運行在一個單獨的地址空間,因此所有內(nèi)核服務(wù)都在一個大內(nèi)核地址空間運行,內(nèi)核間的通信開銷很小,所有內(nèi)核服務(wù)都運行在內(nèi)核態(tài),并處于同一地址空間,這種模式的優(yōu)點是簡單和性能高。大多數(shù)Unix系統(tǒng)都設(shè)計為單內(nèi)核。
微內(nèi)核
每個內(nèi)核服務(wù)是一個獨立的過程,叫做服務(wù)器,每個服務(wù)器都有各自的地址空間。僅有強烈要求特權(quán)服務(wù)的服務(wù)器會運行在特權(quán)模式下,其他服務(wù)器都運行在用戶空間。因此系統(tǒng)不能直接調(diào)用函數(shù),而是通過進程間通信(IPC)的方式進行消息傳遞。
單內(nèi)核和微內(nèi)核對比
單內(nèi)核由于所有的服務(wù)運行于同一地址空間,因此可以系統(tǒng)可以直接調(diào)用服務(wù),相對于微內(nèi)核減少了IPC時間,同時不需要上下文來回切換的開銷;但是單內(nèi)核由于所有的服務(wù)處于同一地址空間,這樣惡意程序容易通過內(nèi)核服務(wù)對系統(tǒng)進行攻擊。因此,Linux在單內(nèi)核的基礎(chǔ)上采用了微內(nèi)核的優(yōu)點。
Linux單內(nèi)核優(yōu)化
Linux是一個單內(nèi)核,其內(nèi)核運行在單獨的內(nèi)核地址空間,但是Linux汲取了微內(nèi)核的精華:模塊化設(shè)計、搶占式內(nèi)核、支持內(nèi)核線程和動態(tài)加載內(nèi)核模塊。
Linux內(nèi)核版本號
2.6.26.1:2為主版本號;6為從版本;26為修訂版本號;1,奇數(shù)為開發(fā)版本,若是偶數(shù)則為穩(wěn)定版本。
內(nèi)核開發(fā)的特點
相對于用戶空間內(nèi)應(yīng)用程序的開發(fā),內(nèi)核開發(fā)有一些獨特之處,因此需要注意以下事項:
- 不能訪問C庫和標(biāo)準(zhǔn)的C頭文件(個人理解這些都是系統(tǒng)調(diào)用部分的庫)
- 必須使用GNU C
- 缺乏用戶空間那樣的內(nèi)存保護機制
- 難以執(zhí)行浮點運算
- 每個進程只有一個很小的定長堆棧
- 由于支持異步中斷、搶占和SMP,必須時刻注意同步和并發(fā)
- 需要考慮可移植性