- Android底層接口與驅動開發技術詳解
- 陳強
- 1659字
- 2019-10-12 15:38:29
1.5.1 Linux內核的體系結構
圖1-2所示為一個完整操作系統最基本的視圖,由此可見,內核的作用是將應用程序和硬件分離開。
內核的主要任務是負責與計算機硬件進行交互,實現對硬件的編程控制和接口操作,調度對硬件資源的訪問。除此之外,內核為用戶應用程序提供一個高級的執行環境和訪問硬件的虛擬接口。其實提供硬件的兼容性是內核的設計目標之一,幾乎所有的硬件都可以得到Linux的支持,只要不是為其他操作系統所定制。
與硬件兼容性相關的是可移植性,即在不同的硬件平臺上運行Linux的能力。從最初只支持標準IBM兼容機上的Intel X86架構到現在可以支持Alpha、ARM、MIPS、PowerPC等幾乎所有硬件平臺,如此廣泛的平臺支持之所以能夠成功,部分原因在于內核清晰地劃分了體系相關部分和體系無關部分。
圖1-3所示為Linux操作系統的基本視圖。由此可見,Linux內核分為如下兩部分。
(1)體系相關部分。這部分內核為體系結構和硬件所特有。
(2)體系無關部分。這部分內核是可移植的。體系無關部分通常會定義與體系相關部分的接口,這樣,內核向新的體系結構移植的過程就變成確認這些接口的特性并將它們加以實現的過程。

圖1-2 操作系統的基本視圖

圖1-3 Linux操作系統的基本視圖
用戶應用程序和內核之間的聯系是通過它和內核的中間層——標準C庫來實現,標準C庫函數是建立在內核提供的系統調用基礎上的。通過標準C庫,以及內核體系無關部分與體系相關部分的接口,用戶應用程序和部分內核都成為可移植的。根據上述描述,下面給出Linux操作系統的標準視圖,具體如圖1-4所示。

圖1-4 Linux系統的標準視圖
在上述Linux系統的標準視圖中,主要構成模塊的具體說明如下。
(1)系統調用接口
為了與用戶應用程序進行交互,內核提供了一組系統調用接口,應用程序通過這組接口可以訪問系統硬件和各種操作系統資源。系統調用接口層在用戶應用程序和內核之間添加一個中間層,在此扮演一個函數調用多路復用和多路分解器的角色。
(2)進程管理
進程管理負責創建和銷毀進程,并處理它們之間的互相聯系(進程間通信),同時負責安排調度它們去分享CPU。進程管理部分實現了一個進程世界的抽象,這個進程世界類似人類世界,只不過我們人類世界里的個體是人,而在進程世界里則是一個一個的進程,人與人之間通過書信、手機、網絡等進行交互,而各個進程之間則是通過不同方式的進程間通信,我們所有人都在分享同一個地球,而所有進程都在分享一個或多個CPU。
(3)內存管理
在進程世界里,內存是重要的資源之一。因此,管理內存的策略與方式是決定系統性能的一個關鍵因素。內核的內存管理部分根據不同的需要,提供了包括malloc/free在內的許多簡單或者復雜的接口,并為每個進程都提供了一個虛擬的地址空間,基本上實現虛擬內存對進程的按需分配。
(4)虛擬文件系統
虛擬文件系統為用戶空間提供了文件系統接口,同時又為各個具體的文件系統提供通用的接口抽象。在VFS上面,是對諸如open、close、read和write之類函數的一個通用API抽象,在VFS下面則是具體的文件系統,它們定義了上層函數的實現方式。
通過虛擬文件系統,用戶可以利用標準的Linux文件系統調用對不同介質上的不同文件系統進行操作。應該說,VFS是內核在各種具體的文件系統上建立的一個抽象層,它提供一個通用的文件系統模型,而該模型囊括了用戶所能想到的所有文件系統的行為。
(5)網絡功能
網絡子系統處理數據包的收集、標識、分發,路由和地址的解析等所有網絡有關的操作。socket層是網絡子系統的標準API,它為各種網絡協議提供一個用戶接口。
(6)設備驅動程序
操作系統的目的在于為用戶提供一種方便訪問硬件的途徑,因此,幾乎每一個系統操作最終都會映射到物理的硬件設備上。除了CPU、內存等有限的幾個對象,所有設備的訪問控制操作都要由相關的代碼來完成,這些代碼就是所謂的設備驅動程序。
(7)代碼
這里的代碼需要依賴體系結構,因為部分內核代碼是體系相關的,在“./linux/arch”子目錄中定義內核源代碼中依賴于體系結構的部分,其中包含對應各種特定體系結構的子目錄。比如,對于一個典型的桌面系統來說,使用的是i386目錄。
每個特定體系結構對應的子目錄又包含很多下級子目錄,分別關注內核中的一個特定方面,如引導、內核、內存管理等。
- Servlet/JSP深入詳解
- Essential Angular
- STM32F0實戰:基于HAL庫開發
- Python高效開發實戰:Django、Tornado、Flask、Twisted(第3版)
- C程序設計案例教程
- GeoServer Beginner's Guide(Second Edition)
- Nginx Lua開發實戰
- Mastering Git
- Kotlin Programming By Example
- Android編程權威指南(第4版)
- INSTANT LESS CSS Preprocessor How-to
- Visual C++程序設計全程指南
- Beginning PHP
- Selenium自動化測試實戰:基于Python
- Learning Adobe Muse