下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、2.2中斷技術(shù),2.2.1 中斷概念 2.2.2 中斷源分類 2.2.3 中斷和異常的響應(yīng)及服務(wù) 2.2.4 中斷事件處理 2.2.5 中斷優(yōu)先級和多重中斷 2.2.6 Linux中斷處理 2.2.7 Windows 2003中斷處理,2.2.1中斷的概念,請求系統(tǒng)服務(wù), 實現(xiàn)并行工作, 處理突發(fā)事件, 滿足實時要求, 都需要打斷處理器正常的工作,為此,提出了中斷概念。,中斷的定義,中斷是指程序執(zhí)行過程中,遇到急需處理的事件時,暫時中止CPU上現(xiàn)行程序的運行,轉(zhuǎn)去執(zhí)行相應(yīng)的事件處理程序,待處理完成后再返回原程序被中斷處(斷點)或調(diào)度其他程序執(zhí)行的過程。,2.2.2中斷源分類(1),從中斷事件的
2、性質(zhì)和激活的手段來說,可以分成兩類: 強迫性中斷事件強迫性中斷事件不是正在運行的程序所期待的,而是由于某種事故或外部請求信息所引起的,分為: 機器故障中斷事件。 程序性中斷事件。 外部中斷事件。 輸入輸出中斷事件。 自愿性中斷事件自愿性中斷事件是正在運行的程序所期待的事件。是訪管指令引起的。,中斷源分類(2)按中斷事件的性質(zhì)和激活方式劃分,中斷源分類(3),硬中斷,軟中斷,外中斷(中斷、異步中斷),內(nèi)中斷(異常、同步中斷),信號,軟件中斷,按事件來源和實現(xiàn)手段分類,中斷源分類(4), 外中斷(中斷或異步中斷)-指來自處理器之外的中斷信號,包括時鐘中斷、鍵盤中斷和設(shè)備中斷等;外中斷又分可屏蔽中斷
3、和不可屏蔽中斷,每個不同中斷具有不同中斷優(yōu)先級,表示事件的緊急程度,在處理高一級中斷時,往往會屏蔽部分或全部低級中斷。 內(nèi)中斷(異常或同步中斷)-指來自處理器內(nèi)部,通常由于程序執(zhí)行中,出現(xiàn)與當(dāng)前指令關(guān)聯(lián)的、不正常的、或是錯誤的事件。,中斷和異常的區(qū)別, 中斷是由與現(xiàn)行指令無關(guān)的中斷信號觸發(fā)的(異步的),且中斷的發(fā)生與CPU處在用戶模式或內(nèi)核模式無關(guān),在兩條機器指令之間才可響應(yīng)中斷,一般來說,中斷處理程序提供的服務(wù)不是為當(dāng)前進(jìn)程所需的; 異常是由處理器正在執(zhí)行現(xiàn)行指令而引起的,一條指令執(zhí)行期間允許響應(yīng)異常,異常處理程序提供的服務(wù)是為當(dāng)前進(jìn)程所用的。異常包括很多方面,有出錯(fault),也有陷入
4、(trap)等。,Linux異常, Linux為例,異常按錯誤報告方式分四種: 故障、 陷阱、 終止、 編程異常。 故障-發(fā)生時保存的返回指令地址指向觸發(fā)異常的當(dāng)前那條指令,故障處理后會重新執(zhí)行。 編程異常和陷阱-由于執(zhí)行訪管指令引起的同步操作,異常返回時,回到觸發(fā)異常的下一條指令。,硬中斷與軟中斷,中斷和異常要通過硬件設(shè)施來產(chǎn)生中斷請求,是硬中斷。 軟中斷是利用硬中斷的概念,用軟件方法對中斷機制進(jìn)行模擬,實現(xiàn)宏觀上的異步執(zhí)行效果。 軟中斷分:“信號”和“軟件中斷”。,中斷的通常用法,“中斷”(硬中斷)用于外部設(shè)備對CPU的中斷(中斷的是正在運行的任何程序),轉(zhuǎn)向中斷處理程序執(zhí)行; “異?!?
5、硬中斷)因指令執(zhí)行不正常而中斷CPU(中斷的是正在執(zhí)行這條指令的程序),轉(zhuǎn)向異常處理程序; “軟件中斷”(軟中斷)用于硬中斷服務(wù)程序?qū)?nèi)核的中斷,在上半部分中發(fā)出軟件中斷(即標(biāo)記下半部分),使得中斷下半部分在適當(dāng)時刻獲得處理; “信號”(軟中斷)用于內(nèi)核或進(jìn)程對某個進(jìn)程的中斷,通知進(jìn)程某個特定事件發(fā)生或迫使進(jìn)程執(zhí)行信號處理程序。,中斷機制與信號機制進(jìn)行類比,相同點:(1)概念上是一致的 ,(2)兩者都是“異步”的 ,(3)實現(xiàn)上均采用“向量表”,(4)均具有“屏蔽”設(shè)施。 區(qū)別是:中斷機制由硬件與軟件相結(jié)合來實現(xiàn),而信號機制由軟件實現(xiàn);中斷向量表和中斷處理程序(由系統(tǒng)提供)均在系統(tǒng)空間,而信號
6、向量表雖在系統(tǒng)空間,但信號處理程序由應(yīng)用程序提供,并在用戶空間執(zhí)行。,硬中斷與軟中斷BH進(jìn)行類比,(1)數(shù)組bh_base 相當(dāng)于硬件中斷機制中的數(shù)組irq_desc ; (2)bh_active在概念上相當(dāng)于硬件的“中斷請求寄存器”,而bh_mask相當(dāng)于硬件中的“中斷屏蔽寄存器”; (3)執(zhí)行一個BH函數(shù)時,就通過mark_bh( )將bh_active中的某位設(shè)成1,相當(dāng)于中斷源發(fā)出(軟件)中斷請求,所設(shè)置的具體標(biāo)志位則類似于“中斷向量”; (4)如果bh_mask中的相應(yīng)位是l,就會在每次執(zhí)行完do_IRQ()中的中斷服務(wù)程序后,及每次系統(tǒng)調(diào)用結(jié)束后,在函數(shù)do_bottom_half
7、()中執(zhí)行相應(yīng)BH函數(shù),而do_bottom_half(),則類似于do_IRQ( )。,硬中斷或軟中斷處理延時問題,CPU接到和響應(yīng)硬中斷或異常后會立即調(diào)用中斷或異常處理程序處理;對于接收到的信號或軟件中斷,此時由于進(jìn)程未必占有處理器運行或內(nèi)核正在執(zhí)行敏感性操作,通常會有一定時間的延遲,在適當(dāng)?shù)臅r刻,內(nèi)核或相關(guān)進(jìn)程才能加以處理。 信號和軟件中斷雖然都由軟件產(chǎn)生,并都由軟件處理,但它們的中斷來源、使用場合、實現(xiàn)手段并不相同。,中斷/異常響應(yīng)要做四件事,發(fā)現(xiàn)中斷源: 保護現(xiàn)場: 轉(zhuǎn)向處理中斷/異常事件的處理程序: 恢復(fù)現(xiàn)場:,IBM中大型機中斷響應(yīng)過程,現(xiàn)行PSW,中斷時保存現(xiàn)行PSW,中斷時裝
8、入 現(xiàn)行PSW,中斷后恢復(fù)PSW,裝配中斷碼,IBM PC機中斷的響應(yīng)過程,2.2.4 中斷事件處理,1 中斷和異常的一般處理過程 2 硬件故障中斷 3 程序性中斷 4 I/O中斷 5 訪管中斷 6時鐘中斷,中斷處理執(zhí)行流程,1)設(shè)備發(fā)出中斷請求,中斷控制器根據(jù)IRQ號轉(zhuǎn)換成中斷向量號;CPU響應(yīng)中斷后,保存PSW等到核心棧,根據(jù)向量號查IDT,生成指向中斷描述符表的指針,找到中斷服務(wù)程序的地址,中斷處理程序開始執(zhí)行; 2)進(jìn)入中斷公共代碼段common_interrupt處執(zhí)行SAVE_ALL; 3)調(diào)用do_IRQ()函數(shù),設(shè)置中斷源狀態(tài)等;為發(fā)出中斷請求的設(shè)備提供服務(wù),標(biāo)記中斷下半部分;
9、 5)檢查softirq_active和softirq_mask是否有標(biāo)記的下半部分,有就調(diào)用do_softirq( )執(zhí)行之; 6)跳轉(zhuǎn)到ret_from_intr退出,恢復(fù)中斷前的現(xiàn)場。,異常處理執(zhí)行流程,1)異常產(chǎn)生后,將硬件錯誤碼和異常向量號存入當(dāng)前進(jìn)程PCB中; 2)判別異常產(chǎn)生于核心態(tài)還是用戶態(tài),對于前者,轉(zhuǎn)向內(nèi)核預(yù)定義服務(wù)程序處理,沒有被處理的核心態(tài)異常是操作系統(tǒng)的致命錯誤; 3)對于用戶態(tài)異常,終止當(dāng)前進(jìn)程運行,調(diào)用force_sig( )函數(shù)給當(dāng)前進(jìn)程發(fā)信號; 4)從ret_from_exception處返回用戶空間時,檢查進(jìn)程是否有信號等待處理,如果有則根據(jù)信號類型調(diào)用相應(yīng)
10、函數(shù)進(jìn)行處理。,時鐘中斷(1),時鐘是操作系統(tǒng)進(jìn)行調(diào)度工作的重要工具,如讓分時進(jìn)程作時間片輪轉(zhuǎn)、讓實時進(jìn)程定時發(fā)出或接收控制信號、系統(tǒng)定時喚醒或阻塞一個進(jìn)程、對用戶進(jìn)程進(jìn)行記賬 時鐘可分成絕對時鐘和間隔時鐘兩種,時鐘中斷(2),1) 絕對時鐘服務(wù) 提供以下功能的函數(shù): update_clock( )更新當(dāng)前時間; get_time( )返回當(dāng)前時鐘值; set_clock( )把當(dāng)前時間設(shè)置為新值。,時鐘中斷(3),2) 間隔定時器 進(jìn)程可被延遲、阻塞,直到被間隔定時器中斷信號喚醒,應(yīng)提供以下函數(shù): delay(tdel)把調(diào)用進(jìn)程阻塞由參數(shù)tdel指定的時間長度,進(jìn)程保持阻塞直到本地時間到達(dá)
11、進(jìn)程阻塞時的當(dāng)前時間+tdel的時刻。 set_timer(tdel)硬件間隔定時器被設(shè)置為起始的遞減值tdel,當(dāng)該值達(dá)到0時,產(chǎn)生間隔時鐘中斷,調(diào)用timeout( )函數(shù)進(jìn)行處理。,時鐘中斷(4),3) 邏輯定時器需要提供函數(shù): tn=creat_ltime( ):創(chuàng)建邏輯定時器,tn中存放返回標(biāo)識符。 destroy_ltime(tn):撤銷tn標(biāo)識的邏輯定時器。 set_ltime(tn,tv):把tv值裝到邏輯定時器tn中,當(dāng)該值為0時,產(chǎn)生時間到中斷。,時鐘中斷(5)利用間隔定時器實現(xiàn)函數(shù)delay,delay(tdel) set_timer(tdel); /硬件間隔時鐘設(shè)置為t
12、del P(delsem); /進(jìn)程執(zhí)行P操作而阻塞,等待中斷 / delsem為二元信號量,初值為0 timeout( ) V(delsem); /中斷產(chǎn)生,執(zhí)行V操作釋放進(jìn)程 ;,時鐘中斷(6),(1) 使用帶有絕對喚醒定時器的優(yōu)先級隊列,時鐘中斷(7)進(jìn)程進(jìn)入定時器延時隊列的算法,步1 使用get_time( )函數(shù)利用計算機本地時鐘來獲得當(dāng)前時間; 步2 wakeup=當(dāng)前時間+tdel,用以確定新元素移入隊列中的位置; 步3 如果新元素的喚醒值小于隊列中第一個元素的wakeup值,則新元素移入隊列頭部,同時,使用set_timer(tn,tdel)將硬件間隔定時器設(shè)為新的延遲間隔td
13、el。 步4 否則,按新元素的喚醒值移入隊列的適當(dāng)位置。,時鐘中斷(8),(2) 使用帶有時間差值的優(yōu)先級隊列,時鐘中斷(9) set_ltimer(tn,tdel),查找左、右兩個元素,在它們之間插入新元素,這個工作是通過累加元素中的差值來完成的,從間隔時鐘的當(dāng)前值開始,直到達(dá)tdel值; 把右元素中當(dāng)前存儲的差值分為兩部分:一部分被存在新元素中,并且代表左元素與新元素之間的差值,另一部分是存儲在右元素中,代表新元素與右元素之間的差值。,其他中斷,硬件故障中斷:硬件故障造成的;中斷處理程序保護現(xiàn)場,停止設(shè)備工作,停止處理器運行,提供故障信息報告;并對破環(huán)進(jìn)行估計和恢復(fù)。 程序性中斷:包括語法
14、錯誤、邏輯錯誤和程序運行產(chǎn)生的異常。 I/O中斷:I/O正常結(jié)束、I/O操作故障、I/O操作異常、設(shè)備報到或設(shè)備結(jié)束 訪管中斷:執(zhí)行操作系統(tǒng)的功能調(diào)用,訪管指令包括操作碼和訪管參數(shù),2.2.5 中斷優(yōu)先級和多重中斷,1 中斷的優(yōu)先級 2 中斷的屏蔽 3 多重中斷事件的處理,計算機執(zhí)行的每一瞬間,可能有幾個中斷事件同時發(fā)生,中斷裝置如何來響應(yīng)同時發(fā)生的中斷呢? 以不發(fā)生中斷丟失為前提,把緊迫程度相當(dāng)?shù)闹袛嘣礆w在同一級,緊迫程度差別大的中斷源歸在不同級,級別高的有優(yōu)先獲得響應(yīng)的權(quán)力,中斷裝置預(yù)定的這個響應(yīng)順序稱為中斷優(yōu)先級. 中斷響應(yīng)方式包括: 硬件方式:硬件鏈?zhǔn)脚抨犉?軟件方式:查詢程序 中斷優(yōu)
15、先級只是表示中斷裝置響應(yīng)中斷的次序,系統(tǒng)設(shè)計時確定并且不能被改變;操作系統(tǒng)在處理響應(yīng)中斷時有先后次序問題,響應(yīng)順序和處理順序未必一樣,先響應(yīng)的可以后處理。,中斷優(yōu)先級(1),中斷優(yōu)先級(2),IBM系列機中,硬件排定中斷優(yōu)先級響應(yīng)次序,由高到低:機器校驗中斷、自愿性中斷、程序性中斷、外部中斷、I/O中斷; Linux Intel x86機中,允許有256個中斷或異常信號,并分五類,硬件排定中斷和異常優(yōu)先級響應(yīng)次序,由高到低:異常、軟件中斷、非屏蔽中斷和可屏蔽中斷。 在Windows運行的Intel x86系統(tǒng)中,先把中斷事件排定一個中斷請求優(yōu)先級稱為處理器的IRQL,當(dāng)內(nèi)核線程運行時,可以提高
16、或降低處理器的IRQL,如果中斷源的IRQL等于或低于當(dāng)前的中斷優(yōu)先級,則該中斷被屏蔽,直到內(nèi)核降低IRQL。,中斷的屏蔽,CPU通過指令來設(shè)置可編程中斷控制器的屏蔽碼 主機可允許或禁止某類中斷的響應(yīng),如允許或禁止所有的I/O中斷、外部中斷、及某些程序性中斷。 有些中斷是不能被禁止的,例如,計算機中的自愿性訪管中斷就不能被禁止。,多重中斷事件的處理,中斷正在進(jìn)行處理期間,CPU又響應(yīng)新的中斷事件,于是暫時停止正在運行的中斷處理程序,轉(zhuǎn)去執(zhí)行新的中斷處理程序,就叫多重中斷(又稱中斷嵌套)。處理方法: (1) 串行處理, (2) 嵌套處理, (3) 即時處理。,2.2.6 Linux中斷處理,1
17、Linux內(nèi)核處理流程,快中斷與慢中斷, Linux中,區(qū)分快中斷和慢中斷兩類中斷事件。 處理慢中斷前需保存所有寄存器的內(nèi)容,而快中斷處理僅要保存被常規(guī)C函數(shù)修改的寄存器;慢中斷處理時,不屏蔽其他中斷信號,而快中斷處理時會屏蔽所有其他中斷; 慢中斷處理完畢后,通常不立即返回被中斷的進(jìn)程,而是進(jìn)入調(diào)度程序重新調(diào)度,調(diào)度結(jié)果未必是被中斷的進(jìn)程運行(是搶先式調(diào)度)。而快中斷處理完畢后,通?;謴?fù)現(xiàn)場返回被中斷的進(jìn)程繼續(xù)執(zhí)行(是非搶先式調(diào)度)。,下半部分處理概述,中斷處理程序的特點 什么是下半部分處理? Top half Bottom half,中斷處理程序特點,以異步方式運行,可能會打斷關(guān)鍵代碼的執(zhí)行
18、,甚至打斷其他中斷處理程序的執(zhí)行; 在屏蔽中斷狀態(tài)下運行,最壞的情況會禁止所有中斷; 要對硬件進(jìn)行操作,有很高的時限要求;它在中斷上下文中運行,故不能被阻塞 。,Linux各種下半部分機制,bottom half、 task queue、 tasklet、 work queue、 Softirq。,下半部分(bottom half),實現(xiàn)原理 BH數(shù)組、函數(shù)入口指針 bh_base、函數(shù)安裝標(biāo)志bh_mask 、函數(shù)處理標(biāo)志bh_active BH的缺點:1,數(shù)量限制 2,必須在全局范圍內(nèi)同步,bh-mask 31 0,任務(wù)隊列(task queue),實現(xiàn)原理:引入任務(wù)隊列,實現(xiàn)對各種任務(wù)的
19、延遲執(zhí)行。 預(yù)定任務(wù)隊列: 1) 定時器隊列(TQ_TIMER): 2) 即時隊列(TQ_IMMEDIATE): 3) 進(jìn)程調(diào)度隊列(TQ_SCHEDULE): 4) 磁盤隊列(TQ_DISK): 任務(wù)隊列的缺點:靈活性差,不能勝任網(wǎng)絡(luò)等對性能要求較高的子系統(tǒng),小任務(wù)(tasklet),tasklet能更好支持SMP,它基于軟中斷來實現(xiàn),但比軟中斷接口簡單,鎖保護要求低;softirq保留給執(zhí)行頻率及時間要求特高的下半部分使用(如網(wǎng)絡(luò)和SCSI),多數(shù)場合下可使用tasklet。 使用tasklet的步驟:聲明 、編程、調(diào)度 。 BH全局串行處理,不適應(yīng)SMP環(huán)境,而不同tasklet可同時運
20、行于不同CPU上,當(dāng)然,系統(tǒng)保證相同tasklet不會同時在不同CPU上運行,在這種情形下,tasklet就不需要是可重入的。 在新版Linux中,tasklet是建議的異步任務(wù)延遲執(zhí)行機制。,工作隊列work queue,Linux 2.5內(nèi)核引入-工作隊列,它把一個任務(wù)延遲,并交給內(nèi)核線程去完成,且該任務(wù)總是在進(jìn)程上下文中執(zhí)行,通過工作隊列執(zhí)行的代碼能占盡進(jìn)程上下文的優(yōu)勢,最重要的是工作隊列允許重新調(diào)度及阻塞。 如果延遲執(zhí)行的任務(wù)需要阻塞,需要獲取信號量或需要獲得大量主存時,那么,可選擇工作隊列,否則可使用tasklet或softirq。,軟中斷softirq (1),Linux沿用最早B
21、H思想,實現(xiàn)了龐大和復(fù)雜的軟中斷子系統(tǒng)-softirq,它是一種軟中斷機制,又是一個框架,包括tasklet,及為網(wǎng)絡(luò)操作專門設(shè)計的軟中斷。 軟中斷結(jié)構(gòu): struct softirq_action void (*action)(struct softirq_action *); /待執(zhí)行的函數(shù) void *data; /傳給函數(shù)的參數(shù) ;,軟中斷softirq(2),最多注冊32個軟中斷,目前預(yù)定義六個元素, enum HI_SOFTIRQ, /高優(yōu)先級tasklet TIMER_SOFTIRQ /定時器下半部分 NET_TX_SOFTIRQ, /發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包 NET_RX_SOFTIRQ
22、, /接收網(wǎng)絡(luò)數(shù)據(jù)包 SCSI_SOFTIRQ, /SCSI下半部分 TASKLET_SOFTIRQ, /公共tasklet ; 軟中斷使用步驟:聲明 、注冊 、觸發(fā) 、處理 。,軟中斷softirq(3),軟中斷執(zhí)行時機 : 從系統(tǒng)調(diào)用中返回(ret_from_sys_call)時、 從異常中返回(ret_from_exception)時、 調(diào)度程序中(schedule)、 處理完硬件中斷之后(do_IRQ)。,2.2.7Windows 2003中斷處理,Window2003中斷類型 1.中斷有I/O設(shè)備、處理器時鐘或定時器等,可以啟用或禁用。中斷是異步事件,可能隨時發(fā)生,與處理器正在執(zhí)行的內(nèi)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 正規(guī)銷戶合同范例范例
- 學(xué)校書采購合同范例范例
- 工地勞務(wù)合同范例封面
- 銅陵職業(yè)技術(shù)學(xué)院《公共政策概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 銅陵學(xué)院《自動駕駛概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 完整版100以內(nèi)加減法混合運算4000道89
- 完整版100以內(nèi)加減法混合運算4000道58
- 銅川職業(yè)技術(shù)學(xué)院《汽車運用工程I》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)數(shù)學(xué)二年級第二學(xué)期口算計算共5077道題
- 小學(xué)數(shù)學(xué)二年級第二學(xué)期口算計算共5127道題
- 《文明禮儀概述培訓(xùn)》課件
- 新疆大學(xué)答辯模板課件模板
- 數(shù)值分析智慧樹知到期末考試答案2024年
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計規(guī)范
- 跨文化溝通心理學(xué)智慧樹知到期末考試答案2024年
- 《中華民族共同體概論》考試復(fù)習(xí)題庫(含答案)
- NB-T 47013.15-2021 承壓設(shè)備無損檢測 第15部分:相控陣超聲檢測
- 標(biāo)準(zhǔn)的指令性目標(biāo)問題解決型案例
- 預(yù)制梁場建設(shè)驗收標(biāo)準(zhǔn)
- 機械工程測試與控制技術(shù)項目設(shè)計
- 干式變壓器檢修維護手冊.
評論
0/150
提交評論