1. 程式人生 > >作業系統中的中斷和陷阱、以及程式語言中的異常區別

作業系統中的中斷和陷阱、以及程式語言中的異常區別

在閱讀作業系統概念聖經書導論部分中,學習到了中斷和陷阱,同時聯絡到高階語言中的異常處理,下面我們介紹他們的概念。

 

陷阱

計算機有兩種執行模式:使用者態, 核心態。 其中作業系統執行在核心態,在核心態中,作業系統具有對所有硬體的完全訪問許可權,可以使機器執行任何指令;相反,使用者程式執行在使用者態,在使用者態下,軟體只能使用少數指令,它們並不具備直接訪問硬體的許可權。這就出現了問題,假如軟體需要訪問硬體或者需要呼叫核心中的函式該怎麼辦呢,這就是陷阱的作用了。陷阱指令可以使執行流程從使用者態陷入核心(這也就是為什麼叫做陷阱,而不是捕獵的陷阱)並把控制權轉移給作業系統,使得使用者程式可以呼叫核心函式和使用硬體從而獲得作業系統所提供的服務,比如用視訊軟體放一個電影,視訊軟體就發出陷阱使用顯示器和音效卡從而訪問硬體。

作業系統有很多系統呼叫介面供用程式呼叫。陷阱的發生時間是固定的,比如第一次用視訊軟體時,在載入視訊時軟體會向作業系統傳送陷阱指令,第二次播放時,軟體仍然會在同樣的時刻傳送陷阱指令。這一點是和中斷的明顯的差別之一。下面介紹中斷。

中斷

中斷是由外部事件導致並且它發生的時間是不可預測的,這一點和陷阱不同。外部事件主要是指時鐘中斷,硬體中斷等。由於CPU一次只能執行一條指令,所以在一個時刻只能有一個程式執行,但我們感覺在我們的計算機中明明可以同時執行很多程式啊,這是由於CPU在多個程序之間快速切換所導致的偽並行。如果某一個程式運行了足夠長用完了分配給它的時間片,CPU決定切換到另一個程序執行,就會產生一個時鐘中斷,切換到下一個程序執行。

硬體中斷顧名思義就是由硬體引起的中斷,比如一個程式需要使用者輸入一個數據,但使用者一直沒有輸入,作業系統決定是一直等待使用者輸入還是轉而執行別的程序,一般情況是轉而執行別的程序,如果使用者的輸入到來了,那麼鍵盤驅動器會產生一箇中斷通知作業系統,作業系統儲存正在執行的程式的狀態,從而切換到原來的程序處理到來的資料。

所以中斷髮生是隨機的且主要作用是完成程序間切換,從而支援CPU和裝置之間的並行。
中斷和異常的另一個重要差別是,CPU處理中斷的過程中會遮蔽中斷,不接受新的中斷直到此次中斷處理結束。而陷阱的發生並不遮蔽中斷,可以接受新的中斷。

異常

異常就是程式執行過程中的異常行為。比如除零異常,緩衝區溢位異常等。不同的作業系統定義了不同種類和數量的異常並且每個異常都有一個唯一的異常號,異常會擾亂程式的正常執行流程,所以異常是在CPU執行指令時本身出現的問題,比如除數為零而出現的除零異常。異常的產生表示程式設計不合理,所以在程式設計的時候要儘量避免異常的產生。