2014-09-18 185 views
1

它好像在difference between a trap and an interrupt是明確的:一個陷阱是一個軟件調用的調用內核(例如,通過一個例外)和一箇中斷是恰當的硬件(磁盤,I/O和外圍設備,如鼠標和鍵盤......)(詳細瞭解the difference here)。使用Control + C陷阱或中斷進程的突然結束?

認識到這一點,在什麼類別應按Ctrl + C結束進程進行分類?這是一個軟件調用的調用,因此它是一個陷阱,因爲它可以從Shell執行等等,或者它是一箇中斷,因爲它是CPU從鍵盤接收的信號?或者中斷完全在用戶的域之外,這意味着它是硬件與CPU在用戶無法達到的級別交互?

謝謝!

+2

這是一箇中斷!!! – 2014-09-18 18:47:32

+0

@shekharsuman請不要惹人注意地接受你的回答,這很粗魯 – Gilles 2014-09-19 09:20:25

+0

@ Gilles-其實我接受了對SO的不接受答案!爲什麼!但是,你不認爲滿足OP的答案必須被他接受嗎?您可能已經通過操作系統Stack Exchange論壇瞭解了我的本質,在該論壇中,我請求考慮查看我接受的答案...... – 2014-09-19 13:45:54

回答

2

陷阱和中斷之間的差別並不像你在你的問題描述(爲參考感謝),但交出的事件的異步特性。陷阱意味着由於通常不正確的/內部操作(例如除以零或頁面錯誤,或者當您發出信號,軟件中斷)時代碼執行中的中斷,但它始終處於代碼中的同一位置(同步隨着代碼執行),並且由於外部硬件而發生中斷,當某些設備發出信號以中斷它正在做的事情時,因爲它已準備好發送一些數據。本質上,陷阱是同步的,中斷不是。

說此,無論是改變CPU的執行的正常過程中的異常事件。兩者都是產生硬件,但出於不同的原因:第一同步發生(你知道總是,在該指令,它就會產生,如果在所有生產)和第二不(你不知道提前當外部硬件斷言中斷線時,該指令將被執行)。另外,有兩種陷阱(取決於觸發它們的事件),一種將指令指針指向下一條指令(例如除零陷阱),另一個將它指向導致陷阱的相同指令(例如,頁面錯誤,一旦糾正陷阱的原因後必須重新執行)當然,軟件中斷自然,總是陷阱(陷阱總是改變執行過程),因爲它可以預測的程序流程中的確切點在哪裏CPU無線我會被打斷。

所以,用這個解釋,你也許可以回答你yourshelf問題,一個按Ctrl-C中斷是一個中斷因爲你不能提前predice時,將中斷CPU執行,你不能標誌着該點你的代碼。

請記住,異步中斷ocurr,不會陷阱。

2

在Linux系統上按下Ctrl+C用於終止信號爲SIGINT的進程,並且可以被程序攔截,以便在退出之前清除其自身,或者根本不會退出。

如果它是一個陷阱,它會立即死亡!

因此,它是一種軟件中斷!

+0

中斷總是可以被程序攔截,而陷阱不能?謝謝,謝克爾 – aralar 2014-09-19 19:26:44

+0

對不起,我還不清楚。請你介紹一下@ miguel5!你指的是哪個程序! – 2014-09-19 19:28:01

+0

我的意思是任何用戶級程序(不是內核等)!謝謝! – aralar 2014-09-21 05:13:19

3

首先是信號 - 按Control-C會導致內核向當前的前臺進程發送一個信號(類型爲SIGINT)。如果該進程沒有爲該信號設置處理程序(使用來自signal()系列的系統調用之一),則會導致該進程被終止。

的信號是,我想,「中斷」的信號,但這是無關的硬件中斷。這些僅在內核內部使用。

+0

其實它是一種軟件中斷!中斷也可以是軟件類型... – 2014-09-18 19:12:28

+0

對不起,但有**信號**,它們是unix中的陷阱...例如,一個SIGSEGV是一個陷阱,它在代碼中同步發生(總是嘗試創建一個無效的內存訪問)請參閱我對以下問題的回答(或以上,不知道)。 – 2014-09-22 06:25:16

0

Control-C不是一箇中斷...至少不在PC(現在是MAC)硬件上。換句話說,鍵盤控制器不會爲鍵組合「控制」和「C」生成特定的中斷。

鍵盤只使用一箇中斷矢量,這個中斷矢量是在一個按鍵和一個鍵上觸發的。鍵盤是一個非常慢的硬件設備。在按鍵重複率設置爲最快的情況下,按住一個鍵每秒鐘會產生33次中斷。

如果操作系統的設計者認爲control-C非常重要,那麼他們可能會包含測試「這是C鍵的關鍵」AND是「控制」鍵觸發了鍵盤中斷了幾十億機器週期然後,在仍然處理鍵盤中斷的同時,它們將使用軟件中斷指令產生陷阱

更好的操作系統會將鍵盤中斷的處理時間減少到最低限度,它們只會附加到循環緩衝區(環形緩衝區)的鍵碼包括按下/釋放的位並立即終止中斷。

操作系統wo然後,只要有時間,注意環形緩衝區指針的改變。它會觸發從環形緩衝區中提取關鍵代碼的代碼,驗證該代碼是否代表「ctrl-C」組合,並設置標記爲「ctrl-C」檢測到。

最後,當調度程序準備運行屬於當前進程的線程時,它檢查檢測到的標誌「ctrl-C」,如果是這種情況,調度程序將PC設置爲指向SIGINT例程恢復到前一個執行地址

無論詳細情況如何,「ctrl-C」不能是中斷,它可以是從鍵盤中斷調用的陷阱,也可以是調度器異步測試的同步對象