有人可以請我解釋一下中斷服務程序中發生了什麼(雖然它取決於具體的例程,一般的解釋就足夠了)?這對我來說一直是個黑盒子。中斷服務程序會發生什麼?
回答
interrupt handlers上有很好的維基百科頁面。
「中斷處理程序,也稱爲一箇中斷服務例程(ISR),是在一個操作系統或它們的執行是通過一箇中斷的接收觸發的設備驅動程序的回調子例程。中斷處理程序具有的多個函數,這些函數根據中斷產生的原因以及中斷處理程序完成其任務的速度而有所不同。「
基本上,當一塊硬件(一個硬件中斷)或某個OS任務(軟件中斷)需要運行時,它會觸發一箇中斷。如果這些中斷沒有被屏蔽(忽略),操作系統將停止它正在執行的操作,並調用一些特殊的代碼來處理這個新事件。
一個很好的例子是從硬盤讀取數據。驅動器速度很慢,您不希望操作系統等待數據恢復;你希望操作系統去做其他事情。因此,您設置了系統,以便在磁盤有請求的數據時引發中斷。在磁盤的中斷服務程序中,CPU將獲取現在已準備好的數據並將其返回給請求者。
ISR經常需要快速發生,因爲硬件可能有一個有限的緩衝區,如果它現在已經足夠快地被關閉,它將被新數據覆蓋。 當CPU正在服務一個ISR時,讓ISR快速完成也很重要,否則其他中斷將被屏蔽,這意味着如果CPU無法快速到達它們,則可能會丟失足夠的數據。
要理解的最好方法是自己做一些簡單的例子。
最小的16位例如
首先學習如何創建一個最小的bootloader OS和QEMU和實際的硬件上運行它,因爲我在這裏解釋:https://stackoverflow.com/a/32483545/895245
現在,你可以在16運行位實模式:
movw $handler0, 0x00
mov %cs, 0x02
movw $handler1, 0x04
mov %cs, 0x06
int $0
int $1
hlt
handler0:
/* Do 0. */
iret
handler1:
/* Do 1. */
iret
這會怎麼做才能:
Do 0.
Do 1.
hlt
:停止執行
注意處理器如何查找第一個處理程序的地址0
,並且在4
第二個:那就是處理程序表叫IVT,每個條目有4個字節。
Minimal example that does some IO使處理程序可見。
保護模式
現代操作系統在所謂的保護模式下運行。
在這種模式下處理有更多的選擇,所以它更復雜,但精神是一樣的。
參見
- 1. 先發中斷處理程序會發生什麼?
- 2. 中斷HTTP流時會發生什麼?
- 3. 如果HttpClient.execute()中斷會發生什麼?
- 4. 當電話中斷應用程序時,android應用程序會發生什麼?
- 5. 發生中斷時,x86架構中會發生什麼?
- 6. 服務被銷燬後,遠程進程託管服務會發生什麼?
- 7. 如果中斷處理程序開始旋轉會發生什麼?
- 8. 中斷服務程序8086
- 9. 當程序運行時發生事件時會發生什麼
- 10. 當我在域服務中寫Me.objectcontext時會發生什麼?
- 11. 什麼都不能在中斷服務程序?
- 12. System.Data.SqlClient.SqlTransaction.Dispose中會發生什麼?
- 13. 當線程T1加入線程T2和T2時會發生什麼事情會發生中斷
- 14. 會發生什麼?
- 15. 會發生什麼?
- 16. 會發生什麼?
- 17. 會發生什麼?
- 18. 會發生什麼?
- 19. 會發生什麼?
- 20. 如果程序沒有大括號,程序會發生什麼?
- 21. 編程stm32f10x:鏈接寄存器在進入中斷服務程序時會得到什麼值?爲什麼?
- 22. 取消任務時會發生什麼?
- 23. 爲什麼「java.rmi.ServerException:RemoteException發生在服務器線程中」顯示?
- 24. 。服務器上發生了什麼?
- 25. 請求來到Tomcat服務器時會發生什麼?
- 26. 如果Web服務更改參數會發生什麼情況?
- 27. 如果服務多次啓動會發生什麼?
- 28. 爲什麼會發生500內部服務器錯誤?
- 29. meteor當服務器丟失時會發生什麼
- 30. 如果UDP服務器宕機,會發生什麼