內(nèi)核是操作系統(tǒng)的最核心最重要的模塊,是操作系統(tǒng)首先加載到內(nèi)存的部分,在保證盡可能小的內(nèi)存使用的同時要盡可能多的為操作系統(tǒng)的應(yīng)用程序以及其他部分提供基本的服務(wù),內(nèi)核代碼通常是被加載到內(nèi)存的保護區(qū)域,從而防止應(yīng)用直接訪問內(nèi)核的內(nèi)存區(qū)域,起到應(yīng)用和內(nèi)核隔離的作用,保證了操作系統(tǒng)的可靠穩(wěn)定。 嚴(yán)格地說,內(nèi)核并不是計算機操作系統(tǒng)中必要的組成部分,但是為了抽象出統(tǒng)一的硬件操作接口,幾乎每個操作系統(tǒng)都會有一個內(nèi)核,比如Linux內(nèi)核就被廣泛的使用在Linux,F(xiàn)reeBSD,Android等操作系統(tǒng)上。 內(nèi)核負(fù)責(zé)哪些內(nèi)容 內(nèi)核是連接硬件和應(yīng)用的橋梁。通常來說,內(nèi)核負(fù)責(zé)的內(nèi)容包括:
兩個主要內(nèi)核架構(gòu) 1 宏內(nèi)核架構(gòu)(Monolithic Kernel) 在此類內(nèi)核架構(gòu)的早期階段,所有基本的系統(tǒng)服務(wù)(如進程和內(nèi)存管理,中斷處理等)都打包到內(nèi)核空間中的單個模塊中。這種類型的體系結(jié)構(gòu)存在一些嚴(yán)重的缺點,例如:內(nèi)核的大小非常大;可維護性很差;修復(fù)一個錯誤或添加某個新功能可能導(dǎo)致重新編譯整個內(nèi)核,耗費數(shù)小時。 在現(xiàn)代的宏內(nèi)核架構(gòu)中,內(nèi)核由可以動態(tài)加載和卸載的不同模塊組成。這種模塊化方法可以輕松擴展操作系統(tǒng)的功能。內(nèi)核的可維護性變得非常容易,因為每當(dāng)特定模塊中發(fā)生更改或錯誤修復(fù)后,只需要加載和卸載相關(guān)的模塊。沒有必要重新編譯整個內(nèi)核。此外,這種動態(tài)加載模塊的方式為各種平臺(例如嵌入式設(shè)備等)裁剪內(nèi)核變得非常容易,因為我們可以輕松卸載我們不想要的模塊。我們熟知的Linux內(nèi)核就是宏內(nèi)核。 2 微內(nèi)核架構(gòu)(Micro Kernel) 這種內(nèi)核架構(gòu)主要為了解決不斷增長的內(nèi)核代碼大小的問題,因為在宏內(nèi)核中不能很有效的進行控制。微內(nèi)核架構(gòu)允許在用戶空間運行設(shè)備驅(qū)動程序,協(xié)議棧,文件系統(tǒng)等基本服務(wù)。這減少了內(nèi)核代碼的大小,并且還提高了操作系統(tǒng)的安全性和穩(wěn)定性,因為我們只在內(nèi)核中運行最少的代碼。假如網(wǎng)絡(luò)服務(wù)等基本服務(wù)因緩沖區(qū)溢出而崩潰,那么只有網(wǎng)絡(luò)服務(wù)的內(nèi)存會被破壞,系統(tǒng)的其余部分仍然可以運行。 在微內(nèi)核架構(gòu)中,操作系統(tǒng)所有基礎(chǔ)的服務(wù)都作為戶空間的一部分,系統(tǒng)中的其他程序通過進程間通信(IPC)使用這些服務(wù)。例如:有用于設(shè)備管理的驅(qū)動,網(wǎng)絡(luò)協(xié)議棧,文件系統(tǒng),圖形管理等服務(wù)。微內(nèi)核服務(wù)本質(zhì)上是一些守護進程,除了內(nèi)核授予它們中的一些特權(quán)來與物理內(nèi)存的某些部分進行交互,否則大多數(shù)程序都不能與這些部分進行交互。授予特權(quán)的服務(wù)(尤其是設(shè)備驅(qū)動服務(wù))可以直接與硬件交互。 那么,微內(nèi)核架構(gòu)在內(nèi)核空間中推薦的最低限度是什么,或者說最基本的微內(nèi)核需要包括什么?
除此之外,所有其他基本服務(wù)都可以成為用戶空間的一部分,并且可以以服務(wù)的形式運行。 總結(jié),不管是微內(nèi)核還是宏內(nèi)核,內(nèi)核的主要就是在硬件或底層接口和應(yīng)用程序之間起到橋梁的作用,隔離用戶空間和內(nèi)核空間。保證了操作系統(tǒng)的穩(wěn)定性。 |
|