初探Linux內核

今日想學習有關linux的知識,結果上IBM的網站查看有關linux的相關信息http://www.ibm.com/developerworks/cn/linux/l-linux-kernel/index.htmlhtml

結果發現GNU纔是Linux主要的體系結構,其分爲User Space和Kernel Space,主要的系統體系結構圖以下。linux

 GNU/Linux 操做系統的基本體系結構

最上面是用戶(或應用程序)空間。這是用戶應用程序執行的地方。用戶空間之下是內核空間,Linux 內核正是位於這裏。GNU C Library (glibc)也在這裏。它提供了鏈接內核的系統調用接口,還提供了在用戶空間應用程序和內核之間進行轉換的機制。這點很是重要,由於內核和用戶空間的應用程序使用的是不一樣的保護地址空間。每一個用戶空間的進程都使用本身的虛擬地址空間,而內核則佔用單獨的地址空間。 算法

Linux 內核能夠進一步劃分紅 3 層。最上面是系統調用接口,它實現了一些基本的功能,例如 readwrite。系統調用接口之下是內核代碼,能夠更精確地定義爲獨立於體系結構的內核代碼。這些代碼是 Linux 所支持的全部處理器體系結構所通用的。在這些代碼之下是依賴於體系結構的代碼,構成了一般稱爲 BSP(Board Support Package)的部分。這些代碼用做給定體系結構的處理器和特定於平臺的代碼。編程


Linux內核有許多的子系統,其中主要的子系統以下:緩存

Linux 內核的一個體繫結構透視圖

-系統調用接口網絡

SCI 層提供了某些機制執行從用戶空間到內核的函數調用。正如前面討論的同樣,這個接口依賴於體系結構,甚至在相同的處理器家族內也是如此。SCI 其實是一個很是有用的函數調用多路複用和多路分解服務。在 ./linux/kernel 中您能夠找到 SCI 的實現,並在 ./linux/arch 中找到依賴於體系結構的部分。socket


-進程管理ide

進程管理的重點是進程的執行。在內核中,這些進程稱爲線程,表明了單獨的處理器虛擬化(線程代碼、數據、堆棧和 CPU 寄存器)。在用戶空間,一般使用進程 這個術語,不過 Linux 實現並無區分這兩個概念(進程和線程)。內核經過 SCI 提供了一個應用程序編程接口(API)來建立一個新進程(fork、exec 或 Portable Operating System Interface [POSIX] 函數),中止進程(kill、exit),並在它們之間進行通訊和同步(signal 或者 POSIX 機制)。函數

進程管理還包括處理活動進程之間共享 CPU 的需求。內核實現了一種新型的調度算法,無論有多少個線程在競爭 CPU,這種算法均可以在固定時間內進行操做。這種算法就稱爲 O(1) 調度程序,這個名字就表示它調度多個線程所使用的時間和調度一個線程所使用的時間是相同的。 O(1) 調度程序也能夠支持多處理器(稱爲對稱多處理器或 SMP)。您能夠在 ./linux/kernel 中找到進程管理的源代碼,在 ./linux/arch 中能夠找到依賴於體系結構的源代碼。學習


-內存管理

內核所管理的另一個重要資源是內存。爲了提升效率,若是由硬件管理虛擬內存,內存是按照所謂的內存頁 方式進行管理的(對於大部分體系結構來講都是 4KB)。Linux 包括了管理可用內存的方式,以及物理和虛擬映射所使用的硬件機制。

不過內存管理要管理的可不止 4KB 緩衝區。Linux 提供了對 4KB 緩衝區的抽象,例如 slab 分配器。這種內存管理模式使用 4KB 緩衝區爲基數,而後從中分配結構,並跟蹤內存頁使用狀況,好比哪些內存頁是滿的,哪些頁面沒有徹底使用,哪些頁面爲空。這樣就容許該模式根據系統須要來動態調整內存使用。

爲了支持多個用戶使用內存,有時會出現可用內存被消耗光的狀況。因爲這個緣由,頁面能夠移出內存並放入磁盤中。這個過程稱爲交換,由於頁面會被從內存交換到硬盤上。內存管理的源代碼能夠在 ./linux/mm 中找到。


-虛擬文件系統

虛擬文件系統(VFS)是 Linux 內核中很是有用的一個方面,由於它爲文件系統提供了一個通用的接口抽象。

VFS 在用戶和文件系統之間提供了一個交換層

在 VFS 上面,是對諸如 open、close、read 和 write 之類的函數的一個通用 API 抽象。在 VFS 下面是文件系統抽象,它定義了上層函數的實現方式。它們是給定文件系統(超過 50 個)的插件。文件系統的源代碼能夠在 ./linux/fs 中找到。

文件系統層之下是緩衝區緩存,它爲文件系統層提供了一個通用函數集(與具體文件系統無關)。這個緩存層經過將數據保留一段時間(或者隨即預先讀取數據以便在須要是就可用)優化了對物理設備的訪問。緩衝區緩存之下是設備驅動程序,它實現了特定物理設備的接口。


-網絡堆棧

網絡堆棧在設計上遵循模擬協議自己的分層體系結構。回想一下,Internet Protocol (IP) 是傳輸協議(一般稱爲傳輸控制協議或 TCP)下面的核心網絡層協議。TCP 上面是 socket 層,它是經過 SCI 進行調用的。

socket 層是網絡子系統的標準 API,它爲各類網絡協議提供了一個用戶接口。從原始幀訪問到 IP 協議數據單元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 層提供了一種標準化的方法來管理鏈接,並在各個終點之間移動數據。內核中網絡源代碼能夠在 ./linux/net 中找到。


-設備驅動程序

Linux 內核中有大量代碼都在設備驅動程序中,它們可以運轉特定的硬件設備。Linux 源碼樹提供了一個驅動程序子目錄,這個目錄又進一步劃分爲各類支持設備,例如 Bluetooth、I2C、serial 等。設備驅動程序的代碼能夠在 ./linux/drivers 中找到。


-依賴體系結構的代碼

儘管 Linux 很大程度上獨立於所運行的體系結構,可是有些元素則必須考慮體系結構才能正常操做並實現更高效率。./linux/arch 子目錄定義了內核源代碼中依賴於體系結構的部分,其中包含了各類特定於體系結構的子目錄(共同組成了 BSP)。對於一個典型的桌面系統來講,使用的是 i386 目錄。每一個體繫結構子目錄都包含了不少其餘子目錄,每一個子目錄都關注內核中的一個特定方面,例如引導、內核、內存管理等。這些依賴體系結構的代碼能夠在 ./linux/arch 中找到。

相關文章
相關標籤/搜索