91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核三大核心模塊深度解析:調(diào)度、內(nèi)存與I/O

中際賽威劉老師 ? 來源:中際賽威劉老師 ? 作者:中際賽威劉老師 ? 2026-03-12 09:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Linux內(nèi)核作為操作系統(tǒng)的核心,其進(jìn)程調(diào)度、內(nèi)存管理和文件I/O三大模塊共同決定了系統(tǒng)的性能與穩(wěn)定性。無論是多核服務(wù)器的高并發(fā)處理,還是嵌入式設(shè)備的資源受限場(chǎng)景,深入理解這些底層機(jī)制都是進(jìn)行性能調(diào)優(yōu)與系統(tǒng)開發(fā)的基石。

一、進(jìn)程調(diào)度:從CFS到EEVDF的演進(jìn)

進(jìn)程調(diào)度負(fù)責(zé)決定哪個(gè)任務(wù)獲得CPU執(zhí)行權(quán)。在Linux中,進(jìn)程是資源的容器,而線程才是實(shí)際的調(diào)度單元,兩者均通過kernel_clone系統(tǒng)調(diào)用創(chuàng)建。寫時(shí)拷貝技術(shù)使得fork操作幾乎不消耗額外內(nèi)存,子進(jìn)程與父進(jìn)程共享物理頁,僅在寫入時(shí)復(fù)制,大幅提升創(chuàng)建效率。類似地,文件描述符表、文件系統(tǒng)上下文和信號(hào)處理也采用廣義的寫時(shí)拷貝機(jī)制。

調(diào)度器通過多個(gè)調(diào)度類管理不同優(yōu)先級(jí)的任務(wù):截止期限調(diào)度類(DL)滿足硬實(shí)時(shí)要求,實(shí)時(shí)調(diào)度類(RT)提供確定性響應(yīng),公平調(diào)度類(CFS/EEVDF)處理普通進(jìn)程,而可編程EXT調(diào)度類允許通過eBPF定制策略。每個(gè)CPU維護(hù)獨(dú)立的運(yùn)行隊(duì)列(runqueue),調(diào)度器遍歷各調(diào)度類選擇最合適的任務(wù)。

多核系統(tǒng)中,負(fù)載均衡至關(guān)重要。wake_affine機(jī)制嘗試將喚醒任務(wù)放回原CPU以利用緩存,定期負(fù)載均衡則遷移任務(wù)以平衡負(fù)載。在NUMA架構(gòu)下,調(diào)度器優(yōu)先考慮本地內(nèi)存訪問,超線程(SMT)場(chǎng)景則需平衡物理核心上的邏輯線程。實(shí)時(shí)Linux內(nèi)核(PREEMPT_RT)通過減少不可搶占區(qū)間,將最壞延遲降至微秒級(jí)。perf sched、trace-cmd等工具可深入分析調(diào)度行為。

二、內(nèi)存管理:從硬件分頁到智能回收

內(nèi)存管理子系統(tǒng)負(fù)責(zé)虛擬地址到物理地址的映射、分配與回收。硬件分頁機(jī)制通過頁表控制訪問權(quán)限,內(nèi)核將物理內(nèi)存劃分為DMA、NORMAL等區(qū)域(zone),每個(gè)區(qū)域由buddy系統(tǒng)以2的冪次管理連續(xù)物理頁。struct page及其封裝struct folio簡(jiǎn)化了復(fù)合頁的處理。

針對(duì)不同需求,內(nèi)核提供多種分配器:連續(xù)內(nèi)存分配器(CMA)為DMA等設(shè)備預(yù)留連續(xù)內(nèi)存;slab分配器緩存頻繁分配的小對(duì)象;kmalloc用于小于一頁的分配,vmalloc分配虛擬連續(xù)但物理不連續(xù)的大內(nèi)存。用戶進(jìn)程通過malloc/mmap申請(qǐng)內(nèi)存,內(nèi)核以虛擬內(nèi)存區(qū)域(VMA)管理地址空間,首次訪問觸發(fā)缺頁異常分配物理頁。

頁緩存(page cache)加速文件I/O,匿名頁(如堆、棧)在內(nèi)存緊張時(shí)可通過交換分區(qū)(swap)換出。內(nèi)核維護(hù)活躍/非活躍LRU鏈表,最近訪問的頁位于活躍鏈表,不常訪問的逐漸移至非活躍鏈表并被回收。多代LRU(MGLRU)進(jìn)一步優(yōu)化回收效率,減少掃描開銷。透明大頁(THP)和HugeTLB減少TLB缺失,提升性能。內(nèi)存cgroup限制進(jìn)程組內(nèi)存使用量,OOM killer在耗盡時(shí)選擇合適進(jìn)程終止。

wKgZPGmyEDyAB26oAADe_Iw5_O444.jpeg

三、文件I/O:從阻塞模型到高性能異步

文件I/O子系統(tǒng)連接存儲(chǔ)與應(yīng)用程序,其性能直接影響系統(tǒng)吞吐。傳統(tǒng)阻塞I/O簡(jiǎn)單但低效,非阻塞I/O配合多路復(fù)用(select/poll/epoll)成為高并發(fā)基石。信號(hào)驅(qū)動(dòng)I/O(SIGIO)和異步I/O(AIO)進(jìn)一步解耦,io_uring通過共享環(huán)形緩沖區(qū)將性能推向極致。C10K問題曾推動(dòng)事件驅(qū)動(dòng)模型發(fā)展,如今已邁向C10M級(jí)別。

文件系統(tǒng)在內(nèi)存中以超級(jí)塊(superblock)、索引節(jié)點(diǎn)(inode)和目錄項(xiàng)(dentry)表示。硬鏈接共享同一inode,符號(hào)鏈接則存儲(chǔ)目標(biāo)路徑。日志(journaling)保證崩潰后文件系統(tǒng)一致性。頁緩存通過address_space關(guān)聯(lián)文件與頁,iomap替代傳統(tǒng)buffer_head,與大型頁(large folios)無縫協(xié)作。文件讀寫流程經(jīng)過VFS層調(diào)用具體文件系統(tǒng)操作,最終通過塊層訪問設(shè)備。

I/O調(diào)度器(如mq-deadline、bfq)合并請(qǐng)求以優(yōu)化機(jī)械硬盤尋道或SSD并發(fā)。I/O cgroup(blkio)限制進(jìn)程組帶寬。iostat、blktrace、bcc/eBPF等工具可深入追蹤I/O延遲。

結(jié)語

調(diào)度、內(nèi)存和I/O三者環(huán)環(huán)相扣:調(diào)度決策影響內(nèi)存訪問局部性,內(nèi)存回收可能觸發(fā)I/O,I/O完成喚醒等待進(jìn)程。唯有從原理層面理解這些機(jī)制及其相互作用,才能在復(fù)雜場(chǎng)景下做出精準(zhǔn)優(yōu)化。工程師高培針對(duì)宋寶華老師課綱分析認(rèn)為,只有學(xué)透Linux內(nèi)核三大核心模塊,才能真正掌握系統(tǒng)級(jí)開發(fā)與調(diào)優(yōu)能力。無論是開發(fā)高性能應(yīng)用還是診斷系統(tǒng)瓶頸,這三大模塊都是技術(shù)人員的必修課。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11772

    瀏覽量

    219118
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    9

    文章

    3214

    瀏覽量

    76395
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux內(nèi)核驅(qū)動(dòng)開發(fā)的技術(shù)核心精要

    嵌入式Linux驅(qū)動(dòng)開發(fā)是連接硬件與操作系統(tǒng)的關(guān)鍵環(huán)節(jié)。隨著內(nèi)核演進(jìn)(如Linux 6.13)和硬件復(fù)雜度提升,開發(fā)者需掌握并發(fā)控制、中斷分層、內(nèi)存管理、設(shè)備樹、調(diào)試工具等
    發(fā)表于 03-10 13:56

    Linux內(nèi)核伙伴系統(tǒng)內(nèi)存申請(qǐng)函數(shù)詳解:從原理到實(shí)戰(zhàn)

    Linux 內(nèi)核中,內(nèi)存管理是整個(gè)系統(tǒng)穩(wěn)定運(yùn)行的基石,而伙伴系統(tǒng)(Buddy System) 作為內(nèi)核物理內(nèi)存分配的
    的頭像 發(fā)表于 02-10 16:58 ?3643次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>伙伴系統(tǒng)<b class='flag-5'>內(nèi)存</b>申請(qǐng)函數(shù)詳解:從原理到實(shí)戰(zhàn)

    MAX6947:10端口恒流LED驅(qū)動(dòng)與I/O擴(kuò)展器的深度解析

    MAX6946/MAX6947:10端口恒流LED驅(qū)動(dòng)與I/O擴(kuò)展器的深度解析 在電子設(shè)計(jì)領(lǐng)域,LED驅(qū)動(dòng)和I/
    的頭像 發(fā)表于 02-02 15:50 ?182次閱讀

    【「Linux 設(shè)備驅(qū)動(dòng)開發(fā)(第 2 版)」閱讀體驗(yàn)】+讀深入理解Linux內(nèi)核內(nèi)存分配

    每個(gè)內(nèi)存地址是虛擬的,不是直接指向RAM中的任何地址。當(dāng)用戶訪問內(nèi)存中的存儲(chǔ)單元時(shí),都會(huì)進(jìn)行地址轉(zhuǎn)換以匹配相應(yīng)的物理內(nèi)存。書籍的第10章討論了五個(gè)主題,對(duì)Linux
    發(fā)表于 01-16 20:05

    PCA9539:16位I2C與SMBus低功耗I/O擴(kuò)展器深度解析

    PCA9539:16位I2C與SMBus低功耗I/O擴(kuò)展器深度解析 作為一名電子工程師,在設(shè)計(jì)項(xiàng)目中我們經(jīng)常會(huì)遇到需要擴(kuò)展
    的頭像 發(fā)表于 12-29 09:55 ?322次閱讀

    PCA9554:8位I2C和SMBus I/O擴(kuò)展器的深度解析

    PCA9554:8位I2C和SMBus I/O擴(kuò)展器的深度解析 在電子設(shè)計(jì)領(lǐng)域,I/
    的頭像 發(fā)表于 12-27 13:45 ?794次閱讀

    PCA9554A:遠(yuǎn)程 8 位 $I^{2}C$ 和 SMBus I/O 擴(kuò)展器的深度解析

    PCA9554A:遠(yuǎn)程 8 位 $I^{2}C$ 和 SMBus I/O 擴(kuò)展器的深度解析 在電子工程師的日常設(shè)計(jì)工作中,
    的頭像 發(fā)表于 12-27 11:00 ?941次閱讀

    PCA9534:8位I2C和SMBus低功耗I/O擴(kuò)展器的深度解析

    PCA9534:8位I2C和SMBus低功耗I/O擴(kuò)展器的深度解析 在當(dāng)今的電子設(shè)計(jì)領(lǐng)域,I/
    的頭像 發(fā)表于 12-27 10:55 ?870次閱讀

    TCA6408A:低電壓8位I2C和SMBus I/O擴(kuò)展器的深度解析

    TCA6408A:低電壓8位I2C和SMBus I/O擴(kuò)展器的深度解析 在電子設(shè)計(jì)領(lǐng)域,I/
    的頭像 發(fā)表于 12-25 10:25 ?616次閱讀

    TCA6424A:低電壓24位I2C和SMBus I/O擴(kuò)展器的深度解析

    TCA6424A:低電壓24位I2C和SMBus I/O擴(kuò)展器的深度解析 在電子設(shè)計(jì)領(lǐng)域,I/
    的頭像 發(fā)表于 12-24 15:30 ?360次閱讀

    深入Linux內(nèi)核:進(jìn)程調(diào)度核心邏輯與實(shí)現(xiàn)細(xì)節(jié)

    ,背后都離不開內(nèi)核調(diào)度算法的精準(zhǔn)操控。今天,我們就從優(yōu)先級(jí)、調(diào)度算法、時(shí)間片分配到底層實(shí)現(xiàn),全方位拆解Linux內(nèi)核進(jìn)程
    的頭像 發(fā)表于 12-24 07:05 ?4357次閱讀
    深入<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>:進(jìn)程<b class='flag-5'>調(diào)度</b>的<b class='flag-5'>核心</b>邏輯與實(shí)現(xiàn)細(xì)節(jié)

    Linux內(nèi)核模塊的加載機(jī)制

    。Linux內(nèi)核模塊的加載過程主要包含了ELF解析、動(dòng)態(tài)鏈接、安全驗(yàn)證和資源管理技術(shù)。其核心步驟包括:權(quán)限檢查→ELF解析→符號(hào)重定位→依賴
    發(fā)表于 11-25 06:59

    淺談光學(xué)I/O模塊的熱挑戰(zhàn)

    服務(wù)器和機(jī)架式網(wǎng)絡(luò)基礎(chǔ)設(shè)施系統(tǒng)內(nèi)的光學(xué) I/O 模塊通常接受主動(dòng)冷卻系統(tǒng)的直接冷卻,特別是來自機(jī)架式設(shè)備前面板的強(qiáng)制風(fēng)冷。機(jī)架式設(shè)備的散熱設(shè)計(jì)需要平衡 I/
    的頭像 發(fā)表于 11-03 09:32 ?786次閱讀
    淺談光學(xué)<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>模塊</b>的熱挑戰(zhàn)

    工業(yè)人速看!什么是耦合器模塊?什么是插片式I/O模塊?

    什么是耦合器模塊? 耦合器模塊,在模塊I/O系統(tǒng)中,可以理解為 “通信管理中樞” 或 “大腦”。 耦合器
    的頭像 發(fā)表于 11-03 09:31 ?788次閱讀
    工業(yè)人速看!什么是耦合器<b class='flag-5'>模塊</b>?什么是插片式<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>模塊</b>?

    Nginx核心功能深度解析

    Nginx核心功能深度解析
    的頭像 發(fā)表于 05-09 10:50 ?898次閱讀