回覆列表
  • 1 # 使用者9769182718554

    不是外界事件首先引發了中斷跳轉,跳轉時順便置上中斷標誌,而是外界事件導致置上了中斷標誌,然後中斷標誌再進一步引發了跳轉。標誌置上了並不等於立即就會引發跳轉。標誌本身只是用來看的,就是說,得等CPU看到這個標誌,才能真正引發跳轉。觸發中斷的,實質上既不是外部裝置,也不是標誌,而是CPU自己。CPU只在每個指令週期的開頭瞅一眼中斷標誌,有,則進入處理過程,沒有,則繼續做它自己的事。如果不巧,標誌置晚了,CPU已經瞅完了,那就只能等下一輪指令週期。所謂的遮蔽中斷,就是人為在中斷標誌前面掛個幕布,不許瞅。只是不許瞅而已,但沒有不許立標誌,外部裝置儘可以來立標誌,只是立得再久也沒人處理而已,直到幕布被摘下。當CPU瞅到了一個標誌、並進入其處理過程之時,還會自己給自己戴個眼罩,此時哪怕還有別的標誌,也瞅不見了,所以此時別的中斷髮生,也得不到處理。當CPU處理完了這個中斷,會自己把眼罩摘掉,於是又能愉快的瞅標誌了。如果有別的標誌正巧豎在那,那就處理吧。顯而易見,當CPU放眼一瞅的時候,瞅到不止一箇中斷標誌是完全可能的,而它一次只能選一個來處理。一般來說肯定挑出其中最有價值的一個,剩下的先放著,等下回瞅。這就是傳說中的中斷優先順序。再刨根問底一點,當CPU已經開始處理一箇中斷的時候,這標誌會怎樣?——根據中斷的具體型別不同,這標誌可能被CPU自動清除掉,也可能不會,而要等使用者程式來手動清除。如果使用者犯2了沒清除標誌怎麼辦?那麼下次CPU放眼瞅的時候,這個標誌還在!會不會再被處理一遍?——會的,而且不止一遍,只要你不清,它就根本停不下來。為什麼系統要這麼設計,給使用者以犯2的機會?——有一種情況是,向量表不夠裝,多箇中斷共用一個向量,那麼進入處理程式時,要有手段來區分到底是發生了哪個中斷。所以標誌要活到那個時候來給使用者檢查。然後我們終於面對了這個問題:如果一個標誌還沒被處理呢,就有人要來豎一個同樣的標誌(重點是:同樣的),會怎樣?——沒錯,前一個會丟失。豎標誌的場地只有一個,只能記錄標誌有沒有,不能記錄標誌有幾個。——這不是很可怕?——別急,先來仔細分析下:很多中斷,屬於不作不死型:即,只有發起相應操作,才能收到相應結果的中斷。不種瓜不可能得瓜。——對於這種,只要在收到前一個操作的結果中斷之前不發起後一個操作(且不管機能上能不能做得到),就不會面臨中斷丟失的情況。還有一些中斷,來幾個意義都不變。比如我媽喊我吃飯,沒等我去,我爸又來喊我一遍,最後我妹又來喊我一遍。無論如何,我最終都是去吃這一頓飯而已,不會吃三頓。這種中斷自然也不怕丟失。若非以上情況,就沒辦法了,只能儘快處理,不要浪費太多時間在眼罩階段,而耽誤了瞅標誌。然而……世事不盡如人意,如果長時間戴眼罩不可避免,又必須及時處理另一箇中斷,怎麼辦?有的系統具備一種功能,能讓某些中斷標誌發出動感光波,射穿眼罩直達狗眼。媽媽再也不怕我瞅不著標誌了,哪怕正在處理一箇中斷,也立即給你扔下,跑去處理另一個更NB的中斷。這就是中斷巢狀。自然不能所有中斷標誌都能發出動感光波,那世界就亂了。這種特權要嚴密控制,只能交給少量真正高大上的中斷源。而當CPU進入這種中斷的處理程式的時候,給自己戴的也不是一般的眼罩了,而是超強合金眼罩,連光波都能抵擋的,這保證了多個光波中斷源之間也不會搶來搶去而亂了規矩。不過當然規矩也是人定的,沒準某個系統裡就需要有更更更高階的中斷源,需要更更更強的光波,連合金眼罩也能射穿,同時自己還得具備更更更強的氪金眼罩……OK這是可行的,根據中斷源不同,光波也好眼罩也好都存在多個級別,這叫做中斷的巢狀優先順序。而前面說的優先順序則叫做中斷的響應優先順序。響應優先順序和巢狀優先順序是兩個不同的概念,但有時被搞混。理論上,響應優先順序再高也沒法讓你能打斷別人的中斷處理過程,巢狀優先順序再高也沒法讓你比人優先被瞅到(當然先瞅到別人再被你打斷另說)。當然,系統的關鍵中斷往往兩種優先順序都很高。另外,多箇中斷的響應優先順序一般沒有同級的,因為事到臨頭總是要分個高下的。而巢狀優先順序則可以同級,而同級一般是不能互相打斷的。說回來,以上描述的參照的是答主自己熟悉的平臺,別的平臺可能有細微差別,但精神都是類似的。

  • 中秋節和大豐收的關聯?
  • 紅燈時是停車擋省油還是空擋省油?