Recent Comments

2008年2月14日 星期四

interrupt 中斷

中斷顧名思義就是中斷你目前正在執行的工作,轉而執行其他指定的工作。舉一個簡單的例子,假設你現在正在 IE 上瀏覽網頁,如果此時按下一個鍵盤的按鍵,這時候就會產生一個鍵盤的中斷,通知 Windows 現在已經有一個按鍵的動作產生了。



跟中斷相反的另一個動作就是輪詢 (Polling),Polling 是採取主動的方式,在程式的主迴圈或者定時去檢查是否有按鍵,有的話就執行相關的程式,否則就跳回主迴圈繼續執行。這兩者的差別是中斷是被動的,只有在事件發生的時候才會執行動作;而輪詢是主動的,不管有沒有動作發生,都要自行檢查。所以前者所耗費的系統資源較少,也是目前 Windows 作業系統所採用的方式。



至於中斷副程式就是當中斷產生時,所要執行的程式,例如前面所談到的鍵盤中斷,當系統得知有按鍵產生時,必須取得按鍵的 Scan Code,然後根據目前鍵盤的狀態 (如 Caps Lock、Num Lock、Shift、Ctrl、Alt) 等轉換為適當的 ASCII Code or Control Code,然後再將這些 Code 放到 Buffer 裡面,由其他 AP 取得這些按鍵值執行相關的動作。



而中斷向量就是用來記錄那一個中斷要執行那一個中斷副程式的。電腦裡面的中斷可分為硬體中斷與軟體中斷,前者有 Keyboard、Timer、DMA 等等,而後者有 BIOS、DOS Function Call 等等,每一個中斷都有一個中斷向量指向中斷的副程式,就是所謂的中斷向量表。簡單的說就是一個查詢表而己,讓系統查詢甚麼中斷該執行那一個中斷副程式而己

0 意見: