Linux內核體系結構簡析

1.Linux內核

????????

1.1 Linux內核的任務

  1. 從技術層面講,內核是硬件和軟件之間的一個中間層,作用是將應用層序的請求傳遞給硬件,并充當底層驅動程序,對系統中的各種設備和組件進行尋址。
  2. 從應用程序的角度講,應用程序與硬件沒有聯系,只與內核有聯系,內核是應用程序知道的層次中的最底層。在實際工作中內核抽象出了相關的細節。
  3. 從資源管理的角度講,內核是一個資源管理程序。負責將可用的共享資源(如CPU時間,磁盤空間,網絡連接等)分配到各個系統進程。
  4. 從系統層面將,內核相當于是一個庫,提供了一組面向系統的命令。系統調用相對于應用程序來說,就像調用普通函數一樣。

1.2 Linux系統層次結構

? ? ? ? ? ? ? ? ? ? ? ?

  1. Linux系統結構中位于最上層的是用戶(或應用程序)空間。這是用戶應用程序執行的地方。用戶空間之下的是內核空間,Linux內核正是位于此。
    ????????1)GNU C Library(glibc)也在此。提供了 連接內核的系統調用接口,還提供了在用戶空間應用程序和內核之間進行轉換的機制
    ????????2)內核和用戶空間的應用程序使用的是不同的保護地址空間。每個用戶空間的進程都使用自己的虛擬地址空間(進程是資源分配的獨立單位),而內核則占用單獨的地址空間。
  2. Linux內核可進一步分為3層,最上面的是系統調用接口,它實現了一些基本功能,例如:read,write。系統調用接口之下是內核代碼,可以更加精確地定義為獨立于體系機構的內核代碼(Linux所支持的所有處理器體系結構所通用的)。在這些代碼之下是依賴于體系結構的代碼,構成了BSP(Board Support Package)的部分——是嵌入式系統開發中的核心組件,充當硬件與操作系統之間的橋梁。它提供底層硬件驅動、配置及接口。
  3. 內核被劃分為多個子系統。Linux也可以看作是一個整體,因為它會將所有這些基本服務都集成在內核中。這與微內核的體系結構不同,后者會提供一些基本的服務,例如通信,I/O,內存和進程管理等
    ?

2. Linux內核體系結構

? ? ? ?Linux內核的主要組件是:系統調用接口,進程管理,內存管理,虛擬文件系統,網絡堆棧,設備驅動程序,硬件架構的相關代碼。

2.1 系統調用接口(SCI,system call interface)

? ? ? ?該層提供了某些機制執行從用戶空間到內核的函數調用。該接口依賴于體系結構,甚至在相同的處理器族內也是如此。SCI層實際是一個非常有用的函數調用多路復用和多路分解服務。

2.2 進程管理(PM, process management)

  1. 進程管理的重點是進程的執行。在Linux并不區分線程和進程,代表了單獨的處理器虛擬化(線程代碼、數據、堆棧和CPU寄存器)。內核通過SCI提供了一個應用程序編程接口(API)來創建一個新進程(fork, exec 或 Portable Operating System Interface),停止進程(kill, exit)。并在它們之間進行通信和同步(signal)
  2. 進程管理還包括處理活動進程之間共享CPU的需求。內核實現了一種新型的調度算法,不管有多少個線程正在競爭CPU,這種算法都可以在固定時間內進行操作——O(1)調度程序,這個名字就表示它調度多個線程所使用的時間和調度一個線程所使用的時間是相同的。同樣也可以支持多處理器。

2.3 內存管理(MM, memory management)

? ? ? ?內核所管理的另外一個重要資源是內存。內存是按照所謂的內存頁方式進行管理的(大部分體系來說都是 4KB)。Linux包括了管理可用內存的方式,以及物理和虛擬映射所使用的硬件機制。Linux的內存管理不止4KB緩沖區,而是對4KB緩沖區提供一種抽象,如 Slab分配器 ——通過??分層管理??(伙伴系統 + Slab)和??對象重用??,高效解決了小內存塊的分配問題。這種內存管理的方式使用4KB緩沖區為基數,然后從中分配結構并跟蹤內存頁使用情況。這樣就允許根據系統需要來動態調整內存使用 (頁面交換算法)
?

2.4 虛擬文件系統(VFS,virtual file system)

? ? ? ?虛擬文件系統是Linux內核中文件系統的通用的接口抽象。VFS在SCI和內核所支持的文件系統之間提供了一個交換層

2.5 網絡堆棧

網絡堆棧在設計上遵循模擬協議本身的分層體系結構,如IP協議是傳輸協議TCP下面的核心網絡層協議。TCP之上的協議是 socket層,通過SCI進行調用,socket層網絡子系統的標準API,它為各種網絡協議提供了一個用戶接口。從原始幀訪問到IP協議數據單元(PDU),再到UDP,socket層提供了一種標準化的方式進行管理連接,并在各個終點之間移動數據。

2.6 設備驅動程序(大部分代碼)

設備驅動程序是用于管理硬件設備并與之交互的核心組件。它們充當用戶空間與硬件之間的橋梁,使應用程序無需直接操作底層硬件即可使用設備功能。

2.7 依賴體系結構的代碼

3. Linux驅動的paltform機制

? ? ? ?Linux的paltform機制將本身的資源注冊進內核,由內核統一管理,在驅動程序中使用這些資源時通過platform_device提供的標準接口進行申請并使用。這樣提供了驅動和資源管理的獨立性,并且擁有較好的可移植性和安全性。
? ? ? ?platform機制分為以下三個步驟:
? ? ? ?1)總線注冊階段
????????????????內核啟動初始化main.c文件中的kernal_init()→do_basic_setup()→driver_init()→platform_bus_init()→bus_register(&platform_bus_type),由此注冊了一條platform總線(虛擬總線,platform_bus)。
????????2)驅動注冊階段
????????????????Platform_driver_register()→driver_register()→bus_add_driver()→driver_attach()→bus_for_each_dev(),對在每個掛在虛擬的platform bus的設備作__deriver_attach()→driver_probe_device(),判斷drv→bus→match()是否執行成功,此時通過指針執行platform_match→strncmp(pdev→name,drv→name,BUS_ID_SIZE),如果相符就調用really_probe(實際就是執行相應設備的platform_driver→probe(platform_device)。)開始真正的探測,如果probe成功,則綁定設備到該驅動。
????????從上面可以看出,platform機制最后還是調用了bus_register(),device_add(),driver_register()這三個關鍵的函數。
????????關鍵結構體:?

struct platform_device {const char* name;   //設備名稱,要與platform_driver的name一樣,這樣總線才能匹配成功u32 id;   //id號,插入總線下相同name的設備編號(一個驅動可以有多個設備),如果只有一個設備填-1struct device dev;  //內嵌的具體的device結構體,其中成員platform_data,是個void *類型,可以給平臺driver提供各種數據(比如:GPIO引腳等等)u32 num_resources;      //資源數量,struct resource  * resource;    //資源結構體,保存設備的信息
};
struct resource {resource_size_t start;                    //起始資源,如果是地址的話,必須是物理地址resource_size_t end;                      //結束資源,如果是地址的話,必須是物理地址const char *name;                         //資源名unsigned long flags;                      //資源的標志//比如IORESOURCE_MEM,表示地址資源, IORESOURCE_IRQ表示中斷引腳... ...struct resource *parent, *sibling, *child;   //資源拓撲指針父、兄、子,可以構成鏈表
};
  • 涉及到的函數如下(在dev設備的入口出口函數中用到)

int platform_device_register(struct platform_device * pdev);//注冊dev設備
int platform_device_unregister(struct platform_device * pdev);//注銷dev設備

? ? ? ? ? ? ? ? platform機制的好處:

? ? ? ? ? ? ? ? 1. 提供了platform_bus_type類型的總線,把那些不是總線型的soc設備都添加到這條虛擬總線上。使得,總線——設備——驅動的模式可以得到普及。

? ? ? ? ? ? ? ? 2. 提供了platform_device和platform_driver類型的數據結構,將傳統的device和driver數據結構嵌入其中,并且加入resource成員,以便于和Open Firmware這種動態傳遞設備的新型bootloader和kernal接軌。

參考引用:linux_kernel_wiki/文章/Linux內核架構和工作原理.md at main · 0voice/linux_kernel_wiki

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907887.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907887.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907887.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python爬蟲:Ruia的詳細使用(一個基于asyncio和aiohttp的異步爬蟲框架)

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 一、Ruia概述1.1 Ruia介紹1.2 Ruia特點1.3 安裝Ruia1.4 使用案例二、基本使用2.1 Request 請求2.2 Response - 響應2.3 Item - 數據提取2.4 Field 提取數據2.5 Spider - 爬蟲類2.6 Middleware - 中間件三、高級功能3.1 …

網絡攻防技術二:密碼學分析

文章目錄 一、傳統密碼分析方法1、根據明文、密文等信息的掌握情況分類 2、從密碼分析途徑分類二、密碼旁路分析1、概念2、旁路分析方法三、現代密碼系統1、對稱密碼(單密鑰)2、公開密碼(成對密鑰) 四、典型對稱密碼(單…

Linux --TCP協議實現簡單的網絡通信(中英翻譯)

一、什么是TCP協議 1.1 、TCP是傳輸層的協議,TCP需要連接,TCP是一種可靠性傳輸協議,TCP是面向字節流的傳輸協議; 二、TCPserver端的搭建 2.1、我們最終好實現的效果是 客戶端在任何時候都能連接到服務端,然后向服務…

pc端小卡片功能-原生JavaScript金融信息與節日日歷

代碼如下 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>金融信息與節日日歷</title><…

C語言——獲取變量所在地址(uint8和uint32的區別)

前言&#xff1a; 1.使用uint8 *的原因 在C語言中&#xff0c;獲取或操作一個4字節地址&#xff08;指針&#xff09;時使用uint8_t*&#xff08;即unsigned char*&#xff09;而不是uint32_t*&#xff0c;主要基于以下關鍵原因&#xff1a; 1.1. 避免違反嚴格別名規則&…

Python----目標檢測(《YOLOv3:AnIncrementalImprovement》和YOLO-V3的原理與網絡結構)

一、《YOLOv3:AnIncrementalImprovement》 1.1、基本信息 標題&#xff1a;YOLOv3: An Incremental Improvement 作者&#xff1a;Joseph Redmon, Ali Farhadi 機構&#xff1a;華盛頓大學&#xff08;University of Washington&#xff09; 發表時間&#xff1a;2018年 代…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | Form Wave(表單label波動效果)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— FormWave組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ &#x1f3af; 組件目標 構建一個美觀、動態的登錄表單&#xff0…

【數據結構】--二叉樹--堆(上)

一、樹的概念和結構 概念&#xff1a; 樹是一種非線性的數據結構&#xff0c;他是由n(n>0)個有限結點組成一個具有層次關系的集合。其叫做樹&#xff0c;是因為他倒過來看就和一棵樹差不多&#xff0c;其實際上是根在上&#xff0c;樹枝在下的。 樹的特點&#xff1a; 1…

linux有效裁剪視頻的方式(基于ffmpeg,不改變分辨率,幀率,視頻質量,不需要三方軟件)

就是在Linux上使用OBS Studio錄制一個講座或者其他視頻&#xff0c;可能總有些時候會多錄制一段時間&#xff0c;但是如果使用剪映或者PR這樣的工具在導出的時候總需要煩惱導出的格式和參數&#xff0c;比如剪映就不支持mkv格式的導出&#xff0c;導出成mp4格式的視頻就會變得很…

SystemVerilog—Interface語法(一)

SystemVerilog中的接口&#xff08;interface&#xff09;是一種用于封裝多模塊間通信信號和協議的復合結構&#xff0c;可顯著提升代碼復用性和維護效率。其核心語法和功能如下&#xff1a; 一、接口的基本定義 1. 聲明語法 接口通過interface關鍵字定義&#xff0c;支持信…

android binder(四)binder驅動詳解

ref&#xff1a; Android10.0 Binder通信原理(五)-Binder驅動分析_binder: 1203:1453 ioctl 40046210 77004d93f4 return-CSDN博客 https://juejin.cn/post/7214342319347712057#heading-0 第6課第1節_Binder系統_驅動情景分析_數據結構_嗶哩嗶哩_bilibili

QT/c++航空返修數據智能分析系統

簡介 1、區分普通用戶和管理員 2、界面精美 3、功能豐富 4、使用cppjieba分詞分析數據 5、支持數據導入導出 6、echarts展示圖表 效果展示 演示鏈接 源碼獲取 int main(){ //非白嫖 printf("&#x1f4e1;:%S","joyfelic"); return 0; }

ToolsSet之:數值提取及批處理

ToolsSet是微軟商店中的一款包含數十種實用工具數百種細分功能的工具集合應用&#xff0c;應用基本功能介紹可以查看以下文章&#xff1a; Windows應用ToolsSet介紹https://blog.csdn.net/BinField/article/details/145898264 ToolsSet中Number菜單下的Numeric Batch是一個數…

Ubuntu20.04 LTS 升級Ubuntu22.04LTS 依賴錯誤 系統崩潰重裝 Ubuntu22.04 LTS

服務器系統為PowerEdge R740 BIOS Version 2.10.2 DELL EMC 1、關機 開機時連續按鍵盤F2 2、System Setup選擇第一個 System BIOS 3、System BIOS Setting 選擇 Boot Setting 4、System BIOS Setting-Boot Setting 選擇 BIOS Boot Settings 5、重啟 開啟時連續按鍵盤F11 …

(javaSE)Java數組進階:數組初始化 數組訪問 數組中的jvm 空指針異常

數組的基礎 什么是數組呢? 數組指的是一種容器,可以用來存儲同種數據類型的多個值 數組的初始化 初始化&#xff1a;就是在內存中,為數組容器開辟空間,并將數據存入容器中的過程。 數組初始化的兩種方式&#xff1a;靜態初始化&#xff0c;動態初始化 數組的靜態初始化 初始化…

支持向量機(SVM)例題

對于圖中所示的線性可分的20個樣本數據&#xff0c;利用支持向量機進行預測分類&#xff0c;有三個支持向量 A ( 0 , 2 ) A\left(0, 2\right) A(0,2)、 B ( 2 , 0 ) B\left(2, 0\right) B(2,0) 和 C ( ? 1 , ? 1 ) C\left(-1, -1\right) C(?1,?1)。 求支持向量機分類器的線…

UE特效Niagara性能分析

開啟Niagara調試器 開啟顯示概覽 界面顯示 &#x1f7e9; 上方綠色面板&#xff1a;Niagara DebugHud 這是 HUD&#xff08;調試視圖&#xff09; 模式下的性能統計顯示&#xff0c;內容如下&#xff1a; 項目含義SystemFilter: ShockWave_01當前選中的 Niagara 粒子系統名稱…

碳中和新路徑:鐵電液晶屏如何破解高性能與節能矛盾?

一、顯示技術困局&#xff1a;當 “高刷” 遭遇 “高耗” 在元宇宙、電競產業蓬勃發展的當下&#xff0c;顯示設備的刷新率與能耗成為行業痛點。傳統液晶受 “邊緣場效應” 制約&#xff0c;刷新率長期停滯在 300Hz 以下&#xff0c;動態畫面拖影問題顯著&#xff1b;同時&…

Vue3+SpringBoot全棧開發:從零實現增刪改查與分頁功能

前言 在現代化Web應用開發中&#xff0c;前后端分離架構已成為主流。本文將詳細介紹如何使用Vue3作為前端框架&#xff0c;SpringBoot作為后端框架&#xff0c;實現一套完整的增刪改查(CRUD)功能&#xff0c;包含分頁查詢、條件篩選等企業級特性。 技術棧介紹 前端&#xff1…

IBM 與嘉士伯(Carlsberg)攜手推進 SAP S/4HANA 數字化轉型,打造啤酒行業新范式

在啤酒釀造擁有悠久傳統的同時&#xff0c;嘉士伯也在積極擁抱前沿技術&#xff0c;邁出數字化轉型的堅實步伐。2025年&#xff0c;嘉士伯宣布與 IBM 建立多年的合作伙伴關系&#xff0c;在其西歐業務中全面部署 SAP S/4HANA&#xff0c;旨在提升企業的運營效率、敏捷性和創新能…