1. 程式人生 > >硬中斷和軟中斷

硬中斷和軟中斷

中斷

中斷指當出現需要時,CPU暫時停止當前程式的執行轉而執行處理新情況的程式和執行過程。即在程式執行過程中,系統出現了一個必須由CPU立即處理的情況,此時,CPU暫時中止程式的執行轉而處理這個新的情況的過程就叫做中斷。

硬體中斷

  • 硬體中斷是一個非同步訊號, 表明需要注意, 或需要改變在執行一個同步事件.
  • 硬體中斷是由與系統相連的外設(比如網絡卡 硬碟 鍵盤等)自動產生的. 每個裝置或裝置集都有他自己的IRQ(中斷請求), 基於IRQ, CPU可以將相應的請求分發到相應的硬體驅動上(注: 硬體驅動通常是核心中的一個子程式, 而不是一個獨立的程序). 比如當網絡卡受到一個數據包的時候, 就會發出一箇中斷.
  • 處理中斷的驅動是需要執行在CPU上的, 因此, 當中斷產生時, CPU會暫時停止當前程式的程式轉而執行中斷請求. 一箇中斷只能中斷一顆CPU(也有一種特殊情況, 就是在大型主機上是有硬體通道的, 它可以在沒有主CPU的支援下, 同時處理多箇中斷).
  • 硬體中斷可以直接中斷CPU. 它會引起核心中相關程式碼被觸發. 對於那些需要花費時間去處理的程序, 中斷程式碼本身也可以被其他的硬體中斷中斷.
  • 對於時鐘中斷, 核心排程程式碼會將當前正在執行的程式碼掛起, 從而讓其他程式碼來執行. 它的存在時為了讓排程程式碼(或稱為排程器)可以排程多工.


軟中斷

  • 軟中斷的處理類似於硬中斷. 但是軟中斷僅僅由當前執行的程序產生.
  • 通常軟中斷是對一些I/O的請求.
  • 軟中斷僅與核心相聯絡, 而核心主要負責對需要執行的任何其他程序進行排程.
  • 軟中斷不會直接中斷CPU, 也只有當前正在執行的程式碼(或程序)才會產生軟中斷. 軟中斷是一種需要核心為正在執行的程序去做一些事情(通常為I/O)的請求.
  • 有一個特殊的軟中斷是Yield呼叫, 它的作用是請求核心排程器去檢視是否有一些其他的程序可以執行.

硬體中斷和軟中斷的區別

  • 硬體中斷是由外設引發的, 軟中斷是執行中斷指令產生的.
  • 硬體中斷的中斷號是由中斷控制器提供的, 軟中斷的中斷號由指令直接指出, 無需使用中斷控制器.
  • 硬體中斷是可遮蔽的, 軟中斷不可遮蔽.
  • 硬體中斷處理程式要確保它能快速地完成任務, 這樣程式執行時才不會等待較長時間, 稱為上半部.
  • 軟中斷處理硬中斷未完成的工作, 是一種推後執行的機制, 屬於下半部.


作者:dela_ 
原文:https://blog.csdn.net/dela_/article/details/52751388