色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux內核處理中斷的類型及過程

如意 ? 來源:Linux中國 ? 作者:Stephan Avenwedde ? 2020-12-29 15:57 ? 次閱讀

中斷是計算機處理數據的關鍵部分。

中斷是現代 CPU 工作方式中重要的部分。例如:當你每次在鍵盤上按下一個按鍵后,CPU 會被中斷以使得 PC 讀取用戶鍵盤的輸入。這個過程發生得相當快,以致于在使用體驗上你不會感到任何變化或損害。

此外,鍵盤并不是導致中斷的唯一組件。一般來說,有三種類型的事件會導致 CPU 發生中斷:硬件中斷、軟件中斷和異常。在具體介紹不同類型的中斷前,我需要先定義一些術語。

定義

中斷請求interrupt request(IRQ)是由可編程的中斷控制器programmable interrupt controlle(PIC)發起的,其目的是為了中斷 CPU 和執行中斷服務程序interrupt service routine(ISR)。中斷服務程序(ISR)是一個小的程序,用來處理具體的數據,其具體的處理方式依賴于造成中斷請求(IRQ)的原因。之前正在運行的進程在中斷服務程序(ISR)運行結束前都會被中斷。

在過去,中斷請求由單獨的芯片處理(中斷控制器芯片 PIC),I/O 設備直接與中斷控制器(PIC)相連。中斷控制器(PIC)管理著多種硬件的中斷請求(IRQ),并且可以直接與 CPU 通信。當一個中斷請求(IRQ)產生后,中斷控制器(PIC)向 CPU 寫入數據,并且觸發中斷請求引腳(INTR)。

現如今,中斷請求(IRQ)由 CPU 中的高級可編程中斷控制器advanced programmable interrupt controller(APIC)部分來處理。每個核中都擁有屬于自己的高級可編程中斷控制器。

中斷的類型

正如我前文中提到的,中斷可以根據其來源分為三種類型。

硬件中斷

當一個硬件設備想要告訴 CPU 某一需要處理的數據已經準備好后(例如:當鍵盤被按下或者一個數據包到了網絡接口處),它將會發送一個中斷請求(IRQ)來告訴 CPU 數據是可用的。接下來會調用在內核啟動時設備驅動注冊的對應的中斷服務程序(ISR)。

軟件中斷

當你在播放一個視頻時,音頻和視頻是同步播放是相當重要的,這樣音樂的速度才不會變化。這是由軟件中斷實現的,由精確的計時器系統(稱為 jiffies)重復發起的。這個計時器會使得你的音樂播放器同步。軟件中斷也可以被特殊的指令所調用,來讀取或寫入數據到硬件設備。

當系統需要實時性時(例如在工業應用中),軟件中斷會變得重要。你可以在 Linux 基金會的文章中找到更多相關信息:面向嵌入式開發者的實時 Linux 介紹。

異常

異常exception是你可能之前就知道的中斷類型。當 CPU 執行一些將會導致除零或缺頁錯誤的指令時,任何其他運行中的程序都會被中斷。在這種情況下,你會被一個彈窗提醒,或在控制臺輸出中看到**段錯誤segmentation fault(核心已轉儲core dumped)**。但并不是所有異常都是由指令錯誤引起的。

異常可以進一步分為錯誤Fault、陷阱Trap和終止Abort。

錯誤:錯誤是系統可以糾正的異常。例如當一個進程嘗試訪問某個已經被換出到硬盤的頁時。當請求的地址在進程的地址空間中,并且滿足訪問權限時,如果頁不在內存(RAM)中,將會產生一個中斷請求(IRQ),并開始啟用缺頁異常處理程序把所需的頁加載到內存中。如果操作成功執行,程序將繼續運行。

陷阱:陷阱主要用在調試中。如果你在某個程序中設置了一個斷點,你就插入了一條可以觸發陷阱執行的特殊指令。陷阱可以觸發上下文切換來允許你的調試器讀取和展示局部變量的值。之后程序可以繼續運行。陷阱同樣也是運行系統調用的方式(如殺死一個進程)

終止:終止是由系統表中的硬件錯誤或值不一致而導致的。終止不會報告造成異常的指令的所在位置。這是最嚴重的中斷,終止將會調用系統的終止異常處理程序來結束造成異常的進程。

動手實踐

中斷請求按照高級可編程中斷控制器(APIC)中的優先級高低排序(0是最高優先級)。前 32 個中斷(0~31)是由 CPU 指定的固定序列。你可以在 OsDev 異常 頁面找到關于它們的概述。隨后的中斷請求可以以不同的方式進行分配。中斷描述表interrupt descriptor table(IDT)中記錄了中斷請求(IRQ)和中斷服務程序(ISR)的對應關系。Linux 中定義了從 0 到 256 的 IRQ 向量。

為了打印出在你的系統中已注冊的中斷,打開一個終端并輸入:

cat /proc/interrupts

你應該會看到類似如下圖的結果:

內核版本為5.6.6中注冊的中斷 (Stephan Avenwedde, CC BY-SA 4.0)

從左到右各列的含義依次為:中斷向量號、每個 CPU(0~n)中斷發生次數、硬件來源、硬件源通道信息、以及造成中斷請求的設備名。

在表的末尾,有一些非數字的中斷。它們是特定于體系結構的中斷,如本地計時器中斷local timer interrupt(LOC)的中斷請求(IRQ)號為 236。其中一些在 Linux 內核源樹中的Linux IRQ 向量布局中指定。

特定于體系結構的中斷 (Stephan Avenwedde, CC BY-SA 4.0)

如果要實時獲取該表,請運行如下命令:

watch -n1 “cat /proc/interrupts”

總結

正確的中斷請求(IRQ)處理對于硬件、驅動和軟件的正常交互是必要的。幸運地是,Linux 內核很好地完成了它,一個 PC 的普通用戶幾乎不會注意到內核的整個中斷處理過程。

中斷相當復雜,本文僅僅是一個關于中斷的概述。如果想要深入了解該主題可以閱讀 Linux Inside 電子書(CC BY-NC-SA 4.0)和 Linux 內核教程 倉庫。
責編AJX

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11322

    瀏覽量

    209888
  • 操作系統
    +關注

    關注

    37

    文章

    6856

    瀏覽量

    123460
  • 中斷
    +關注

    關注

    5

    文章

    899

    瀏覽量

    41566
  • 異常
    +關注

    關注

    0

    文章

    22

    瀏覽量

    9263
收藏 人收藏

    評論

    相關推薦

    Linux內核中斷設計與實現

    裸機編程中使用中斷比較麻煩,需要配置寄存器、使能IRQ等等。而在Linux驅動編程中,內核提供了完善的終端框架,只需要申請中斷,然后注冊中斷
    發表于 07-29 08:57 ?803次閱讀

    LINUX內核網絡中的軟中斷KSOFTIRQD

    之前分享過Linux內核網絡數據包的接收過程,當執行到網卡通過硬件中斷(IRQ)通知CPU,告訴它有數據來了,CPU會根據中斷表,調用已經注
    發表于 12-15 11:44 ?1837次閱讀

    Linux內核的編譯主要過程

    Linux內核的編譯主要過程: 配置、編譯、安裝 。
    發表于 08-08 16:02 ?746次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>的編譯主要<b class='flag-5'>過程</b>

    Linux內核啟動過程和Bootloader(總述)

    ,所以一般的 Bootloader 都會在執行過程中初始化一個串口做為調試端口(3)檢測處理類型 Bootloader在調用 Linux內核
    發表于 08-18 17:35

    Linux內核自解壓過程

    Linux內核的啟動流程。有興趣的用戶可以參考其他書籍或資料進行深入了解。  嵌入式linux內核的啟動全過程主要分為三個階段。第一階段為
    發表于 12-29 07:35

    Linux內核啟動全過程解析

    向量表和初始化中斷處理函數;初始化系統核心進程調度器和時鐘中斷處理機制;初始化串口控制臺(console_init);ARM-Linux
    發表于 10-26 17:20

    linux內核啟動內核解壓過程分析

    linux啟動時內核解壓過程分析,一份不錯的文檔,深入了解內核必備
    發表于 03-09 13:39 ?1次下載

    Linux 2.4.x內核中斷機制

    本文從Linux內核幾種軟中斷機制相互關系和發展沿革入手,分析了這些機制的實現方法,給出了它們的基本用法。 軟中斷概況 軟中斷是利用硬件
    發表于 11-02 11:01 ?0次下載

    linux內核中斷機制

    如果讓內核定期對設備進行輪詢,以便處理設備,那會做很多無用功,因為外設的處理速度一般慢于CPU,而CPU不能一直等待外部事件。所以能讓設備在需要內核時主動通知
    發表于 11-14 15:48 ?3149次閱讀

    linux驅動之中斷處理過程C程序部分

    linux內核將所有的中斷統一編號,使用一個irq_desc[NR_IRQS]的結構體數組來描述這些中斷:每個數組項對應著一個中斷源(可能是
    發表于 05-07 11:13 ?1043次閱讀

    Linux驅動技術之一內核中斷

    在硬件上,中斷源可以通過中斷控制器向CPU提交中斷,進而引發中斷處理程序的執行,不過這種硬件中斷
    發表于 05-08 13:49 ?648次閱讀

    需要了解的Linux的IRQ中斷子系統

    Linux中斷子系統(generic irq)出現之前,內核使用__do_IRQ處理所有的中斷,這意味著__do_IRQ中要
    發表于 05-10 10:56 ?1485次閱讀

    Linux網絡包接收過程的監控與調優

    上一篇文章中《圖解Linux網絡包接收過程》,我們梳理了在Linux系統下一個數據包被接收的整個過程Linux
    的頭像 發表于 11-10 14:50 ?1694次閱讀

    linux內核-時鐘中斷

    在所有的外部中斷中,時鐘中斷起著特殊的作用,其作用遠非單純的計時所能相比。當然,即使是單純的計時也已經足夠重要了。別的不說,沒有正確的時間關系,你用來重建內核的工具make就不能正常運行了,因為
    發表于 11-23 17:51 ?12次下載
    <b class='flag-5'>linux</b><b class='flag-5'>內核</b>-時鐘<b class='flag-5'>中斷</b>

    Linux內核SoftIrq源代碼分析

    我們在分析linux內核中斷剖析時,簡單的聊了一下SOFTIRQ, 而沒有進行深入分析. Linux內核講對一個外部設備
    發表于 06-23 15:22 ?611次閱讀
    主站蜘蛛池模板: 久久6699精品国产人妻| 视频一区二区三区蜜桃麻豆| 伊人免费在线| 免费果冻传媒在线完整观看| 芭乐视频网页版在线观看| 天天色天天综合网| 久久精品一卡二卡三卡四卡视频版| 9420高清完整版在线电影免费观看 | 一区三区在线专区在线| 尿了么app| 国产精品无码亚洲网| 曰本熟妇乱妇色A片在线| 欧美性受xxxx狂喷水| 国产午夜永久福利视频在线观看| 亚洲一区二区女搞男| 日本三区四区免费高清不卡| 激情内射亚洲一区二区三区| 99精品久久精品一区二区| 微福利92合集| 老司机深夜福利ae 入口网站| 国产成人无码精品久久久影院| 伊人久久精品AV无码一区| 色妺妺免费影院| 浪荡女天天不停挨CAO日常视| 国产av免费观看日本| 91精品国产色综合久久不| 先锋影音av最新资源| 女性性纵欲派对| 极品色αv影院| 成人毛片免费观看视频大全| 永久adc视频| 乡村教师电影版| 日本精品久久久久中文字幕| 久久久久久久99精品免费观看| 国产精品免费小视频| 99视频精品全部免费免费观| 伊人久久精品中文字幕| 我和黑帮老大第365天第2季在线 | 欧美精品专区免费观看| 九九久久国产精品大片| 国产高清视频在线观看不卡v |