/**linux
以下圖所示,Linux體系結構,從大的方面能夠分爲用戶空間(User Space)和內核空間(Kernel Space)。 程序員
用戶空間中包含了C庫,用戶的應用程序。在某些體系結構圖中還包含了shell,固然shell腳本也是Linux體系中不可缺乏的一部分。shell
內核空間包括硬件平臺、平臺依賴代碼、內核、系統調用接口。安全
在任何一個現代操做系統中,都是分層的。爲何須要分層呢?網絡
從程序員的角度分析,將linux底層和和應用分開,將linux底層和應用分開,作應用的作應用,作底層的作底層,各幹各的。經濟學的基本原理是,分工產生效率。函數
從安全性的角度分析,是爲了保護內核。現代CPU一般都實現了不一樣的工做模式。post
以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則有不少的限制spa
若是分析一下Android的,這方面作的更加「喪心病狂」,Android全部的APK應用程序,都是在Java虛擬機上面運行,應用程序更加遠離底層。操作系統
另外,用戶空間和內核空間是程序執行的兩種不一樣狀態,咱們能夠經過「系統調用」和「硬件中斷」來完成用戶空間到內核空間的轉移。
這一節,分析一下內核結構。
以下圖所示,是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內核中提供了豐富的網絡協議實現。