1. 程式人生 > >程式中斷和呼叫子程式有何區別

程式中斷和呼叫子程式有何區別

兩者的根本區別表現在服務時間和服務物件上不一樣。

1)呼叫子程式發生的時間是已知的和固定的,即在主程式的呼叫指令(CALL)執行時發生主程式呼叫子程式過程,呼叫指令所在位置是已知的和固定的;而中斷過程發生的時間一般是隨機的,CPU在執行某一主程式時受到中斷源提出的中斷申請,就發生中斷過程,而中斷申請一般由硬體電路產生,申請時間是隨機的。也可以說,呼叫子程式是程式設計者事先安排好的,而執行中斷服務程式是由系統工作環境隨機決定的。

2)子程式完全為主程式服務,兩者屬於主從關係。主程式需要子程式時就去呼叫子程式,並把呼叫結果帶回主程式繼續執行。而中斷服務程式與主程式二者一般是無關的,兩者是平行關係。

3)主程式呼叫子程式的過程完全屬於軟體處理過程,不需要專門的硬體電路,而中斷處理系統是一個軟、硬體結合的系統,需要專門的硬體電路才能完成中斷處理的過程。

4)子程式巢狀可以實現若干級,巢狀的最多級數受計算機記憶體開闢的堆疊大小限制;而中斷巢狀級數主要由中斷優先順序來決定,一般優先順序不會很大。

從巨集觀上看,雖然程式中斷方式克服了程式查詢方式中CPU"踏步"現象,實現了CPU與IO並行工作,提高了CPU的資源利用率,但從微觀操作分析,CPU在處理中斷程式時,仍需暫停原程式的正常執行,尤其是當高速I/O裝置或輔助儲存器頻繁地、成批地與主存交換資訊時,需不斷打斷CPU執行現行程式,而執行中斷服務程式。