- Android系統級深入開發
- 韓超 梁泉
- 1539字
- 2018-12-29 13:39:28
3.1.1 標準的Linux操作系統
Linux類似于UNIX,是免費的,源代碼也是開放的,符合POSIX標準規范的操作系統。Linux擁有現代操作系統的所具有的內容,例如:真正的搶先式多任務處理、支持多用戶、內存保護、虛擬內存、支持對稱多處理機SMP(symmetric multiprocessing)、符合POSIX標準、支持TCP/IP、支持絕大多數的32位和64位CPU。目前,Linux操作系統不僅可以運行于桌面計算機的x86體系結構,也可以運行于ARM、MIPS、PowerPC等多種操作系統上。
1.Linux的核心部件
Linux的內核從邏輯上可以分成進程調度、進程間通信、內存管理、虛擬文件系統和網絡5個部分,它們之間的關系如圖3-1所示。

圖3-1 Linux內核的模塊關系
進程調度(Process Schedule)
進程調度控制進程對CPU的訪問。當需要選擇下一個進程運行時,由調度程序選擇最值得運行的進程。可運行進程實際上是僅等待CPU資源的進程,如果某個進程在等待其他資源,則該進程是不可運行進程。Linux使用了基于優先級的進程調度算法選擇新的運行進程。
進程調度的內容包含在Linux內核中的kernel目錄中。
進程間通信(IPC,Intre-Process Communication)
Linux的進程間通信包括FIFO、管道(pipe)等機制,以及System V IPC的共享內存(shm)、消息隊列(msg)和信號燈(sem)。
進程間通信的內容包含在Linux內核中的ipc目錄中。
內存管理(MM,Memory Management)
內存管理允許多個進程安全地共享主內存區域。Linux的內存管理支持虛擬內存,即在計算機中運行的程序,它的代碼、數據和堆棧的總量可以超過實際內存的大小,操作系統只是把當前使用的程序塊保留在內存中,其余的程序塊則保留在磁盤中。必要時,操作系統負責在磁盤和內存間交換程序塊。內存管理從邏輯上分為硬件無關部分和硬件有關部分。硬件無關部分提供了進程的映射和邏輯內存的對換;硬件相關的部分為內存管理硬件提供了虛擬接口。
內存管理的內容包含在Linux內核中的mm目錄中。
虛擬文件系統(VFS,Virtual File System)
虛擬文件系統隱藏了各種硬件的具體細節,為所有的設備提供了統一的接口,VFS提供了多達數十種不同的文件系統。虛擬文件系統可以分為邏輯文件系統和設備驅動程序。邏輯文件系統指Linux所支持的文件系統,包括ext2、fat、NFS等,設備驅動程序指為每一種硬件控制器所編寫的設備驅動程序模塊。
虛擬文件系統的內容包含在Linux內核中的vfs目錄中。
網絡(Net)
Linux是源于網絡的操作系統,提供了大量的內置網絡功能,并且網絡功能和內核的聯系非常緊密。Linux的網絡功能包括各種網絡協議和對網絡硬件的訪問。
網絡的內容包含在Linux內核中的net目錄中。
2.Linux的內核移植和驅動程序
由于Linux可以支持眾多的體系結構,因此Linux內核在眾多的體系結構中的移植是一個重要的部分。Linux將每種體系結構組成一個文件夾。
以ARM體系結構為例,又包含了各種不同的處理器,操作對于它們的代碼又不相同。因此,在arch/arm下包含了兩方面的代碼:與處理器無關的公共代碼、與處理器相關的部分。
在ARM體系結構中,又分為不同的機器。每一種ARM體系對應arch/arm目錄中一個名稱為mach-XXX的文件夾。
驅動程序也是Linux操作系統中的一個重要部分。在目前的Linux內核的源代碼中,驅動程序占據了大部分。在Linux操作系統中,系統調用是應用程序和內核(kernel)之間的接口,而設備驅動程序是操作系統內核和機器硬件之間的接口。設備驅動程序為應用程序屏蔽了硬件的細節,這樣在應用程序看來,硬件設備通常是一個標準的設備文件, 應用程序可以像操作普通文件一樣對硬件設備進行操作。
在Linux操作系統的驅動程序分成3種基本的類型:
字符設備(char device)
塊設備(block device)
網絡設備(net device)
這種分類方式是按照驅動程序對用戶空間的接口來區分的。在用戶空間,通過設備文件訪問字符設備和塊設備通過,通過socket訪問網絡設備。
此外,隨著Linux操作系統的發展,驅動程序也越來越復雜,某些驅動程序只有對內核的接口,沒有對用戶空間的接口。某些驅動程序,不需要使用設備節點的方式向用戶空間提供接口,而是使用sysfs的方式。
Linux中的驅動程序大都具有標準的架構,基于這個標準的架構可以構建出多種多樣的驅動程序。
- 數據科學實戰手冊(R+Python)
- Learn TypeScript 3 by Building Web Applications
- ThinkPHP 5實戰
- 編程卓越之道(卷3):軟件工程化
- Windows Server 2012 Unified Remote Access Planning and Deployment
- Java深入解析:透析Java本質的36個話題
- iOS應用逆向工程(第2版)
- 可解釋機器學習:模型、方法與實踐
- Mastering ROS for Robotics Programming
- Unity 2018 Augmented Reality Projects
- Python預測分析實戰
- Data Manipulation with R(Second Edition)
- 用Python動手學統計學
- 軟硬件綜合系統軟件需求建模及可靠性綜合試驗、分析、評價技術
- Linux Networking Cookbook