中斷在系統(tǒng)中的作用
中斷機(jī)制在處理器中扮演著一個(gè)至關(guān)重要的角色,它是處理器異步響應(yīng)外圍設(shè)備請(qǐng)求的核心方式。從技術(shù)的深層次來看,中斷是處理器在正常運(yùn)行過程中,因外部或內(nèi)部事件(如外圍設(shè)備的輸入/輸出請(qǐng)求、異常錯(cuò)誤等)而暫時(shí)中斷當(dāng)前執(zhí)行的程序,轉(zhuǎn)而執(zhí)行特定的中斷服務(wù)程序(Interrupt Service Routine, ISR)的過程。
在操作系統(tǒng)的上下文中,中斷處理是外圍設(shè)備管理的基石。外圍設(shè)備如硬盤、鍵盤、鼠標(biāo)等,它們的工作通常是異步的,即它們不會(huì)按照處理器執(zhí)行指令的線性順序來請(qǐng)求服務(wù)。中斷機(jī)制允許處理器在這些設(shè)備需要服務(wù)時(shí),能夠立即響應(yīng),而不必等待處理器完成當(dāng)前任務(wù)。這種異步處理的能力極大地提高了系統(tǒng)的響應(yīng)性和效率。
此外,中斷機(jī)制還在系統(tǒng)調(diào)度和核間交互中發(fā)揮著不可或缺的作用。系統(tǒng)調(diào)度是操作系統(tǒng)根據(jù)一定的策略選擇下一個(gè)要執(zhí)行的進(jìn)程或線程的過程。當(dāng)中斷發(fā)生時(shí),處理器可能會(huì)根據(jù)中斷的類型和優(yōu)先級(jí)來決定是否切換當(dāng)前執(zhí)行的上下文,從而實(shí)現(xiàn)任務(wù)的快速切換和調(diào)度。而在多核或多處理器的系統(tǒng)中,中斷也是核間通信和同步的重要手段,它可以幫助不同的處理器核心之間傳遞信息、協(xié)調(diào)工作。
這里對(duì)中斷在系統(tǒng)中的介紹會(huì)包括硬件原理、中斷驅(qū)動(dòng)解析、上半部與下半部、以及softirq, tasklet, workqueue等機(jī)制。
中斷控制器 GIC 硬件原理
GIC,Generic Interrupt Controller。是ARM公司提供的一個(gè)通用的中斷控制器。主要作用為:
接受硬件中斷信號(hào),并經(jīng)過一定處理后,分發(fā)給對(duì)應(yīng)的CPU進(jìn)行處理。
當(dāng)前GIC 有四個(gè)版本,GIC v1~v4, 本文主要介紹GIC v3控制器。
GIC v3中斷類別
GICv3定義了以下中斷類型:
SGI(Software Generated Interrupt):軟件觸發(fā)的中斷。軟件可以通過寫 GICD_SGIR 寄存器來觸發(fā)一個(gè)中斷事件,一般用于核間通信,內(nèi)核中的 IPI:inter-processor interrupts 就是基于 SGI。
PPI(Private Peripheral Interrupt):私有外設(shè)中斷。這是每個(gè)核心私有的中斷。PPI會(huì)送達(dá)到指定的CPU上,應(yīng)用場(chǎng)景有CPU本地時(shí)鐘。
SPI(Shared Peripheral Interrupt):公用的外部設(shè)備中斷,也定義為共享中斷。中斷產(chǎn)生后,可以分發(fā)到某一個(gè)CPU上。比如按鍵觸發(fā)一個(gè)中斷,手機(jī)觸摸屏觸發(fā)的中斷。
LPI(Locality-specific Peripheral Interrupt):LPI 是 GICv3 中的新特性,它們?cè)诤芏喾矫媾c其他類型的中斷不同。LPI 始終是基于消息的中斷,它們的配置保存在表中而不是寄存器。比如 PCIe 的 MSI/MSI-x 中斷。
中斷類型 | 硬件中斷號(hào) |
---|---|
SGI | 0-15 |
PPI | 16-31 |
SPI | 32-1019 |
reserved | ...... |
LPI | 8192-MAX |