技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 服務(wù)器類 >

linux中斷--中斷原理分析

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2018-08-15 18:03┆點擊:

  中斷之原理篇

  前言:

  中斷是計算機發(fā)展中一個重要的技術(shù),它的出現(xiàn)很大程度上解放了CPU,提高了CPU的執(zhí)行效率。

  在中斷出現(xiàn)之前,CPU對IO采用的是輪詢的方式進行服務(wù),這使的CPU糾結(jié)在某一個IO上,一直在等待它的響應,如果它不響應,CPU就在原地一直的等下去。這樣就導致了其他IO口也在等待CPU的服務(wù),如果某個IO出現(xiàn)了important or emergency affairs,CPU也抽不出身去響應這個IO。

  為了解決這個糾結(jié)的問題就------>出現(xiàn)了中斷

  中斷控制的主要優(yōu)點是只有在IO接口需要服務(wù)時才去響應它,使得CPU很淡定的做它自己的事情,只有IO口有需求的時候才去響應它。同時中斷中也設(shè)計了中斷優(yōu)先級,來處理一些很緊急的事件。

  一.中斷的基本知識

  1.中斷的概念:

  所謂中斷,是指CPU在正常運行程序時,由于程序的預先安排或內(nèi)外部事件,引起CPU中斷正在運行的程序,而轉(zhuǎn)到發(fā)生中斷事件程序中。這些引起程序中斷的事件稱為中斷源。

  其實從物理學的角度看,中斷是一種電信號,由硬件設(shè)備產(chǎn)生,并直接送入中斷控制器(如 8259A)的輸入引腳上,然后再由中斷控制器向處理器發(fā)送相應的信號。處理器一經(jīng)檢測到該信號,便中斷自己當前正在處理的工作,轉(zhuǎn)而去處理中斷。此后,處理器會通知 OS 已經(jīng)產(chǎn)生中斷。這樣,OS 就可以對這個中斷進行適當?shù)奶幚?。不同的設(shè)備對應的中斷不同,而每個中斷都通過一個唯一的數(shù)字標識,這些值通常被稱為中斷請求線。

  2.那么當產(chǎn)生一個中斷時,CPU是如何識別的呢?

  在Intel X86中可以支持256中向量中斷,為了使處理器能使別每種中斷源,給它們進行了編號----->叫做中斷向量

  3.這些中斷向量在Linux中是如何分配的:

  編號0~31的向量對應于異常和非屏蔽中斷(這類也屬于向量中斷或者內(nèi)部中斷,向量中斷的特性就是一一映射,一個中斷向量對應一個中斷處理例程)

  編號32~47的向量(即由IO設(shè)備引起的中斷)分配給屏蔽中斷。(這類也屬于非向量中斷或者外部中斷,在Intel手冊中常說的就是這類中斷。非向量中斷的特性在下文就可以體現(xiàn)出來。)

  編號48~255的向量用來標示軟中斷。Linux用其中的128或0x80來實現(xiàn)系統(tǒng)調(diào)用(所以通過系統(tǒng)調(diào)用來進入內(nèi)核空間都需要通過128中斷操作)

  非屏蔽中斷的向量和異常的向量是固定的。

  4.異常和中斷的區(qū)別:

  1>異常:是指CPU內(nèi)部出現(xiàn)的中斷,即在CPU執(zhí)行特定指令時出現(xiàn)的非法情況。同時異常也稱為同步中斷,因此只有在一條指令執(zhí)行后才會發(fā)出中斷 ,不可能在指令執(zhí)行期間發(fā)生異常。

  a.產(chǎn)生的原因:

  程序的錯誤產(chǎn)生的(eg:除數(shù)為0)

  內(nèi)核必須處理的異常條件產(chǎn)生的(eg:缺頁)

  b.異常又分為故障和陷阱,它們都不使用中斷控制器,也不能被屏蔽

  C.X86處理處理器中大約有20中異常。Linux內(nèi)核必須為每種異常提供一個專門的異常處理程序。

  2>中斷:也稱為異步中斷。因此它是由其他硬件設(shè)備依照 CPU 時鐘信號隨機產(chǎn)生,即意味著中斷能在指令之間發(fā)生。

  a.中斷又分為外部可屏蔽中斷(INTR)和外部非屏蔽中斷(NMI)

  所用I0設(shè)備產(chǎn)生的中斷請求均引起可屏蔽中斷

  硬件故障引起的故障則產(chǎn)生非屏蔽中斷。

  John說明:

  在CPU執(zhí)行一個異常處理程序時,就不再響應其他異常和中斷請求服務(wù).那么如果此時發(fā)生了一個異常,CPU不能去響應它,又不能把它的信息丟失該怎么辦呢?

  這是就用到了堆棧,把所有的信息壓入棧。等當前異常處理后,才從堆棧中取出信息再響應剛才的異常。(當產(chǎn)生多個非屏蔽中斷時,CPU的處理方法同上)

  二APIC和8259A

  中斷的實現(xiàn)也需要硬件上的支持的,那么硬件上是如何支持中斷的?

  1.在X86計算機的 CPU 為中斷只提供了兩條外接引腳:NMI 和 INTR。

  NMI 是不可屏蔽中斷,它通常用于電源掉電和物理存儲器奇偶校驗;

  INTR是可屏蔽中斷,可以通過設(shè)置中斷屏蔽位來進行中斷屏蔽,它主要用于接受外部硬件的中斷信號,這些信號由中斷控制器傳遞給 CPU。

  2.中斷控制器

  目前常見的中斷控制器有可編程中斷控制器8259A和高級可編程中斷控制器(APIC)

  1>8259A

  PIC(Programmable Interrupt Controller)是由兩片 8259A 的外部芯片以“級聯(lián)”的方式連接在一起。每個芯片可處理多達 8 個不同的 IRQ(中斷請求線)。因為從 PIC 的 INT 輸出線連接到主 PIC 的 IRQ2 引腳,所以可用 IRQ 線的個數(shù)達到 15 個。