#如下圖所示,Linux體系結構,從大的方面可以分成使用者空間(User Space)和核心空間(Kernel Space)。
使用者空間包含C函式庫和使用者的應用程序,有些體系結構圖中也包含shell,當然shell腳本也是Linux體系中不可或缺的一部分。
核心空間包括硬體平台、平台依賴程式碼、核心和系統呼叫介面。
在任何一個現代作業系統中,都是分層的。為什麼需要分層呢?從程式設計師的角度來看,將Linux底層和應用程式分開可以讓各自專注於自己的領域,從而提高效率。從安全性的角度來看,分層是為了保護核心。現代CPU通常實作了不同的工作模式,例如ARM實作了7種工作模式,不同模式下CPU可以執行的指令或存取的暫存器不同。如果所有的上層應用程式都可以隨意呼叫暫存器,那麼作業系統就無法穩定地執行。因此,作業系統出現了一個新的學科—「現代作業系統」。
在X86架構中,實作了4個不同層級的權限,即Ring0到Ring3。在Ring0權限下,可以執行特權指令,可以存取IO設備,而在Ring3權限下則有許多限制。
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核心中提供了豐富的網路協定實作。
在學習Linux驅動程式之前需要先理解並掌握linux體系結構和Linux核心結構
以上是詳解Linux體系結構與核心結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!