久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Linux內(nèi)核的整體架構(gòu)

 風(fēng)之library 2014-05-14

作者:蝸蝸 發(fā)布于:2014-2-21 13:23  

1. 前言

本文是“Linux內(nèi)核分析”系列文章的第一篇,,會以內(nèi)核的核心功能為出發(fā)點,描述Linux內(nèi)核的整體架構(gòu),,以及架構(gòu)之下主要的軟件子系統(tǒng),。之后,會介紹Linux內(nèi)核源文件的目錄結(jié)構(gòu),,并和各個軟件子系統(tǒng)對應(yīng),。

注:本文和其它的“Linux內(nèi)核分析”文章都基于如下約定: 
a) 內(nèi)核版本為Linux 3.10.29(該版本是一個long term的版本,會被Linux社區(qū)持續(xù)維護至少2年),,可以從下面的鏈接獲?。?a href="https://www./pub/linux/kernel/v3.x/linux-3.10.29.tar.xz">https://www./pub/linux/kernel/v3.x/linux-3.10.29.tar.xz
b) 鑒于嵌入式系統(tǒng)大多使用ARM處理器,因此涉及到體系結(jié)構(gòu)部分的內(nèi)容,,都以ARM為分析對象

2. Linux內(nèi)核的核心功能

如下圖所示,,Linux內(nèi)核只是Linux操作系統(tǒng)一部分。對下,,它管理系統(tǒng)的所有硬件設(shè)備,;對上,它通過系統(tǒng)調(diào)用,,向Library Routine(例如C庫)或者其它應(yīng)用程序提供接口,。

image

因此,,其核心功能就是:管理硬件設(shè)備,供應(yīng)用程序使用,。而現(xiàn)代計算機(無論是PC還是嵌入式系統(tǒng))的標(biāo)準(zhǔn)組成,,就是CPU、Memory(內(nèi)存和外存),、輸入輸出設(shè)備,、網(wǎng)絡(luò)設(shè)備和其它的外圍設(shè)備。所以為了管理這些設(shè)備,,Linux內(nèi)核提出了如下的架構(gòu),。

3. Linux內(nèi)核的整體架構(gòu)

3.1 整體架構(gòu)和子系統(tǒng)劃分

image

上圖說明了Linux內(nèi)核的整體架構(gòu)。根據(jù)內(nèi)核的核心功能,,Linux內(nèi)核提出了5個子系統(tǒng),分別負責(zé)如下的功能:

1. Process Scheduler,,也稱作進程管理,、進程調(diào)度。負責(zé)管理CPU資源,,以便讓各個進程可以以盡量公平的方式訪問CPU,。

2. Memory Manager,內(nèi)存管理,。負責(zé)管理Memory(內(nèi)存)資源,,以便讓各個進程可以安全地共享機器的內(nèi)存資源。另外,,內(nèi)存管理會提供虛擬內(nèi)存的機制,,該機制可以讓進程使用多于系統(tǒng)可用Memory的內(nèi)存,不用的內(nèi)存會通過文件系統(tǒng)保存在外部非易失存儲器中,,需要使用的時候,,再取回到內(nèi)存中。

3. VFS(Virtual File System),,虛擬文件系統(tǒng),。Linux內(nèi)核將不同功能的外部設(shè)備,例如Disk設(shè)備(硬盤,、磁盤,、NAND Flash、Nor Flash等),、輸入輸出設(shè)備,、顯示設(shè)備等等,抽象為可以通過統(tǒng)一的文件操作接口(open,、close,、read,、write等)來訪問。這就是Linux系統(tǒng)“一切皆是文件”的體現(xiàn)(其實Linux做的并不徹底,,因為CPU,、內(nèi)存、網(wǎng)絡(luò)等還不是文件,,如果真的需要一切皆是文件,,還得看貝爾實驗室正在開發(fā)的"Plan 9”的)。

4. Network,,網(wǎng)絡(luò)子系統(tǒng),。負責(zé)管理系統(tǒng)的網(wǎng)絡(luò)設(shè)備,并實現(xiàn)多種多樣的網(wǎng)絡(luò)標(biāo)準(zhǔn),。

5. IPC(Inter-Process Communication),進程間通信,。IPC不管理任何的硬件,,它主要負責(zé)Linux系統(tǒng)中進程之間的通信。

3.2 進程調(diào)度(Process Scheduler)

進程調(diào)度是Linux內(nèi)核中最重要的子系統(tǒng),,它主要提供對CPU的訪問控制,。因為在計算機中,CPU資源是有限的,,而眾多的應(yīng)用程序都要使用CPU資源,,所以需要“進程調(diào)度子系統(tǒng)”對CPU進行調(diào)度管理。

進程調(diào)度子系統(tǒng)包括4個子模塊(見下圖),,它們的功能如下:

scheduler

1. Scheduling Policy,,實現(xiàn)進程調(diào)度的策略,它決定哪個(或哪幾個)進程將擁有CPU,。

2. Architecture-specific Schedulers,,體系結(jié)構(gòu)相關(guān)的部分,用于將對不同CPU的控制,,抽象為統(tǒng)一的接口,。這些控制主要在suspend和resume進程時使用,牽涉到CPU的寄存器訪問,、匯編指令操作等。

3. Architecture-independent Scheduler,,體系結(jié)構(gòu)無關(guān)的部分,。它會和“Scheduling Policy模塊”溝通,,決定接下來要執(zhí)行哪個進程,然后通過“Architecture-specific Schedulers模塊”resume指定的進程,。

4. System Call Interface,系統(tǒng)調(diào)用接口,。進程調(diào)度子系統(tǒng)通過系統(tǒng)調(diào)用接口,,將需要提供給用戶空間的接口開放出去,,同時屏蔽掉不需要用戶空間程序關(guān)心的細節(jié),。

3.3 內(nèi)存管理(Memory Manager, MM)

內(nèi)存管理同樣是Linux內(nèi)核中最重要的子系統(tǒng),它主要提供對內(nèi)存資源的訪問控制,。Linux系統(tǒng)會在硬件物理內(nèi)存和進程所使用的內(nèi)存(稱作虛擬內(nèi)存)之間建立一種映射關(guān)系,,這種映射是以進程為單位,因而不同的進程可以使用相同的虛擬內(nèi)存,,而這些相同的虛擬內(nèi)存,,可以映射到不同的物理內(nèi)存上。

內(nèi)存管理子系統(tǒng)包括3個子模塊(見下圖),,它們的功能如下:

mman

1. Architecture Specific Managers,體系結(jié)構(gòu)相關(guān)部分,。提供用于訪問硬件Memory的虛擬接口,。

2. Architecture Independent Manager,體系結(jié)構(gòu)無關(guān)部分,。提供所有的內(nèi)存管理機制,,包括:以進程為單位的memory mapping,;虛擬內(nèi)存的Swapping,。

3. System Call Interface,系統(tǒng)調(diào)用接口,。通過該接口,,向用戶空間程序應(yīng)用程序提供內(nèi)存的分配、釋放,,文件的map等功能,。

3.4 虛擬文件系統(tǒng)(Virtual Filesystem, VFS)

傳統(tǒng)意義上的文件系統(tǒng),是一種存儲和組織計算機數(shù)據(jù)的方法,。它用易懂,、人性化的方法(文件和目錄結(jié)構(gòu)),抽象計算機磁盤,、硬盤等設(shè)備上冰冷的數(shù)據(jù)塊,,從而使對它們的查找和訪問變得容易,。因而文件系統(tǒng)的實質(zhì),就是“存儲和組織數(shù)據(jù)的方法”,,文件系統(tǒng)的表現(xiàn)形式,,就是“從某個設(shè)備中讀取數(shù)據(jù)和向某個設(shè)備寫入數(shù)據(jù)”。

隨著計算機技術(shù)的進步,,存儲和組織數(shù)據(jù)的方法也是在不斷進步的,,從而導(dǎo)致有多種類型的文件系統(tǒng),例如FAT,、FAT32,、NTFS、EXT2,、EXT3等等,。而為了兼容,操作系統(tǒng)或者內(nèi)核,,要以相同的表現(xiàn)形式,,同時支持多種類型的文件系統(tǒng),這就延伸出了虛擬文件系統(tǒng)(VFS)的概念,。VFS的功能就是管理各種各樣的文件系統(tǒng),,屏蔽它們的差異,以統(tǒng)一的方式,,為用戶程序提供訪問文件的接口,。

我們可以從磁盤、硬盤,、NAND Flash等設(shè)備中讀取或?qū)懭霐?shù)據(jù),,因而最初的文件系統(tǒng)都是構(gòu)建在這些設(shè)備之上的。這個概念也可以推廣到其它的硬件設(shè)備,,例如內(nèi)存,、顯示器(LCD)、鍵盤,、串口等等,。我們對硬件設(shè)備的訪問控制,也可以歸納為讀取或者寫入數(shù)據(jù),,因而可以用統(tǒng)一的文件操作接口訪問,。Linux內(nèi)核就是這樣做的,除了傳統(tǒng)的磁盤文件系統(tǒng)之外,,它還抽象出了設(shè)備文件系統(tǒng),、內(nèi)存文件系統(tǒng)等等。這些邏輯,,都是由VFS子系統(tǒng)實現(xiàn),。

VFS子系統(tǒng)包括6個子模塊(見下圖),,它們的功能如下:

vfs

1. Device Drivers,設(shè)備驅(qū)動,,用于控制所有的外部設(shè)備及控制器,。由于存在大量不能相互兼容的硬件設(shè)備(特別是嵌入式產(chǎn)品),所以也有非常多的設(shè)備驅(qū)動,。因此,,Linux內(nèi)核中將近一半的Source Code都是設(shè)備驅(qū)動,大多數(shù)的Linux底層工程師(特別是國內(nèi)的企業(yè))都是在編寫或者維護設(shè)備驅(qū)動,,而無暇估計其它內(nèi)容(它們恰恰是Linux內(nèi)核的精髓所在),。

2. Device Independent Interface, 該模塊定義了描述硬件設(shè)備的統(tǒng)一方式(統(tǒng)一設(shè)備模型),,所有的設(shè)備驅(qū)動都遵守這個定義,,可以降低開發(fā)的難度。同時可以用一致的形勢向上提供接口,。

3. Logical Systems,,每一種文件系統(tǒng),都會對應(yīng)一個Logical System(邏輯文件系統(tǒng)),,它會實現(xiàn)具體的文件系統(tǒng)邏輯,。

4. System Independent Interface,該模塊負責(zé)以統(tǒng)一的接口(快設(shè)備和字符設(shè)備)表示硬件設(shè)備和邏輯文件系統(tǒng),,這樣上層軟件就不再關(guān)心具體的硬件形態(tài)了,。

5. System Call Interface,系統(tǒng)調(diào)用接口,,向用戶空間提供訪問文件系統(tǒng)和硬件設(shè)備的統(tǒng)一的接口,。

3.5 網(wǎng)絡(luò)子系統(tǒng)(Net)

網(wǎng)絡(luò)子系統(tǒng)在Linux內(nèi)核中主要負責(zé)管理各種網(wǎng)絡(luò)設(shè)備,,并實現(xiàn)各種網(wǎng)絡(luò)協(xié)議棧,,最終實現(xiàn)通過網(wǎng)絡(luò)連接其它系統(tǒng)的功能。在Linux內(nèi)核中,,網(wǎng)絡(luò)子系統(tǒng)幾乎是自成體系,,它包括5個子模塊(見下圖),它們的功能如下:

net

1. Network Device Drivers,,網(wǎng)絡(luò)設(shè)備的驅(qū)動,,和VFS子系統(tǒng)中的設(shè)備驅(qū)動是一樣的。

2. Device Independent Interface,,和VFS子系統(tǒng)中的是一樣的,。

3. Network Protocols,實現(xiàn)各種網(wǎng)絡(luò)傳輸協(xié)議,,例如IP, TCP, UDP等等,。

4. Protocol Independent Interface,,屏蔽不同的硬件設(shè)備和網(wǎng)絡(luò)協(xié)議,以相同的格式提供接口(socket),。

5. System Call interface,,系統(tǒng)調(diào)用接口,向用戶空間提供訪問網(wǎng)絡(luò)設(shè)備的統(tǒng)一的接口,。

 

至于IPC子系統(tǒng),,由于功能比較單純,這里就不再描述了,。

4. Linux內(nèi)核源代碼的目錄結(jié)構(gòu)

Linux內(nèi)核源代碼包括三個主要部分:

1. 內(nèi)核核心代碼,,包括第3章所描述的各個子系統(tǒng)和子模塊,以及其它的支撐子系統(tǒng),,例如電源管理,、Linux初始化等

2. 其它非核心代碼,例如庫文件(因為Linux內(nèi)核是一個自包含的內(nèi)核,,即內(nèi)核不依賴其它的任何軟件,,自己就可以編譯通過)、固件集合,、KVM(虛擬機技術(shù))等

3. 編譯腳本,、配置文件、幫助文檔,、版權(quán)說明等輔助性文件

下圖示使用ls命令看到的內(nèi)核源代碼的頂層目錄結(jié)構(gòu),,具體描述如下。

kernel_src_tree

include/ ---- 內(nèi)核頭文件,,需要提供給外部模塊(例如用戶空間代碼)使用,。

kernel/ ---- Linux內(nèi)核的核心代碼,包含了3.2小節(jié)所描述的進程調(diào)度子系統(tǒng),,以及和進程調(diào)度相關(guān)的模塊,。

mm/ ---- 內(nèi)存管理子系統(tǒng)(3.3小節(jié))。

fs/ ---- VFS子系統(tǒng)(3.4小節(jié)),。

net/ ---- 不包括網(wǎng)絡(luò)設(shè)備驅(qū)動的網(wǎng)絡(luò)子系統(tǒng)(3.5小節(jié)),。

ipc/ ---- IPC(進程間通信)子系統(tǒng)。

arch// ---- 體系結(jié)構(gòu)相關(guān)的代碼,,例如arm, x86等等,。
    arch//mach- ---- 具體的machine/board相關(guān)的代碼。
    arch//include/asm ---- 體系結(jié)構(gòu)相關(guān)的頭文件,。
    arch//boot/dts ---- 設(shè)備樹(Device Tree)文件,。

init/ ---- Linux系統(tǒng)啟動初始化相關(guān)的代碼。
block/ ---- 提供塊設(shè)備的層次。
sound/ ---- 音頻相關(guān)的驅(qū)動及子系統(tǒng),,可以看作“音頻子系統(tǒng)”,。
drivers/ ---- 設(shè)備驅(qū)動(在Linux kernel 3.10中,設(shè)備驅(qū)動占了49.4的代碼量),。

lib/ ---- 實現(xiàn)需要在內(nèi)核中使用的庫函數(shù),,例如CRC、FIFO,、list,、MD5等。
crypto/ ----- 加密,、解密相關(guān)的庫函數(shù),。
security/ ---- 提供安全特性(SELinux)。
virt/ ---- 提供虛擬機技術(shù)(KVM等)的支持,。
usr/ ---- 用于生成initramfs的代碼,。
firmware/ ---- 保存用于驅(qū)動第三方設(shè)備的固件。

samples/ ---- 一些示例代碼,。
tools/ ---- 一些常用工具,,如性能剖析、自測試等,。

Kconfig, Kbuild, Makefile, scripts/ ---- 用于內(nèi)核編譯的配置文件,、腳本等。

COPYING ---- 版權(quán)聲明,。
MAINTAINERS ----維護者名單,。
CREDITS ---- Linux主要的貢獻者名單。
REPORTING-BUGS ---- Bug上報的指南,。

Documentation, README ---- 幫助,、說明文檔。

5. 附錄

5.1 參考資料

第3章各個子系統(tǒng)的架構(gòu)圖,,拷貝自如下的網(wǎng)頁:
http:///ossdocs/linux/kernel/a1/index.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多