歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> Linux內核工程導論之內核種類分析

Linux內核工程導論之內核種類分析

日期:2017/3/1 12:15:27   编辑:Linux內核

內核概覽

linux內核並不是唯一的內核,也並不是唯一的一種內核。實際上linux內核屬於Monolithic kernel的一個實現,這種內核還包括Unix系列(BSD、SunOS等),dos和windows 9x系列,還有OpenVMS,XTS-400,z/TPF等一些不常見的系統內核。

\

內核的種類包括:exokernels,nanokernels ,microkernels, hybrid kernels,Monolithic kernels,anykernel六種。windows NT(9x之後的所有)都屬於hybridkernels,因為他系統功能的一部分在內核中,一部分在用戶空間中。

那本內核本該提供什麼樣的系統功能呢?最核心的只有一個:資源管理。資源管理大致分為三種:CPU資管調度,內存管理,IO設備管理。

內核形成過程

試想我們在一個裸板上從頭寫一個操作系統要經過什麼步驟。第一步,我們肯定要把匯編的啟動代碼封裝一下,然後寫一些啟動的C代碼,內存需要匯編來初始化,才能向其中加載內容。

加載之後,我們可以在內存中執行代碼了,但是此時內存中是無章法的一大片連續塊而已。我們要使用c語言就必須為內存劃分塊(全局區,代碼區等),我們可以讓gcc去完成這個工作,通常要手動布局一下。當涉及到堆,涉及到很大的內存的時候,就需要考慮內存分配算法和頁的劃分了,有了頁的劃分就得有缺頁中斷的實現了。這部分就實現了內存管理。

然後我們需要初始化和使用外部的設備,由於外部的設備都是寄存器控制的,寄存器通常是功能復用的,通過寫入功能號來執行功能,通過查看一些寄存器的位來確定狀態(李如意pci這種總線硬件更復雜)。所以就需要封裝。這樣一封裝就形成了硬件抽象層,如果同樣是鼠標,有不同的商家的寄存器排列不同,那麼我們就得針對每一種鼠標實現一個驅動,然後驅動的上層接口與硬件抽象層相符。於是驅動和硬件抽象層的概念產生了。

實現如果到此為止,只實現了基本的硬件管理和硬件抽象層,nanokernel就產生了。

我們知道一個操作系統可以多進程,進程間還要通信,各個進程之間還要調度。內核裡實現看了進程概念這一步,就是microkernel。

再實現一些文件系統、網絡協議棧等就是Monolithickernel了,如果再用戶端也實現了一些系統級功能,就是hybrid kernels了。

exokernels和anykernel

exokernels是最微小的內核,其功能僅限於限制對資源訪問進行復用和保護。對硬件做最基本的抽象,允許應用無限權限的訪問硬件。也就是說exokernel只是為應用提供一種最小化的硬件抽象。怎麼使用是使用者說了算,亞久壓根不知道進程這種概念了。

netBSD實現了第一個anykernel(rumpkernel)。anykernel本身即是內核又是程序。作為程序他向基於他的其他程序提供內核的功能。作為內核,因為他本身就包含內核的功能。也就是說anykernel是在任何操作系統上可移植的。例如linux上可以使用rump kernel的tcp/ip協議棧,下層直接用dpdk,上層的應用調用rump kernel就可以完成socket協議棧操作。這本質是一種虛擬化方式,與其他的虛擬化不同的是,其他的虛擬化虛擬的是硬件,希望運行不同的軟件,而anykernel的思路虛擬的是軟件,可以運行在不同的操作系統上。rump kernel的實現包含了文件系統、協議棧和設備管理。配合XEN使用的話,就可以做到。

Copyright © Linux教程網 All Rights Reserved