![]() |
|
嵌入式linux內核的五個子系統 |
|
Linux內核主要由進程調度(SCHED)、內存管理(MM)、虛擬文件系統(VFS)、網絡接口(NET)和進程間通信(IPC)5個子系統組成,如圖1所示。 1.進程調度 進程調度控制系統中的多個進程對CPU的訪問,使得多個進程能在CPU中“微觀串行,宏觀并行”地執行。進程調度處于系統的中心位置,內核中其他的子系統都依賴它,因為每個子系統都需要掛起或恢復進程。 如上圖2所示,Linux的進程在幾個狀態間進行切換。在設備驅動編程中,當請求的資源不能得到滿足時,驅動一般會調度其他進程執行,并使本進程進入睡眠狀態,直到它請求的資源被釋放,才會被喚醒而進入就緒態。睡眠分成可被打斷的睡眠和不可被打斷的睡眠,兩者的區別在于可被打斷的睡眠在收到信號的時候會醒。 在設備驅動編程中,當請求的資源不能得到滿足時,驅動一般會調度其他進程執行,其對應進程進入睡眠狀態,直到它請求的資源被釋放,才會被喚醒而進入就緒態。 設備驅動中,如果需要幾個并發執行的任務,可以啟動內核線程,啟動內核線程的函數為: pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); 2.內存管理 內存管理的主要作用是控制多個進程安全地共享主內存區域。當CPU提供內存管理單元(MMU)時,Linux內存管理完成為每個進程進行虛擬內存到物理內存的轉換。Linux 2.6引入了對無MMU CPU的支持。 如下圖3所示,一般而言,Linux的每個進程享有4GB的內存空間,0~3GB屬于用戶空間,3~4GB屬于內核空間,內核空間對常規內存、I/O設備內存以及高端內存存在不同的處理方式。 3.虛擬文件系統 如下圖4所示,Linux虛擬文件系統(VFS)隱藏各種了硬件的具體細節,為所有的設備提供了統一的接口。而且,它獨立于各個具體的文件系統,是對各種文件系統的一個抽象,它使用超 級塊super block存放文件系統相關信息,使用索引節點inode存放文件的物理信息,使用目錄項dentry存放文件的邏輯信息。 4.網絡接口 網絡接口提供了對各種網絡標準的存取和各種網絡硬件的支持。如下圖5所示,在Linux中網絡接口可分為網絡協議和網絡驅動程序,網絡協議部分負責實現每一種可能的網絡傳輸協議,網絡設備驅動程序負責與硬件設備通信,每一種可能的硬件設備都有相應的設備驅動程序。 5.進程通信 進程通信支持提供進程之間的通信,Linux支持進程間的多種通信機制,包含信號量、共享內存、管道等,這些機制可協助多個進程、多資源的互斥訪問、進程間的同步和消息傳遞。 Linux內核的5個組成部分之間的依賴關系如下。 ·進程調度與內存管理之間的關系:這兩個子系統互相依賴。在多道程序環境下,程序要運行必須為之創建進程,而創建進程的第一件事情,就是將程序和數據裝入內存。 ·進程間通信與內存管理的關系:進程間通信子系統要依賴內存管理支持共享內存通信機制,這種機制允許兩個進程除了擁有自己的私有空間,還可以存取共同的內存區域。 ·虛擬文件系統與網絡接口之間的關系:虛擬文件系統利用網絡接口支持網絡文件系統(NFS),也利用內存管理支持RAMDISK設備。 ·內存管理與虛擬文件系統之間的關系:內存管理利用虛擬文件系統支持交換,交換進程(swapd)定期由調度程序調度,這也是內存管理依賴于進程調度的惟一原因。當一個進程存取的內存映射被換出時,內存管理向文件系統發出請求,同時,掛起當前正在運行的進程。 除了這些依賴關系外,內核中的所有子系統還要依賴于一些共同的資源。這些資源包括所有子系統都用到的例程,如分配和釋放內存空間的函數、打印警告或錯誤信息的函數及系統提供的調試例程等。 熱點鏈接:
1、如何分析Linux內核源碼 |