中斷簡述:所謂中斷就是指cpu在正常執行程式的時候,由於內部/外部事件的出發、或由程式預先設定而引起cpu暫時中止當前正在執行的程式,儲存被執行程式相關資訊到棧中,轉而去執行為內部/外部事件、或由程式預先設定的事件的中斷服務子程式,待執行完中斷服務子程式後,cpu再獲取被儲存在棧中被中斷的程式的資訊,繼續執行被中斷的程式,這一過程叫做中斷。
cpu在執行指令時,通過**暫存器cs和指令指標暫存器ip(instruction pointer)
cs的全拼為「code segment」,即**段暫存器,對應於記憶體中的存放**的記憶體區域,
用來存放記憶體**段區域的入口位址(段基址)。
的指令。 每次cpu執行完相應的彙編指令之後,eip暫存器的值就會增加。
eflags暫存器 : 32位暫存器,包含一組狀態、系統標誌及控制標誌。
每個標誌由暫存器裡一位表示。
中斷和異常的概念區別
共同點:
intel的官方文件裡將中斷和異常理解為兩種中斷當前程式執行的不同機制。
不同點:
中斷(interrupt)是非同步的事件,典型的比如由i/o裝置觸發;
異常(exception)是同步的事件,典型的比如處理器執行某條指令時發現出錯了等等。
中斷又可以分為可遮蔽中斷和非可遮蔽中斷,
異常又分為故障、陷阱和異常中止3種;
中斷處理過程:
請求中斷→響應中斷→關閉中斷→保留斷點→中斷源識別→保護現場→中斷服務子程式→恢復現場→中斷返回。
(1)某一中斷源向cpu發起中斷請求,對於外部中斷,cpu在當前指令最後乙個時鐘週期查詢中斷
請求訊號的有效性,在系統開中斷的情況下,cpu向中斷源回送中斷應答訊號,系統進入中斷響應
週期。(cpu對系統內部中斷源提出的中斷請求必須響應,而且自動取得中斷服務子程式的入口地
址,執行中斷服務子程式);
(2)cpu響應中斷後,將狀態標誌暫存器壓入堆疊保護;
(3)再將其中的中斷標誌位清除從而關閉中斷;
(5)cpu確定提出請求的中斷源,獲得中斷向量號,在對應的中斷向量表獲得中斷入口位址,
裝入cs和ip中;
(6)保護當前程式的現場
cpu開始利用棧保護被暫停執行的程式的現場:依次壓入當前程式使用的eflags,cs,
eip,errorcode(如果是有錯誤碼的異常)資訊。
(7)中斷服務程式處理完畢,恢復執行先前中斷的程式
在每個中斷服務程式的最後,必須有中斷完成返回先前程式的指令,這就是iret(或iretd)。
程式執行這條返回指令時,會從棧裡彈出先前儲存的被暫停程式的現場資訊,即eflags,cs,eip重新開始執行
(8)中斷服務程式處理完畢,恢復執行先前中斷的程式
在每個中斷服務程式的最後,必須有中斷完成返回先前程式的指令,這就是iret(或iretd)。
程式執行這條返回指令時,會從棧裡彈出先前儲存的被暫停程式的現場資訊,即eflags,cs,eip重新開始執行
中斷源可分為外部中斷源和內部中斷源兩大類。
(1)外部中斷源是指由cpu的外部事件引發的中斷。主要包括:
①一般中、慢速外設,如鍵盤、印表機、滑鼠等;
②資料通道,如磁碟、資料採集裝置、網路等;
③實時時鐘,如定時器定時已到,發中斷申請;
④故障源,如電源掉電、外設故障、儲存器讀出出錯以及越限報警等事件。
(2)內部中斷源是指由cpu的內部事件(異常)引發的中斷,主要包括:
①由cpu執行中斷指令intn引起的中斷;
②由cpu的某些運算錯誤引起的中斷,如除數為0或商數超過了暫存器所能表達的範圍、溢位等;
③為除錯程式設定的中斷,如單步中斷、斷點中斷;
④由特殊操作引起的異常,如儲存器越限、缺頁等。
3、中斷發生的時候暫停當前任務的時候採用的是哪一種處理方式----保護現場,保護現場涉及到哪些資料和內容
主程式和中斷服務子程式都要使用cpu內部暫存器等資源,
為使中斷處理程式不破壞主程式中暫存器的內容,
應先將斷點處各暫存器的內容壓入堆疊保護起來,再進入的中斷處理。
4、中斷的分類有哪些
從不同的角度來說,中斷可以有三種分類方法。
①中斷可以分為同步中斷(synchronous)和非同步中斷(asynchronous)。
**同步中斷** 是在指令執行時由cpu主動產生的,受到cpu控制,其執行點是可控的。
**非同步中斷** 是cpu被動接收到的,由外設發出的電訊號引起,其發生時間不可**。
②中斷可分為硬中斷和軟中斷。
硬中斷 :硬中斷可以中斷軟中斷。
硬中斷由硬體產生。每個裝置或者裝置集都有自己的irq(中斷請求)。硬中斷可以直接中斷cpu。
軟中斷 :軟中斷不會直接中斷cpu。
③中斷可分為可遮蔽中斷(maskableinterrupt)和非遮蔽中斷(nomaskableinterrupt)。
5、恢復現場所涉及的操作有哪些
異常和中斷
保留現場:
通過push指令將暫存器中的值都壓入到棧中
恢復現場:
通過pop指令將棧中的值賦值給暫存器中
程序間切換
保留現場:
通過建立並初始化乙個結構體(structpt_regs該結構體中的屬性,
就是用來儲存各個暫存器中的資料的),將該結構體中的所有資料直接memcpy到棧中,
提高了效率
恢復現場:
通過pop指令將棧中的資料重新還原到各個暫存器中
arduino中斷和一些問題
上次做的arduino小專案在測試過程中發現了一些小問題,至此又引出了一系列問題。大概是這樣的,之前檢測煙霧感測器使用電位器分壓替代的,今天找到了打火機和小木棍就點火實測了一把 好久沒玩火了 測試過程中發現這個mq135感測器並不是很靈敏,把火苗放在下面感測器測試值公升高的很有限 50公升到100的...
關於中斷的一些整理
中斷裝置和中斷處理程式統稱為中斷系統。中斷系統是計算機的重要組成部分。實時控制 故障自動處理 計算機與外圍裝置間的資料傳送往往採用中斷系統。中斷系統的應用大大提高了計算機效率。不同的計算機其硬體結構和軟體指令是不完全相同的,因此,中斷系統也是不相同的。計算機的中斷系統能夠加強cpu對多工事件的處理能...
關於Linux中斷一些思考
目錄前言 關於中斷歷史與發展 linux中斷設計 linux中斷下半部實現 軟中斷 tasklet 工作佇列 關於可重入和不可重入函式 在我們學習中斷的時候,先要了解幾個概念。何為中斷?為什麼要使用中斷?中斷如何運作?弄明白這些再去使用中斷會顯得得心應手。何為中斷?cpu在執行的過程中,由於外部因素...