女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當前位置:首頁 > 嵌入式 > 技術讓夢想更偉大
[導讀]??關注、星標公眾號,直達精彩內容來源:土豆居士一、前言本文是“Linux內核源碼分析”系列的專業(yè),會以內核的核心功能為出發(fā)點,描述Linux內核的整體架構,以及架構之下主要的軟件子系統(tǒng)。之后,會介紹Linux內核源文件的目錄結構,并和各個軟件子系統(tǒng)對應。注:本文和其它的“Lin...



來源:土豆居士



一、前言


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


注:本文和其它的“Linux內核分析”文章都基于如下約定:
a) 內核版本為Linux 5.6.18,可以從下面的鏈接獲?。?br /> https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.6.18.tar.xz
b) 鑒于嵌入式系統(tǒng)大多使用ARM處理器,因此涉及到體系結構部分的內容,都以ARM為分析對象


二、 Linux內核的核心功能


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




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


(代碼免費獲取后臺私信【代碼】)


三、Linux內核的整體架構


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




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


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


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


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


4. Network,網絡子系統(tǒng)。負責管理系統(tǒng)的網絡設備,并實現(xiàn)多種多樣的網絡標準。


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


3.2 進程調度(Process Scheduler)


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


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




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


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


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


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


3.3 內存管理(Memory Manager, MM)


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


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




1. Architecture Specific Managers,體系結構相關部分。提供用于訪問硬件Memory的虛擬接口。


2. Architecture Independent Manager,體系結構無關部分。提供所有的內存管理機制,包括:以進程為單位的memory mapping;虛擬內存的Swapping。


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


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


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


隨著計算機技術的進步,存儲和組織數(shù)據(jù)的方法也是在不斷進步的,從而導致有多種類型的文件系統(tǒng),例如FAT、FAT32、NTFS、EXT2、EXT3等等。而為了兼容,操作系統(tǒng)或者內核,要以相同的表現(xiàn)形式,同時支持多種類型的文件系統(tǒng),這就延伸出了虛擬文件系統(tǒng)(VFS)的概念。


VFS的功能就是管理各種各樣的文件系統(tǒng),屏蔽它們的差異,以統(tǒng)一的方式,為用戶程序提供訪問文件的接口。


我們可以從磁盤、硬盤、NAND Flash等設備中讀取或寫入數(shù)據(jù),因而最初的文件系統(tǒng)都是構建在這些設備之上的。這個概念也可以推廣到其它的硬件設備,例如內存、顯示器(LCD)、鍵盤、串口等等。


我們對硬件設備的訪問控制,也可以歸納為讀取或者寫入數(shù)據(jù),因而可以用統(tǒng)一的文件操作接口訪問。Linux內核就是這樣做的,除了傳統(tǒng)的磁盤文件系統(tǒng)之外,它還抽象出了設備文件系統(tǒng)、內存文件系統(tǒng)等等。這些邏輯,都是由VFS子系統(tǒng)實現(xiàn)。


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




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


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


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


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


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


3.5 網絡子系統(tǒng)(Net)


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




1. Network Device Drivers,網絡設備的驅動,和VFS子系統(tǒng)中的設備驅動是一樣的。


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


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


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


5. System Call interface,系統(tǒng)調用接口,向用戶空間提供訪問網絡設備的統(tǒng)一的接口。


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


四、Linux內核源代碼的目錄結構


Linux內核源代碼包括三個主要部分:


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


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


3. 編譯腳本、配置文件、幫助文檔、版權說明等輔助性文件


下圖r所示使用ls命令看到的內核源代碼的頂層目錄結構,具體描述如下。





include/ ---- 內核頭文件,需要提供給外部模塊(例如用戶空間代碼)使用。kernel/ ---- Linux內核的核心代碼,包含了3.2小節(jié)所描述的進程調度子系統(tǒng),以及和進程調度相關的模塊。mm/ ---- 內存管理子系統(tǒng)(3.3小節(jié))。fs/ ---- VFS子系統(tǒng)(3.4小節(jié))。net/ ---- 不包括網絡設備驅動的網絡子系統(tǒng)(3.5小節(jié))。ipc/ ---- IPC(進程間通信)子系統(tǒng)。arch// ---- 體系結構相關的代碼,例如arm, x86等等。arch//mach- ---- 具體的machine/board相關的代碼。arch//include/asm ---- 體系結構相關的頭文件。arch//boot/dts ---- 設備樹(Device Tree)文件。init/ ---- Linux系統(tǒng)啟動初始化相關的代碼。block/ ---- 提供塊設備的層次。sound/ ---- 音頻相關的驅動及子系統(tǒng),可以看作“音頻子系統(tǒng)”。drivers/ ---- 設備驅動(在Linux kernel 3.10中,設備驅動占了49.4的代碼量)。lib/ ---- 實現(xiàn)需要在內核中使用的庫函數(shù),例如CRC、FIFO、list、MD5等。crypto/ ----- 加密、解密相關的庫函數(shù)。security/ ---- 提供安全特性(SELinux)。virt/ ---- 提供虛擬機技術(KVM等)的支持。usr/ ---- 用于生成initramfs的代碼。firmware/ ---- 保存用于驅動第三方設備的固件。samples/ ---- 一些示例代碼。tools/ ---- 一些常用工具,如性能剖析、自測試等。Kconfig, Kbuild, Makefile, scripts/ ---- 用于內核編譯的配置文件、腳本等。COPYING ---- 版權聲明。MAINTAINERS ----維護者名單。CREDITS ---- Linux主要的貢獻者名單。REPORTING-BUGS ---- Bug上報的指南。Documentation, README ---- 幫助、說明文檔。 版權歸原作者所有,如有侵權,請聯(lián)系刪除。????????????????  END  ????????????????





本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉