理解 Linux 系統(tǒng)中斷

理解 Linux 系統(tǒng)中斷

中斷Interrupt,在 wikipedia 的定義為:“在計算機科學中是指處理器接收到來自硬件或軟件的信號,提示發(fā)生了某個事件,應(yīng)予以注意,這種情況就稱為中斷”。

從 wikipedia 定義中可以明確,中斷信號可以來自于:

  • 外圍硬件異步信號
  • 軟件同步信號

CPU 接收到信號后,CPU會打斷當前的工作并保存現(xiàn)場,然后CPU會根據(jù)中斷信號找到一對應(yīng)的處理程序來執(zhí)行,處理完畢后再根據(jù)處理結(jié)果決定是否需要繼續(xù)執(zhí)行原來任務(wù)。


  • 中斷解決了什么問題?

    中斷一開始的設(shè)計初衷是為了避免CPU與外部設(shè)備通信時的忙等待。

    眾所周知,CPU的運算速度遠超與存儲設(shè)備、外部硬件的操作速度,例如當CPU下發(fā)讀取數(shù)據(jù)的指令給硬盤設(shè)備后,在硬盤準備數(shù)據(jù)的期間,CPU需要進行忙等待,反復(fù)輪詢硬盤設(shè)備是否已經(jīng)完成動作并返回結(jié)果,這就導(dǎo)致了大量的CPU周期被浪費。

    有了中斷技術(shù)后,CPU給硬盤設(shè)備發(fā)生指令后,無需等待硬盤完成操作,可以立即返回以處理其他任務(wù),待硬盤完成動作后,發(fā)送中斷信號給CPU,CPU根據(jù)中斷信號接著回來處理結(jié)果即可。

    后來中斷技術(shù)也被用于 CPU外部與內(nèi)部的緊急事件的處理、機器故障的處理、時間控制等多個方面,并產(chǎn)生了通過軟件方式進行中斷處理的概念。


  • 中斷信號的類型

    中斷信號通常有以下幾種:

    • 硬件中斷
      硬件中斷的信號是異步的,即CPU也不知道 硬件中斷信號 什么時候會產(chǎn)生,它由外部硬件設(shè)備觸發(fā)。

      硬件中斷還可以被細分為:

      • 可屏蔽中斷
        硬件中斷的一類,可通過在中斷屏蔽寄存器中設(shè)定位掩碼來關(guān)閉。
      • 非可屏蔽中斷
        CPU必須處理的中斷,無法通過在中斷屏蔽寄存器中設(shè)定位掩碼來關(guān)閉。典型例子是時鐘中斷(一個硬件時鐘以恒定頻率—如50Hz—發(fā)出的中斷)。
      • 處理器間中斷
        一種特殊的硬件中斷。由處理器發(fā)出,被其它處理器接收。僅見于多處理器系統(tǒng),以便于處理器間通信或同步。
      • 偽中斷
        一類不希望被產(chǎn)生的硬件中斷。發(fā)生的原因有很多種,如中斷線路上電氣信號異常,或是中斷請求設(shè)備本身有問題。
    • 軟件中斷
      軟件中斷,本質(zhì)是一條CPU指令,用以自陷一個中斷,因此軟件中斷的信號是同步的。
      軟件中斷也被稱為 異常, 通常是由 程序錯誤 或者 必須內(nèi)核處理的異常條件 產(chǎn)生。異??梢苑譃椋?/p>

      • 陷阱:有意的異常,例如 系統(tǒng)調(diào)用
      • 故障: 潛在可恢復(fù)的錯誤
      • 中止: 不可恢復(fù)的錯誤

中斷系統(tǒng)的設(shè)計和實例

作為一個程序員,硬件實現(xiàn)原理的確超出我的技術(shù)范疇,在這里只能說有興趣了解的可以看下wikipedia:

這里面介紹了關(guān)于中斷系統(tǒng)在設(shè)計層面,外部設(shè)備如何觸發(fā)中斷請求,CPU如何獲得中斷信號和尋找和執(zhí)行中斷處理程序等。
并簡單介紹了CPU 引腳中斷向量表等。


中斷處理程序

中斷處理程序,顧名思義,CPU收到中斷信號后,所需要執(zhí)行的對應(yīng)處理程序。

硬件中斷軟件中斷 的處理程序區(qū)別:

  • 硬件中斷的處理程序是由設(shè)備的驅(qū)動程序提供的,而軟件中斷的處理程序是由操作系統(tǒng)內(nèi)核提供的。
  • 硬件中斷的處理程序是用于被內(nèi)核調(diào)用來響應(yīng)中斷的,運行在被稱為 中斷上下文 的特殊上下文中(偶爾也被稱為 原子上下文),該上下文中執(zhí)行的代碼不可阻塞。

由于 硬件中斷信號 隨時都可能發(fā)生,需要保證中斷處理程序能快速執(zhí)行,且能快速恢復(fù)中斷代碼的執(zhí)行,一般將中斷處理的過程切成兩部分:

  • 上半部
    上半部就是 中斷處理程序,是一系列需要CPU立即執(zhí)行的工作,在這里只做嚴格時限的工作,如對接收的中斷進行應(yīng)答或復(fù)位硬件。

  • 下半部
    下半部則是允許稍后完成的工作。

  • 我們以網(wǎng)卡為例,當網(wǎng)卡接收到來自網(wǎng)絡(luò)的數(shù)據(jù)包時,需要通知內(nèi)核數(shù)據(jù)包到了,網(wǎng)卡需要立即完成這件事,從而優(yōu)化網(wǎng)絡(luò)的吞吐量和傳輸周期,避免超時。因此網(wǎng)卡立即發(fā)出中斷,內(nèi)核通過執(zhí)行網(wǎng)卡注冊的中斷處理程序來應(yīng)答。中斷開始執(zhí)行,通知硬件,拷貝最新的網(wǎng)絡(luò)數(shù)據(jù)包到內(nèi)存,然后再去讀取網(wǎng)卡更多的數(shù)據(jù)包。這些重要且急迫,又與硬件相關(guān)的工作都由上半部來完成。內(nèi)核通常需要快速的拷貝網(wǎng)絡(luò)數(shù)據(jù)包到系統(tǒng)內(nèi)存,因為網(wǎng)卡上接收網(wǎng)絡(luò)數(shù)據(jù)包的緩存大小固定,而且相比系統(tǒng)內(nèi)存也要小得多。所以如果拷貝的動作延遲了,必然會導(dǎo)致緩存溢出,進入的網(wǎng)絡(luò)包占滿了網(wǎng)卡的緩存,后續(xù)到來的網(wǎng)絡(luò)包只能被丟棄。當網(wǎng)絡(luò)數(shù)據(jù)包被拷貝到系統(tǒng)內(nèi)存后,中斷的任務(wù)就完成了,此時它將控制權(quán)還給系統(tǒng)被中斷前原先運行的程序,處理和操作數(shù)據(jù)包的工作都在隨后的下半部來完成。


參考:
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 計算機的硬件組成 現(xiàn)代計算機的基本組成部分其實主要由三部分組成:CPU,內(nèi)存,主板。 你撰寫的程序,打開的任何PC...
    HikariCP閱讀 3,250評論 1 4
  • 一、中斷基礎(chǔ)概念 所謂中斷,指CPU在執(zhí)行程序的過程中,出現(xiàn)了某些突發(fā)事件即待處理,CPU必須暫停當前的程...
    Nothing_655f閱讀 2,255評論 0 1
  • 中斷(interrupt) from wiki:中斷(Interrupt)是指處理器[https://zh.wik...
    9_SooHyun閱讀 405評論 0 0
  • 中斷與定時器 中斷的概念:指CPU在執(zhí)行過程中,出現(xiàn)某些突發(fā)事件急待處理,CPU暫停執(zhí)行當前程序,轉(zhuǎn)去處理突發(fā)事件...
    Joe_HUST閱讀 3,378評論 0 2
  • 簡介 1.基于Linux0.11代碼進行分析。2.中斷類型分類以及具體的中斷。3.中斷向量的注冊。4.中斷處理流程...
    不爭_900c閱讀 1,780評論 0 1

友情鏈接更多精彩內(nèi)容