Linux外部中斷程序的前半部分和后半部分
Linux把外部中斷從概念上分為前半(top half,th)部分和后半(bottom half,bh)部分兩部分。前者是響應(yīng)中斷之后被立即執(zhí)行的部分;后者是可在稍后某個(gè)時(shí)候執(zhí)行的部分。因此,在中斷服務(wù)程序的設(shè)計(jì)時(shí),要設(shè)計(jì)兩個(gè)函數(shù):一個(gè)用來(lái)實(shí)現(xiàn)前半部分;另一個(gè)用來(lái)實(shí)現(xiàn)后半部分。前半部分除了要完成分配給它的任務(wù)之外,還要決定其相關(guān)的后半部分是否需要在稍后的某個(gè)時(shí)候執(zhí)行。
之所以將中斷程序分為兩部分,是因?yàn)樵谝粋€(gè)中斷請(qǐng)求處理程序中,并非所有工作都是急需處理的,通常會(huì)有一部分工作可在稍晚一些時(shí)候來(lái)處理。
一般來(lái)說(shuō),外部設(shè)各與處理器之間的數(shù)據(jù)傳輸工作常常是比較緊急的,而對(duì)于這些數(shù)據(jù)的分析和處理工作,一般就不那么緊急了。為了防止處理器因處理不太急切的工作而耽擱了其他緊急工作的處理,Linux構(gòu)建了這種將中斷程序分為兩部分的特殊中斷機(jī)制,并允許用戶根據(jù)工作的緊急程度把一個(gè)中斷處理分為緊急的前半部分和不太緊急的后半部分。
由于放在后半部分的工作的緊急程度不那么“硬”,也由于后半部分的執(zhí)行是由軟件來(lái)啟動(dòng)的,所以后半部分的中斷機(jī)制也叫做“軟中斷”。