當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]?中斷機(jī)制是現(xiàn)代計(jì)算機(jī)系統(tǒng)中的基本機(jī)制之一,他完成了對(duì)計(jì)算機(jī)各個(gè)事件(如時(shí)鐘、鍵盤等)響應(yīng)工作。 ?首先,有兩類事件能引起x86掛起當(dāng)前指令流的執(zhí)行并響應(yīng)事件: 異常(Exception) 和

?中斷機(jī)制是現(xiàn)代計(jì)算機(jī)系統(tǒng)中的基本機(jī)制之一,他完成了對(duì)計(jì)算機(jī)各個(gè)事件(如時(shí)鐘、鍵盤等)響應(yīng)工作。
?首先,有兩類事件能引起x86掛起當(dāng)前指令流的執(zhí)行并響應(yīng)事件: 異常(Exception) 和 硬件中斷(Interrupt)。其中異常又被稱為 軟中斷,他用于處理計(jì)算機(jī)執(zhí)行過程中的一些異常情況,如除0操作、溢出、棧錯(cuò)誤等情況,這些中斷 不可屏蔽。而硬件中斷又分為了外部中斷(可屏蔽)和內(nèi)部中斷(不可屏蔽),外部中斷一般就是計(jì)算機(jī)外設(shè)所發(fā)出的中斷(如敲擊了鍵盤等),它們由如下圖所示的兩個(gè)級(jí)聯(lián)的8259A芯片所控制 ;內(nèi)部中斷就是計(jì)算機(jī)內(nèi)部硬件出現(xiàn)的像硬件出錯(cuò)(掉電、校驗(yàn)、傳輸)等情況所發(fā)出的中斷。上述所有的這些中斷,都被統(tǒng)一的編排在了接下來將介紹的中斷向量表中。

?8086機(jī)器中的中斷向量表在80386機(jī)器中被改為了中斷描述符表(interrupt description table,IDT),它存放著用于描述各個(gè)中斷的表項(xiàng),每個(gè)都由8字節(jié)組成,包括了該中斷的地址、特權(quán)級(jí)等信息。這些表項(xiàng)又被稱為了門描述符(Gate Descriptor),“門”的含義是當(dāng)中斷發(fā)生時(shí)必須先通過這些門,然后才能進(jìn)入相應(yīng)的中斷處理程序(Interrupt Service Routine, ISR)。

?如前文所述,所有的中斷(或異常)都被 統(tǒng)一 的編排在了IDT中,即這個(gè)IDT包含了異常向量和硬件中斷向量,而IDT中一共有256個(gè)門描述符,每個(gè)門描述符描述一個(gè)中斷(或異常),同時(shí)就對(duì)應(yīng)著一個(gè)中斷(或異常)的處理程序。這256個(gè)中斷或異常向量的分配如下:
* 從0~31 的向量對(duì)應(yīng)于異常和非屏蔽中斷;
* 從32~47 的向量(即由I/O 設(shè)備引起的中斷)分配給屏蔽中斷;
* 剩余的從48~255 的向量用來標(biāo)識(shí)軟中斷。Linux 只用了其中的一個(gè)(即128 或0x80向量)用來實(shí)現(xiàn)系統(tǒng)調(diào)用(trap)。當(dāng)用戶態(tài)下的進(jìn)程執(zhí)行一條int 0x80 匯編指令時(shí),CPU 就切換到內(nèi)核態(tài),并開始執(zhí)行system_call() 內(nèi)核函數(shù)。

?我們先說異常的處理。在這256個(gè)處理程序中,前32個(gè)都是非屏蔽中斷,0~20號(hào)中斷處理程序又都用于CPU的異常中斷(即軟中斷),隨后的12個(gè)中斷處理程序被Intel保留,詳細(xì)情況如下:

// 0~31個(gè)都是非屏蔽中斷
// 聲明中斷處理函數(shù) 0-19 屬于 CPU 的異常中斷 
// ISR:中斷處理程序(interrupt service routine)
void isr0();        // 0 #DE 除 0 異常 
void isr1();        // 1 #DB 調(diào)試異常 
void isr2();        // 2 NMI 
void isr3();        // 3 BP 斷點(diǎn)異常 
void isr4();        // 4 #OF 溢出 
void isr5();        // 5 #BR 對(duì)數(shù)組的引用超出邊界 
void isr6();        // 6 #UD 無效或未定義的操作碼 
void isr7();        // 7 #NM 設(shè)備不可用(無數(shù)學(xué)協(xié)處理器) 
void isr8();        // 8 #DF 雙重故障(有錯(cuò)誤代碼) 
void isr9();        // 9 協(xié)處理器跨段操作 
void isr10();       // 10 #TS 無效TSS(有錯(cuò)誤代碼) 
void isr11();       // 11 #NP 段不存在(有錯(cuò)誤代碼) 
void isr12();       // 12 #SS 棧錯(cuò)誤(有錯(cuò)誤代碼) 
void isr13();       // 13 #GP 常規(guī)保護(hù)(有錯(cuò)誤代碼) 
void isr14();       // 14 #PF 頁(yè)故障(有錯(cuò)誤代碼) 
void isr15();       // 15 CPU 保留 
void isr16();       // 16 #MF 浮點(diǎn)處理單元錯(cuò)誤 
void isr17();       // 17 #AC 對(duì)齊檢查 
void isr18();       // 18 #MC 機(jī)器檢查 
void isr19();       // 19 #XM SIMD(單指令多數(shù)據(jù))浮點(diǎn)異常
// 20-31 Intel 保留
//...

?其次再說硬件中斷的處理。在前面的8259A芯片的示意圖中,可能你已經(jīng)發(fā)現(xiàn),我們給每一個(gè)外部中斷(可屏蔽中斷)都賦予了一個(gè)編號(hào),這16個(gè)編號(hào)被稱作中斷請(qǐng)求號(hào)碼(Interrupt Request, IRQ)。它們實(shí)際上就是IDT中的32~47號(hào)向量,詳細(xì)情況如下:

// IRQ 定義
// 定義IRQ
#define  IRQ0     32    // 電腦系統(tǒng)計(jì)時(shí)器
#define  IRQ1     33    // 鍵盤
#define  IRQ2     34    // 與 IRQ9 相接,MPU-401 MD 使用
#define  IRQ3     35    // 串口設(shè)備
#define  IRQ4     36    // 串口設(shè)備
#define  IRQ5     37    // 建議聲卡使用
#define  IRQ6     38    // 軟驅(qū)傳輸控制使用
#define  IRQ7     39    // 打印機(jī)傳輸控制使用
#define  IRQ8     40    // 即時(shí)時(shí)鐘
#define  IRQ9     41    // 與 IRQ2 相接,可設(shè)定給其他硬件
#define  IRQ10    42    // 建議網(wǎng)卡使用
#define  IRQ11    43    // 建議 AGP 顯卡使用
#define  IRQ12    44    // 接 PS/2 鼠標(biāo),也可設(shè)定給其他硬件
#define  IRQ13    45    // 協(xié)處理器使用
#define  IRQ14    46    // IDE0 傳輸控制使用
#define  IRQ15    47    // IDE1 傳輸控制使用

// 外部中斷 
// 聲明 IRQ 函數(shù)
// IRQ:中斷請(qǐng)求(Interrupt Request)
void irq0();        // 電腦系統(tǒng)計(jì)時(shí)器
void irq1();        // 鍵盤
void irq2();        // 與 IRQ9 相接,MPU-401 MD 使用
void irq3();        // 串口設(shè)備
void irq4();        // 串口設(shè)備
void irq5();        // 建議聲卡使用
void irq6();        // 軟驅(qū)傳輸控制使用
void irq7();        // 打印機(jī)傳輸控制使用
void irq8();        // 即時(shí)時(shí)鐘
void irq9();        // 與 IRQ2 相接,可設(shè)定給其他硬件
void irq10();       // 建議網(wǎng)卡使用
void irq11();       // 建議 AGP 顯卡使用
void irq12();       // 接 PS/2 鼠標(biāo),也可設(shè)定給其他硬件
void irq13();       // 協(xié)處理器使用
void irq14();       // IDE0 傳輸控制使用
void irq15();       // IDE1 傳輸控制使用

?這樣,用戶程序就可通過INT指令加一個(gè)中斷向量向系統(tǒng)發(fā)出一個(gè)中斷請(qǐng)求了,如DOS匯編指令中使用 INT 21 就能調(diào)用功能豐富的21號(hào)中斷服務(wù)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉