linux 哪个进程在使用串口_Linux内核的整体架构
轉載自蝸窩科技
Linux內核的整體架構?www.wowotech.net作者:wowo發布于:2014-2-21 13:23 分類:Linux內核分析
0. 轉載者說在前面的話
轉載目的:
- 能夠讓更多的小伙伴發現優質的文章
- 對原文進行重新排版梳理替換,讓文章更優質
- 本人目前還沒能力總結出這樣的文章,因此先轉載一些自認為優質的文章,供大家享用。等我有所感悟之后,總結出更清晰明了的文章,供大家學習交流,共同進步。
友情提示:
如果大家是我這樣的小白的話,這一系列對內核中設備模型的結構體的分析,及其之間千絲萬縷的聯系以及內核概念等關鍵點會比較難理解,不要閱讀一次就妄想掌握。
巨幅拼圖:
圖片轉載自
https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.amazon.cn%2Fdp%2FB00A3KHG22&psig=AOvVaw09a9EJ2gzEzmEiMIj_JdEt&ust=1580781614371000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCIitz8-ktOcCFQAAAAAdAAAAABAD?www.google.com愚認為內核架構的學習可以類似巨幅拼圖,不要因為拼湊出局部圖案就沾沾自喜,局部圖案是微不足道的。“局部圖案”之間的多次比對,互相組合,才可以真正定位“局部圖案”,才可以對內核架構有比較清晰的理解。
以上為個人愚見,僅供參考!!!
封面圖轉載自
https://makelinux.github.io/kernel/map/?makelinux.github.io1. 前言
本文是“Linux內核分析”系列文章的第一篇,會以內核的核心功能為出發點,描述Linux內核的整體架構,以及架構之下主要的軟件子系統。之后,會介紹Linux內核源文件的目錄結構,并和各個軟件子系統對應。
注:本文和其它的“Linux內核分析”文章都基于如下約定:
- 內核版本為Linux 3.10.29(該版本是一個long term的版本,會被Linux社區持續維護至少2年),可以從下面的鏈接獲取:https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.29.tar.xz
- 鑒于嵌入式系統大多使用ARM處理器,因此涉及到體系結構部分的內容,都以ARM為分析對象
轉載者注:2.6、4.x、5.x版本的源代碼基本都可以,沒必要拘泥于作者的代碼版本。
2. Linux內核的核心功能
如下圖所示,Linux內核只是Linux操作系統一部分。對下,它管理系統的所有硬件設備;對上,它通過系統調用,向Library Routine(例如C庫)或者其它應用程序提供接口。
因此,其核心功能就是:管理硬件設備,供應用程序使用。而現代計算機(無論是PC還是嵌入式系統)的標準組成,就是CPU、Memory(內存和外存)、輸入輸出設備、網絡設備和其它的外圍設備。所以為了管理這些設備,Linux內核提出了如下的架構。
3. Linux內核的整體架構
3.1 整體架構和子系統劃分
上圖說明了Linux內核的整體架構。根據內核的核心功能,Linux內核提出了5個子系統,分別負責如下的功能:
3.2 進程調度(Process Scheduler)
進程調度是Linux內核中最重要的子系統,它主要提供對CPU的訪問控制。因為在計算機中,CPU資源是有限的,而眾多的應用程序都要使用CPU資源,所以需要“進程調度子系統”對CPU進行調度管理。
進程調度子系統包括4個子模塊(見下圖),它們的功能如下:
3.3 內存管理(Memory Manager, MM)
內存管理同樣是Linux內核中最重要的子系統,它主要提供對內存資源的訪問控制。Linux系統會在硬件物理內存和進程所使用的內存(稱作虛擬內存)之間建立一種映射關系,這種映射是以進程為單位,因而不同的進程可以使用相同的虛擬內存,而這些相同的虛擬內存,可以映射到不同的物理內存上。
內存管理子系統包括3個子模塊(見下圖),它們的功能如下:
3.4 虛擬文件系統(Virtual Filesystem, VFS)
傳統意義上的文件系統,是一種存儲和組織計算機數據的方法。它用易懂、人性化的方法(文件和目錄結構),抽象計算機磁盤、硬盤等設備上冰冷的數據塊,從而使對它們的查找和訪問變得容易。因而文件系統的實質,就是“存儲和組織數據的方法”,文件系統的表現形式,就是“從某個設備中讀取數據和向某個設備寫入數據”。
隨著計算機技術的進步,存儲和組織數據的方法也是在不斷進步的,從而導致有多種類型的文件系統,例如FAT、FAT32、NTFS、EXT2、EXT3等等。而為了兼容,操作系統或者內核,要以相同的表現形式,同時支持多種類型的文件系統,這就延伸出了虛擬文件系統(VFS)的概念。VFS的功能就是管理各種各樣的文件系統,屏蔽它們的差異,以統一的方式,為用戶程序提供訪問文件的接口。
我們可以從磁盤、硬盤、NAND Flash等設備中讀取或寫入數據,因而最初的文件系統都是構建在這些設備之上的。這個概念也可以推廣到其它的硬件設備,例如內存、顯示器(LCD)、鍵盤、串口等等。我們對硬件設備的訪問控制,也可以歸納為讀取或者寫入數據,因而可以用統一的文件操作接口訪問。Linux內核就是這樣做的,除了傳統的磁盤文件系統之外,它還抽象出了設備文件系統、內存文件系統等等。這些邏輯,都是由VFS子系統實現。
VFS子系統包括6個子模塊(見下圖),它們的功能如下:
3.5 網絡子系統(Net)
網絡子系統在Linux內核中主要負責管理各種網絡設備,并實現各種網絡協議棧,最終實現通過網絡連接其它系統的功能。在Linux內核中,網絡子系統幾乎是自成體系,它包括5個子模塊(見下圖),它們的功能如下:
至于IPC子系統,由于功能比較單純,這里就不再描述了。
4. Linux內核源代碼的目錄結構
Linux內核源代碼包括三個主要部分:
下圖示使用ls命令看到的內核源代碼的頂層目錄結構,具體描述如下。
- include, 內核頭文件,需要提供給外部模塊(例如用戶空間代碼)使用。
- kernel, Linux內核的核心代碼,包含了3.2小節所描述的進程調度子系統,以及和進程調度相關的模塊。
- mm,內存管理子系統。
- fs, VFS子系統。
- net,不包括網絡設備驅動的網絡子系統。
- ipc, IPC(進程間通信)子系統。
- arch,體系結構相關的代碼,例如arm, x86等等。
arch//mach,具體的machine/board相關的代碼。
arch//include/asm , 體系結構相關的頭文件。
arch//boot/dts ,設備樹(Device Tree)文件。 - init,Linux系統啟動初始化相關的代碼。
- block, 提供塊設備的層次。
- sound,音頻相關的驅動及子系統,可以看作“音頻子系統”。
- drivers, 設備驅動(在Linux kernel 3.10中,設備驅動占了49.4的代碼量)。
- lib, 實現需要在內核中使用的庫函數,例如CRC、FIFO、list、MD5等。
- crypto, 加密、解密相關的庫函數。
- security, 提供安全特性(SELinux)。
- virt, 提供虛擬機技術(KVM等)的支持。
- usr, 用于生成initramfs的代碼。
- firmware, 保存用于驅動第三方設備的固件。
- samples, 一些示例代碼。
- tools, 一些常用工具,如性能剖析、自測試等。
- Kconfig, Kbuild, Makefile, scripts, 用于內核編譯的配置文件、腳本等。
- COPYING, 版權聲明。MAINTAINERS ,維護者名單。CREDITS, Linux主要的貢獻者名單。REPORTING-BUGS, Bug上報的指南。
- Documentation, README, 幫助、說明文檔。
5. 附錄
第3章各個子系統的架構圖,拷貝自如下的網頁:http://oss.org.cn/ossdocs/linux/kernel/a1/index.html
歡迎大家關注我的微信公眾號——小白倉庫 原創經驗資料分享:包含但不僅限于FPGA、ARM、RISC-V、Linux、LabVIEW等軟硬件開發,另外分享生活中的趣事以及感悟。目的是建立一個平臺記錄學習過的知識,并分享出來自認為有用的與感興趣的道友相互交流進步。
總結
以上是生活随笔為你收集整理的linux 哪个进程在使用串口_Linux内核的整体架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 绿能电动车控制器怎么解码绿源电动车?
- 下一篇: 高尔夫差点如何计算?