中斷中需要面對的問題 一

2022-05-02 13:03:08 字數 1848 閱讀 9661

中斷中有些問題需要面對。

1、異常是什麼概念?

在處理器執行到由於程式設計失誤而導致的錯誤指令(例如除數是0)的時候,或者在執行期間出現特殊情況(例如缺頁),需要靠作業系統來處理的時候,處理器就會產生乙個異常。對大部分處理器體系結構來說,處理異常和處理中斷的方式基本是相同的,x86架構的cpu也是如此。異常與中斷還是有些區別,異常的產生必須考慮與處理器時鐘的同步。實際上,異常往往被稱為同步中斷。

2、中斷向量是什麼?

中斷向量代表的是中斷源——從某種程度上講,可以看作是中斷或異常的型別。中斷和異常的種類很多,比如說被0除是一種異常,缺頁又是一種異常,網絡卡會產生中斷,音效卡也會產生中斷,cpu如何區分它們呢?中斷向量的概念就是由此引出的,其實它就是乙個被送通往cpu資料線的乙個整數。cpu給每個irq分配了乙個型別號,通過這個整數cpu來識別不同型別的中斷。這裡可能很多朋友會尋問為什麼還要弄個中斷向量這麼麻煩的東東?為什麼不直接用irq0~irq15就完了?比如就讓irq0為0,irq1為1……,這不是要簡單得多麼?

其實這裡體現了模組化設計規則,及節約規則。

首先我們先談談節約規則,所謂節約規則就是所使用的訊號線數越少越好,這樣如果每個irq都獨立使用一根資料線,如irq0用0號線,irq1用1號線……這樣,16個irq就會用16根線,這顯然是一種浪費。那麼也許馬上就有朋友會說:那麼只用4根線不就行了嗎?(2^4=16)。

這個問題,體現了模組設計規則。我們在前面就說過中斷有很多類,可能是外部硬體觸發,也可能是由軟體觸發,然而對於cpu來說中斷就是中斷,只有一種,cpu不用管它到底是由外部硬體觸發的還是由執行的軟體本身觸發的,因為對於cpu來說,中斷處理的過程都是一樣的:中斷現行程式,轉到中斷服務程式處執行,回到被中斷的程式繼續執行。cpu總共可以處理256種中斷,而並不知道,也不應當讓cpu知道這是硬體來的中斷還是軟體來的中斷,這樣,就可以使cpu的設計獨立於中斷控制器的設計,這樣cpu所需完成的工作就很單純了。

cpu對於其它的模組只提供了一種介面,這就是256個中斷處理向量,也稱為中斷號。由這些中斷控制器自行去使用這256個中斷號中的乙個與cpu進行互動,比如,硬體中斷可以使用前128個號,軟體中斷使用後128個號,也可以軟體中斷使用前128個號,硬體中斷使用後128個號,這與cpu完全無關了,當你需要處理的時候,只需告訴cpu你用的是哪個中斷號就行,而不需告訴cpu你是來自哪兒的中斷。這樣也方便了以後的擴充,比如現在機器裡又加了一片8259晶元,那麼這個晶元就可以使用空閒的中斷號,看哪乙個空閒就使用哪乙個,而不是必須要使用第0號,或第1號中斷號了。其實這相當於一種對映機制,把irq訊號對映到不同的中斷號上,irq的排列或說編號是固定的,但通過改變對映機制,就可以讓irq對映到不同的中斷號,也可以說呼叫不同的中斷服務程式。

3、什麼是中斷服務程式?

在響應乙個特定中斷的時候,核心會執行乙個函式,該函式叫做中斷處理程式(interrupt handler)或中斷服務程式(interrupt service routine(isr))。產生中斷的每個裝置都有相應的中斷處理程式。例如,由乙個函式專門處理來自系統時鐘的中斷,而另外乙個函式專門處理由鍵盤產生的中斷。

一般來說,中斷服務程式要負責與硬體進行互動,告訴該裝置中斷已被接收。此外,還需要完成其他相關工作。比如說網路裝置的中斷服務程式除了要對硬體應答,還要把來自硬體的網路資料報拷貝到記憶體,對其進行處理後再交給合適的協議棧或應用程式。每個中斷服務程式根據其要完成的任務,複雜程度各不相同。

一般來說,乙個裝置的中斷服務程式是它的裝置驅動程式(device driver)的一部分——裝置驅動程式是用於對裝置進行管理的核心**。

Groupon需要面對的三個問題

鼻祖能在競爭激烈的市場中存活嗎?groupon雖然是 的鼻祖,但是他們的優勢並沒有保持很久。現在除了亞馬遜和google這兩家網際網路參與這個 領域外,還有很多私營企業和其他行業公司也在做類似的事。隨著市場參與者越來越多,利潤下降是必然的趨勢。雖然純收入有所增長,但是groupon的毛利率並沒有多大...

中斷中的資料共享問題

如果中斷處理程式和乙個函式共享資料,直接在該函式中關中斷和開中斷並不是最好的方法.int a,b,c void interrupt update void 中斷處理程式 void get abc value void 如果函式get abc value 在別的臨界區中被呼叫,void other f...

中斷筆記 一些常見的中斷問題

中斷簡述 所謂中斷就是指cpu在正常執行程式的時候,由於內部 外部事件的出發 或由程式預先設定而引起cpu暫時中止當前正在執行的程式,儲存被執行程式相關資訊到棧中,轉而去執行為內部 外部事件 或由程式預先設定的事件的中斷服務子程式,待執行完中斷服務子程式後,cpu再獲取被儲存在棧中被中斷的程式的資訊...