Cpu
什麼是軟體和硬體中斷,它們是如何處理的?
我不確定我是否理解硬體和軟體中斷的概念。
如果我理解正確,硬體中斷的目的是引起 CPU 的注意,這是實現 CPU 多任務處理的一部分。
- 那麼硬體中斷是什麼問題呢?是硬體驅動程序嗎?
- 如果是,硬體驅動程序在哪裡執行?如果它在 CPU 上執行,那麼它就不必通過硬體中斷來引起 CPU 的注意,對吧?那麼它在其他地方執行嗎?
- 硬體中斷是直接中斷CPU,還是先聯繫核心程序,然後核心程序再聯繫/中斷CPU?
另一方面,我認為軟體中斷的目的是讓目前在 CPU 上執行的程序請求一些資源。
- 有哪些資源?它們都是執行程序的形式嗎?例如,CPU驅動程序和記憶體驅動程序代表CPU和記憶體資源嗎?I/O 設備的驅動程序是否代表 I/O 資源?該程序希望與其他正在執行的程序通信的資源是否也是資源?
- 如果是,軟體中斷是否通過核心程序間接聯繫程序(代表資源)?與硬體中斷不同,軟體中斷從不直接中斷CPU,而是中斷/聯繫核心程序,對嗎?
硬體中斷實際上並不是 CPU 多任務處理的一部分,但可能會驅動它。
- 硬體中斷由磁碟、網卡、鍵盤、時鐘等硬體設備發出。每個設備或一組設備都有自己的 IRQ(中斷請求)線。CPU 將根據 IRQ 將請求分派給適當的硬體驅動程序。(硬體驅動程序通常是核心中的子程序,而不是一個單獨的程序。)
- 處理中斷的驅動程序在 CPU 上執行。CPU 被中斷處理中斷的工作,因此不需要任何額外的東西來引起 CPU 的注意。在多處理器系統中,中斷通常只會中斷其中一個 CPU。(作為特殊情況,大型機有硬體通道,可以在沒有主 CPU 支持的情況下處理多個中斷。)
- 硬體中斷直接中斷 CPU。這將導致核心程序中的相關程式碼被觸發。對於需要一些時間來處理的程序,中斷程式碼可能允許自己被其他硬體中斷打斷。
在定時器中斷的情況下,核心調度程式碼可能會暫停正在執行的程序並允許另一個程序執行。調度程式碼的存在啟用了多任務處理。
軟體中斷的處理很像硬體中斷。但是,它們只能由目前正在執行的程序生成。
- 通常,軟體中斷是對 I/O(輸入或輸出)的請求。這些將呼叫將安排 I/O 發生的核心常式。對於某些設備,I/O 會立即完成,但磁碟 I/O 通常會排隊等待稍後完成。根據正在執行的 I/O,程序可能會暫停,直到 I/O 完成,從而導致核心調度程序選擇另一個程序來執行。I/O 可能發生在程序之間,並且處理通常以與磁碟 I/O 相同的方式進行調度。
- 軟體中斷只與核心對話。核心負責調度需要執行的任何其他程序。這可能是管道末端的另一個過程。某些核心允許設備驅動程序的某些部分存在於使用者空間中,並且核心會在需要時安排此程序執行。
軟體中斷不會直接中斷 CPU 是正確的。只有目前正在執行的程式碼才能產生軟體中斷。中斷是核心對正在執行的程序執行某些操作(通常是 I/O)的請求。一個特殊的軟體中斷是 Yield 呼叫,它請求核心調度程序檢查是否有其他程序可以執行。
回複評論:
- 對於 I/O 請求,核心將工作委託給適當的核心驅動程序。該常式可以將 I/O 排隊以供以後處理(通常用於磁碟 I/O),或者如果可能立即執行它。隊列由驅動程序處理,通常在響應硬體中斷時。當一個 I/O 完成時,隊列中的下一個項目被發送到設備。
- 是的,軟體中斷避免了硬體信號步驟。生成軟體請求的程序必須是目前正在執行的程序,因此它們不會中斷 CPU。但是,它們確實會中斷呼叫程式碼的流程。
如果硬體需要讓 CPU 做某事,它會導致 CPU 中斷對正在執行的程式碼的關注。CPU 會將其目前狀態推送到堆棧上,以便稍後可以返回到它正在執行的操作。中斷可以停止:正在執行的程序;處理另一個中斷的核心程式碼;或空閒程序。