成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux 內核如何處理中斷

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

[[360799]]

中斷是計算機處理數(shù)據(jù)的關鍵部分。

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

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

定義

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

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

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

中斷的類型

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

硬件中斷

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

軟件中斷

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

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

異常

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

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

  • 錯誤:錯誤是系統(tǒng)可以糾正的異常。例如當一個進程嘗試訪問某個已經被換出到硬盤的頁時。當請求的地址在進程的地址空間中,并且滿足訪問權限時,如果頁不在內存(RAM)中,將會產生一個中斷請求(IRQ),并開始啟用缺頁異常處理程序把所需的頁加載到內存中。如果操作成功執(zhí)行,程序將繼續(xù)運行。
  • 陷阱:陷阱主要用在調試中。如果你在某個程序中設置了一個斷點,你就插入了一條可以觸發(fā)陷阱執(zhí)行的特殊指令。陷阱可以觸發(fā)上下文切換來允許你的調試器讀取和展示局部變量的值。之后程序可以繼續(xù)運行。陷阱同樣也是運行系統(tǒng)調用的方式(如殺死一個進程)
  • 終止:終止是由系統(tǒng)表中的硬件錯誤或值不一致而導致的。終止不會報告造成異常的指令的所在位置。這是最嚴重的中斷,終止將會調用系統(tǒng)的終止異常處理程序來結束造成異常的進程。

動手實踐

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

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

  1. cat /proc/interrupts

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

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

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

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

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

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

  1. watch -n1 "cat /proc/interrupts"

總結

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

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

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2013-01-22 11:10:11

2019-08-15 10:20:19

云計算技術安全

2009-12-25 10:02:39

2021-12-14 08:51:23

Linux 中斷子系統(tǒng)Linux 系統(tǒng)

2011-01-13 12:46:13

2019-12-23 10:20:12

Web圖片優(yōu)化前端

2017-10-26 08:43:18

JavaScript內存處理

2021-03-01 07:31:53

消息支付高可用

2012-12-12 09:49:41

2017-03-13 13:21:34

Git處理大倉庫

2021-11-02 10:53:56

Linux機制CPU

2025-01-09 10:20:53

2021-03-24 10:40:26

Python垃圾語言

2011-02-28 14:08:31

網速變慢局域網網速

2024-04-16 13:32:57

2023-01-04 10:01:21

ReactTypeScript元素

2010-05-17 10:04:45

2024-08-26 10:47:22

2021-05-31 10:47:17

SpringSecuritySession

2022-04-19 09:00:52

ReactTypeScript
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久免费看 | 国产精品久久一区 | 精品综合| 午夜影院在线观看视频 | 日韩精品一区二区三区在线播放 | 欧美成年网站 | 农村黄性色生活片 | 亚洲成人精品 | 偷拍自拍在线观看 | 91麻豆精品国产91久久久更新资源速度超快 | 福利片在线| 国产欧美日韩在线 | 国产精品一区二区三级 | 成人不卡 | 特黄色一级毛片 | 99视频免费在线观看 | 国产精品jizz在线观看老狼 | 亚洲综合热 | 亚洲视频观看 | 一区二区三区在线免费观看 | 男女羞羞视频网站 | 国产精品精品视频一区二区三区 | 精品国产免费人成在线观看 | 日一区二区三区 | 偷拍自拍第一页 | 欧美成人影院 | 一本一道久久a久久精品综合蜜臀 | 日本成人中文字幕在线观看 | 在线观看三级av | 91免费在线看 | 欧美一区二区三区免费电影 | 国产欧美日韩 | 欧美精品久久久 | 999久久久久久久久6666 | 久久精品中文 | 99久视频| 欧美日韩中文字幕在线 | 91精品国产综合久久久久 | 夜夜骑首页 | 国产黄色网址在线观看 | 精品国产欧美日韩不卡在线观看 |