技術頻道

娓娓工業(yè)
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > 探究硬中斷和軟中斷的原理和區(qū)別

探究硬中斷和軟中斷的原理和區(qū)別

時間:2019-01-17 10:24:26來源:MCU開發(fā)加油站

導語:?從本質上來講,中斷是一種電信號,當設備有某種事件發(fā)生時,它就會產生中斷,通過總線把電信號發(fā)送給中斷控制器。

從本質上來講,中斷是一種電信號,當設備有某種事件發(fā)生時,它就會產生中斷,通過總線把電信號發(fā)送給中斷控制器。

控制器,通訊

如果中斷的線是激活的,中斷控制器就把電信號發(fā)送給處理器的某個特定引腳。處理器于是立即停止自己正在做的事,跳到中斷處理程序的入口點,進行中斷處理。

硬中斷

由與系統(tǒng)相連的外設(比如網卡、硬盤)自動產生的。主要是用來通知操作系統(tǒng)系統(tǒng)外設狀態(tài)的變化。比如當網卡收到數據包的時候,就會發(fā)出一個中斷。我們通常所說的中斷指的是硬中斷(hardirq)。

硬中斷是由硬件產生的,比如,像磁盤,網卡,鍵盤,時鐘等。每個設備或設備集都有它自己的IRQ(中斷請求)。基于IRQ,CPU可以將相應的請求分發(fā)到對應的硬件驅動上(注:硬件驅動通常是內核中的一個子程序,而不是一個獨立的進程)。

處理中斷的驅動是需要運行在CPU上的,因此,當中斷產生的時候,CPU會中斷當前正在運行的任務,來處理中斷。在有多核心的系統(tǒng)上,一個中斷通常只能中斷一顆CPU(也有一種特殊的情況,就是在大型主機上是有硬件通道的,它可以在沒有主CPU的支持下,可以同時處理多個中斷。)。

硬中斷可以直接中斷CPU。它會引起內核中相關的代碼被觸發(fā)。對于那些需要花費一些時間去處理的進程,中斷代碼本身也可以被其他的硬中斷中斷。

對于時鐘中斷,內核調度代碼會將當前正在運行的進程掛起,從而讓其他的進程來運行。它的存在是為了讓調度代碼(或稱為調度器)可以調度多任務。

軟中斷

為了滿足實時系統(tǒng)的要求,中斷處理應該是越快越好。linux為了實現這個特點,當中斷發(fā)生的時候,硬中斷處理那些短時間就可以完成的工作,而將那些處理事件比較長的工作,放到中斷之后來完成,也就是軟中斷(softirq)來完成。

軟中斷的處理非常像硬中斷。然而,它們僅僅是由當前正在運行的進程所產生的。

通常,軟中斷是一些對I/O的請求。這些請求會調用內核中可以調度I/O發(fā)生的程序。對于某些設備,I/O請求需要被立即處理,而磁盤I/O請求通??梢耘抨牪⑶铱梢陨院筇幚怼8鶕蘒/O模型的不同,進程或許會被掛起直到I/O完成,此時內核調度器就會選擇另一個進程去運行。I/O可以在進程之間產生并且調度過程通常和磁盤I/O的方式是相同。

軟中斷僅與內核相聯(lián)系。而內核主要負責對需要運行的任何其他的進程進行調度。一些內核允許設備驅動的一些部分存在于用戶空間,并且當需要的時候內核也會調度這個進程去運行。

軟中斷并不會直接中斷CPU。也只有當前正在運行的代碼(或進程)才會產生軟中斷。這種中斷是一種需要內核為正在運行的進程去做一些事情(通常為I/O)的請求。有一個特殊的軟中斷是Yield調用,它的作用是請求內核調度器去查看是否有一些其他的進程可以運行。

中斷嵌套

Linux下硬中斷是可以嵌套的,但是沒有優(yōu)先級的概念,也就是說任何一個新的中斷都可以打斷正在執(zhí)行的中斷,但同種中斷除外。軟中斷不能嵌套,但相同類型的軟中斷可以在不同CPU上并行執(zhí)行。

軟中斷指令

int是軟中斷指令。

中斷向量表是中斷號和中斷處理函數地址的對應表。

intn-觸發(fā)軟中斷n。相應的中斷處理函數的地址為:中斷向量表地址+4*n。

硬中斷和軟中斷的區(qū)別

軟中斷是執(zhí)行中斷指令產生的,而硬中斷是由外設引發(fā)的。

硬中斷的中斷號是由中斷控制器提供的,軟中斷的中斷號由指令直接指出,無需使用中斷控制器。

硬中斷是可屏蔽的,軟中斷不可屏蔽。

硬中斷處理程序要確保它能快速地完成任務,這樣程序執(zhí)行時才不會等待較長時間,稱為上半部。

軟中斷處理硬中斷未完成的工作,是一種推后執(zhí)行的機制,屬于下半部。

開關

(1)硬中斷的開關

簡單禁止和激活當前處理器上的本地中斷:local_irq_disable();local_irq_enable();

保存本地中斷系統(tǒng)狀態(tài)下的禁止和激活:unsignedlongflags;local_irq_save(flags);local_irq_restore(flags);

(2)軟中斷的開關

禁止下半部,如softirq、tasklet和workqueue等:local_bh_disable();local_bh_enable();

需要注意的是,禁止下半部時仍然可以被硬中斷搶占。

(3)判斷中斷狀態(tài)

#definein_interrupt()(irq_count())//是否處于中斷狀態(tài)(硬中斷或軟中斷)#definein_irq()(hardirq_count())//是否處于硬中斷#definein_softirq()(softirq_count())//是否處于軟中斷

聲明:本文為轉載類文章,如涉及版權問題,請及時聯(lián)系我們刪除(QQ:2737591964),不便之處,敬請諒解!

標簽:

點贊

分享到:

上一篇:西克——整合編碼器的“OMNI...

下一篇:魏德米勒Fieldpower助力DHL分...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.wangxinlc.cn)獨家所有。如需轉載請與0755-82949061聯(lián)系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯(lián)網或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯(lián)系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業(yè)自動化與智能制造的全媒體“互聯(lián)網+”創(chuàng)新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號