歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> Linux體系結構和Linux內核結構

Linux體系結構和Linux內核結構

日期:2017/3/2 17:16:00   编辑:Linux內核

/**

****************************************************************************** * @author 何問起 * @version V1.0.0 * @date 2016-02-23 ****************************************************************************** * < Beijing university of posts and telecommunications > ******************************************************************************* ****************************************************************************** * platform exynos4412 ******************************************************************************* **/

Linux體系結構

如下圖所示,Linux體系結構,從大的方面可以分為用戶空間(User Space)和內核空間(Kernel Space)。

用戶空間中包含了C庫,用戶的應用程序。在某些體系結構圖中還包含了shell,當然shell腳本也是Linux體系中不可缺少的一部分。

內核空間包括硬件平台、平台依賴代碼、內核、系統調用接口。

在任何一個現代操作系統中,都是分層的。為什麼需要分層呢?

從程序員的角度分析,將linux底層和和應用分開,將linux底層和應用分開,做應用的做應用,做底層的做底層,各干各的。經濟學的基本原理是,分工產生效率。

從安全性的角度分析,是為了保護內核。現代CPU通常都實現了不同的工作模式。

以ARM為例:ARM實現了7種工作模式,不同模式下CPU可以執行的指令或者訪問的寄存器不同: (1)用戶模式 usr (2)系統模式 sys(3)管理模式 svc(4)快速中斷 fiq(5)外部中斷 irq(6)數據訪問終止 abt(7)未定義指令異常。如果任何一個上層應用都可以調用都可以調用寄存器,那樣肯定是無法穩定執行的。而且因為出現了這個問題,出現了一個新的學科“現代操作系統”,如果大家感興趣可以看一下“現代操作系統”相關文章或者書籍。

以X86為例:X86實現了4個不同級別的權限,Ring0—Ring3 ;Ring0下可以執行特權指令,可以訪問IO設備;Ring3則有很多的限制

如果分析一下Android的,這方面做的更加“喪心病狂”,Android所有的APK應用程序,都是在Java虛擬機上面運行,應用程序更加遠離底層。

另外,用戶空間和內核空間是程序執行的兩種不同狀態,我們可以通過“系統調用”和“硬件中斷”來完成用戶空間到內核空間的轉移。

Linux內核結構

這一節,分析一下內核結構。

如下圖所示,是Linux內核結構圖。

SCI層(System Call Interface),這一層是給應用用戶空間提供一套標准的系統調用函數來訪問Linux。前面分析Linux體系結構的時候,介紹過任何一類現代操作系統都不會允許上層應用直接訪問底層,在Linux中,內核提供了一套標准接口,上層應用就可以通過這一套標准接口來訪問底層。

PM(Procees Management),這一部分包括具體創建創建進程(fork、exec),停止進程(kill、exit),並控制他們之間的通信(signal等)。還包括進程調度,控制活動進程如何共享CPU。這一部分是Linux已經做好的,在寫驅動的時候,只需要調用對應的函數即可實現這些功能,例如創建進程、進程通信等等。

MM(Memory Management),內存管理的主要作用是控制多個進程安全的共享內存區域。

VFS(Virtual File Systems),虛擬文件系統,隱藏各種文件系統的具體細節,為文件操作提供統一的接口。在Linux中“一切皆文件”,這些文件就是通過VFS來實現的。Linux提供了一個大的通用模型,使這個模型包含了所有文件系統功能的集合。如下圖所示,是一個虛擬文件系統的結構圖。

Device Drivers設備驅動,這一部分就是需要學習和掌握的。Linux內核中有大量的代碼在設備驅動程序部分,用於控制特定的硬件設備。

Linux驅動一般分為網絡設備、塊設備、字符設備、雜項設備,需要我們編寫的只有字符設備,雜項設備是不容易歸類的一種驅動,雜項設備和字符設備有很多重合的地方。

網絡協議棧,Linux內核中提供了豐富的網絡協議實現。

在學習Linux驅動之前需要理解和掌握linux體系結構和Linux內核結構 本人文字水平有限,所以就一步一步的寫和截圖,希望這種形式對大家有所幫助!
Copyright © Linux教程網 All Rights Reserved