三、linux核心源**的目錄結構
如下圖所示,linux核心只是linux作業系統一部分。向上層提供系統呼叫介面。向下層,它管理系統的所有硬體裝置。
其核心功能就是:管理硬體裝置,**用程式使用。而現代計算機(無論是pc還是嵌入式系統)的標準組成,就是cpu、memory(記憶體和外存)、輸入輸出裝置、網路裝置和其它的外圍裝置。所以為了管理這些裝置,linux核心提出了如下的架構。
根據核心的核心功能,linux核心提出了5個子系統,分別負責如下的功能:
process scheduler,也稱作程序管理、程序排程。負責管理cpu資源,以便讓各個程序可以以盡量公平的方式訪問cpu。
memory manager,記憶體管理。負責管理memory(記憶體)資源,以便讓各個程序可以安全地共享機器的記憶體資源。另外,記憶體管理會提供虛擬記憶體的機制,該機制可以讓程序使用多於系統可用memory的記憶體,不用的記憶體會通過檔案系統儲存在外部非易失儲存器中,需要使用的時候,再取回到記憶體中。
vfs(virtual file system),虛擬檔案系統。linux核心將不同功能的外部裝置,例如disk裝置(硬碟、磁碟、nand flash、nor flash等)、輸入輸出裝置、顯示裝置等等,抽象為可以通過統一的檔案操作介面(open、close、read、write等)來訪問。這就是linux系統「一切皆是檔案」的體現(其實linux做的並不徹底,因為cpu、記憶體、網路等還不是檔案,如果真的需要一切皆是檔案,還得看貝爾實驗室正在開發的"plan 9」的)。
network,網路子系統。負責管理系統的網路裝置,並實現多種多樣的網路標準。
ipc(inter-process communication),程序間通訊。ipc不管理任何的硬體,它主要負責linux系統中程序之間的通訊。
程序排程是linux核心中最重要的子系統,它主要提供對cpu的訪問控制。因為在計算機中,cpu資源是有限的,而眾多的應用程式都要使用cpu資源,所以需要「程序排程子系統」對cpu進行排程管理。
程序排程子系統包括4個子模組(見下圖),它們的功能如下
scheduling policy,實現程序排程的策略,它決定哪個(或哪幾個)程序將擁有cpu。
architecture-specific schedulers,體系結構相關的部分,用於將對不同cpu的控制,抽象為統一的介面。這些控制主要在suspend和resume程序時使用,牽涉到cpu的暫存器訪問、彙編指令操作等。
architecture-independent scheduler,體系結構無關的部分。它會和「scheduling policy模組」溝通,決定接下來要執行哪個程序,然後通過「architecture-specific schedulers模組」resume指定的程序。
system call inte***ce,系統呼叫介面。程序排程子系統通過系統呼叫介面,將需要提供給使用者空間的介面開放出去,同時遮蔽掉不需要使用者空間程式關心的細節。
記憶體管理同樣是linux核心中最重要的子系統,它主要提供對記憶體資源的訪問控制。linux系統會在硬體物理記憶體和程序所使用的記憶體(稱作虛擬記憶體)之間建立一種對映關係,這種對映是以程序為單位,因而不同的程序可以使用相同的虛擬記憶體,而這些相同的虛擬記憶體,可以對映到不同的物理記憶體上。
記憶體管理子系統包括3個子模組(見下圖),它們的功能如下
architecture specific managers,體系結構相關部分。提供用於訪問硬體memory的虛擬介面。
system call inte***ce,系統呼叫介面。通過該介面,向使用者空間程式應用程式提供記憶體的分配、釋放,檔案的map等功能。
傳統意義上的檔案系統,是一種儲存和組織計算機資料的方法。它用易懂、人性化的方法(檔案和目錄結構),抽象計算機磁碟、硬碟等裝置上冰冷的資料塊,從而使對它們的查詢和訪問變得容易。因而檔案系統的實質,就是「儲存和組織資料的方法」,檔案系統的表現形式,就是「從某個裝置中讀取資料和向某個裝置寫入資料」。
隨著計算機技術的進步,儲存和組織資料的方法也是在不斷進步的,從而導致有多種型別的檔案系統,例如fat、fat32、ntfs、ext2、ext3等等。而為了相容,作業系統或者核心,要以相同的表現形式,同時支援多種型別的檔案系統,這就延伸出了虛擬檔案系統(vfs)的概念。vfs的功能就是管理各種各樣的檔案系統,遮蔽它們的差異,以統一的方式,為使用者程式提供訪問檔案的介面。
我們可以從磁碟、硬碟、nand flash等裝置中讀取或寫入資料,因而最初的檔案系統都是構建在這些裝置之上的。這個概念也可以推廣到其它的硬體裝置,例如記憶體、顯示器(lcd)、鍵盤、串列埠等等。我們對硬體裝置的訪問控制,也可以歸納為讀取或者寫入資料,因而可以用統一的檔案操作介面訪問。linux核心就是這樣做的,除了傳統的磁碟檔案系統之外,它還抽象出了裝置檔案系統、記憶體檔案系統等等。這些邏輯,都是由vfs子系統實現。
vfs子系統包括6個子模組(見下圖),它們的功能如下:
網路子系統在linux核心中主要負責管理各種網路裝置,並實現各種網路協議棧,最終實現通過網路連線其它系統的功能。在linux核心中,網路子系統幾乎是自成體系,它包括5個子模組(見下圖),它們的功能如下:
linux核心源**包括三個主要部分:
Linux核心結構
linux核心主要由五個子系統組成 程序排程,記憶體管理,虛擬檔案系統,網路介面,程序間通訊。1.程序排程 sched 控制程序對cpu的訪問。當需要選擇下乙個程序執行時,由排程程式選擇最值得執行的程序。可執行程序實際上是僅等待cpu資源的程序,如果某個程序在等待其它資源,則該程序是不可執行程序。l...
Linux核心結構
linux核心主要由五個子系統組成 程序排程,記憶體管理,虛擬檔案系統,網路介面,程序間通訊。1.程序排程 sched 控制程序對cpu的訪問。當需要選擇下乙個程序執行時,由排程程式選擇最值得執行的程序。可執行程序實際上是僅等待cpu資源的程序,如果某個程序在等待其它資源,則該程序是不可執行程序。l...
linux核心結構
1.程序排程 sched 控制程序對cpu的訪問。當需要選擇下乙個程序執行時,由排程程式選擇最值得執行的程序。可執行程序實際上是僅等待cpu資源的程序,如果某個程序在等待其它資源,則該程序是不可執行程序。linux使用了比較簡單的基於優先順序的程序排程演算法選擇新的程序。2.記憶體管理 mm 允許多...