中断与异常
文章目錄
- 1.什么是中斷?
- 2.非可屏蔽中斷如何處理
- 3.可屏蔽中斷:
- 4.時鐘中斷
- 5.可屏蔽中斷如何處理
- 6.異常
- 7.異常處理
- 8.缺頁異常
1.什么是中斷?
1.中斷通常是由CPU外部的輸入輸出設備(硬件)所觸發的,供外部設備通知CPU“有事情需要處理”,因此又叫中斷請求
2.中斷請求的目的是希望CPU暫時停止執行當前正在執行的程序,轉區執行中斷請求所對應的中斷處理例程(中斷處理程序在哪由IDT表決定)
3.80X86有兩條中斷請求線:
非可屏蔽中斷線,稱為NMI(NonMaskable Interrupt)
可屏蔽中斷線,稱為INTR(Interrupt Require)
詳細解釋:
2.非可屏蔽中斷如何處理
| 0x2 | 不可屏蔽中斷 | 80X86中固定為0x2 |
特別說明:
當非可屏蔽中斷產生時,CPU在執行完當前指令后會立刻進入中斷處理程序
非可屏蔽中斷不受EFLAG寄存器中的IF位的影響,一旦發生,CPU必須處理
非可屏蔽中斷處理程序位于IDT表中的2號位置
3.可屏蔽中斷:
在硬件級,可屏蔽中斷是由一塊專門的芯片來管理的,通常稱為中斷控制器,它負責分配中斷資源和管理各個中斷源發出的中斷請求,為了便于標識各個中斷請求,中斷管理器通常IRQ(Interrupt Request)后面加上數字來表示不同的中斷
比如:在Windows中,時鐘中斷的IRQ編號為0,也就是:IRQ0
4.時鐘中斷
補充:
大多數操作系統系統時鐘中斷在10-100MS之間,Windows系列為10-20MS.
舉例:
時鐘中斷每個10~20MS會向CPU發送一個請求,然后操作系統會接管CPU,CPU就會執行操作系統為它指定的一段代碼,操作系統在這個代碼里面就有機會進行線程的切換
操作系統并不是通過時鐘中斷來進行線程切換,有了時鐘中斷只能說明操作系統有機會進行線程切換(并不是說 時鐘中斷就是線程切換)
5.可屏蔽中斷如何處理
| 0x30 | IRQ0 | 時鐘中斷 |
| 0x31-0x3F | IRQ1-IRQ15 | 其它硬件設備的中斷 |
特別說明:
1.如果自己的程序執行時不希望CPU去處理這些中斷,
可以用CLI指令情況EFLAG寄存器中的IF位
用STI指令設置EFLAG寄存器中的IF位
2.硬件中斷與IDT表中的對應關系并非固定不變的,
參見:APIC(高級可編程中斷控制器)
6.異常
異常通常是CPU在執行指令時檢測到的某些錯誤,比如除0,訪問無效頁面等,
中斷與異常的區別:
1.中斷來自于外部設備,是中斷源(比如鍵盤)發起的,CPU是被動的
2.異常來自于CPU本身,是CPU主動產生的
3.INT N雖然被稱為“軟件中斷”,但其本質是異常。EFLAG的IF位(只對可屏蔽中斷 起作用)對INT N無效
7.異常處理
無論是有硬件設備觸發的中斷請求還是由CPU產生的異常,處理程序都在IDT表
(當我們想訪問某個地址,但是地址上面的頁是無效的,如果CPU一旦發現了這個問題,那么它就會觸發異常,發現錯誤,不會往下繼續執行,然后去執行異常處理程序)
常見的異常處理程序:
| 頁錯誤 | 0xE |
| 段錯誤 | 0xD |
| 除零錯誤 | 0x0 |
| 雙重錯誤 | 0x8 |
如果在執行錯誤處理程序時,又發生錯誤的話,那么就會執行雙重錯誤異常處理程序。
8.缺頁異常
缺頁異常的產生:
一旦發生缺頁異常,CPU會執行IDT表中的0xE號中斷處理程序,由操作系統來接管
操作系統如果打算把有效物理頁放到文件中時,會把P位置0,當你再次訪問這個線性地址時,發現P位為0,馬上跳入異常處理程序也就是0xE號指定的異常處理程序,然后操作系統就會檢查PTE,如果發現為上圖中的左邊這種格式,那就說明你當前的物理頁被存儲到頁面文件中了,通過PTE近一步尋找再掛回物理頁
總結
- 上一篇: 图片轮播器,relativelayout
- 下一篇: 控制寄存器,CPU缓存,PWT,PCD