中斷

誰中斷誰?

外設中斷 CPU

爲什麼要中斷 CPU?

不中斷 CPU ,你(外設)怎麼讓人家(CPU)幫你幹活呀。

外設就像學生,CPU 就像老師;老師在課堂上講課,學生提問題之前得先舉手通知老師,不然學生們都隨意發言豈不亂成一鍋粥了。這裏的舉手動作就是中斷。中斷了老師正常的講課過程,轉而去處理這個學生的問題。處理完這個學生的問題後,老師會接着之前的課堂內容繼續講課,熟悉的聲音:好,我們接着講。

不中斷,採用輪詢的方式不行嗎?

可以,不過效率太低。假設有 1000 個外設,CPU 每一次都得從第一個輪詢到最後一個,查看哪個設備有任務。假設只有最後 1 個外設是有任務的,那麼前面 999 次輪詢都是浪費的,而且還耽誤了不少時間,影響了對最後這個外設的處理速度。想像一下,你在玩 CF,轉角處突然和敵方相遇,此刻你按下鼠標左鍵,想要射擊敵人;而此刻 CPU 正在以輪詢的方式輪詢其它設備,得等一會才能輪到鼠標,你的槍是開不了火的。而對手電腦的 CPU 採用的是中斷的方式,他一按下鼠標左鍵,產生一箇中斷,CPU 就能立刻處理這個鼠標事件進行射擊。結果就是對方把你打成篩子,你卻毫無還手之力。這樣的 CPU 輪詢方式,你還會用嗎?除非你想找個理由:不是我技術菜,是電腦不行😜。

如何進行中斷?

不像軟件那樣,語句和語句之間能夠進行交流,外設是硬件,和 CPU 語言不通,甚至不會講話(沒有軟件,純硬件)。那麼外設是怎麼中斷 CPU 的呢?答案是:用一根電線。當外設有任務時,他就通過這根電線,電 CPU 一下,CPU 被電了,它肯定疼啊,就能感覺到你需要幫助了,過來處理你的任務。這根電線的正式名稱是IRQ(Interrupt ReQuest)輸出線,當然 IRQ 線嚴格講不是直連 CPU 的,它直連可編程中斷控制器(Programmable Interrupt Controller, PIC),可編程中斷控制器再通過 INTR 引腳直連 CPU。

I/O 中斷處理

在這裏插入圖片描述