版權歸原作者所有,如有侵權,請聯(lián)系我們

[科普中國]-非法指令陷阱

科學百科
原創(chuàng)
科學百科為用戶提供權威科普內容,打造知識科普陣地
收藏

簡介

在計算機中,中斷是指CPU對系統(tǒng)發(fā)生某事件時的這樣一種響應: CPU 暫停正在執(zhí)行的程序,在保留現(xiàn)場后自動地轉去執(zhí)行該事件的中斷處理程序;執(zhí)行完后,再返回到原程序的斷點處繼續(xù)執(zhí)行。內中斷則是指由于CPU 內部事件所引起的中斷,如程序出錯(非法指令、地址越界)、電源故障等。1內中斷(trap)也被譯為“捕獲”或“陷入,非法指令屬于內部中斷,非法指令陷阱通常是因為可執(zhí)行文件本身出現(xiàn)錯誤, 或者試圖執(zhí)行數(shù)據(jù)段和無效操作碼,堆棧溢出時也有可能產(chǎn)生這個信號。

中斷與陷阱根據(jù)系統(tǒng)對中斷處理的需要,操作系統(tǒng)一般對中斷進行分類并對不同的中斷賦予不同的處理優(yōu)先級,以便在不同的中斷同時發(fā)生時,按輕重緩急進行處理。

根據(jù)中斷源產(chǎn)生的條件,可把中斷分為外中斷和內中斷。外中斷是指來自處理器和內存外部的中斷,包括I/0設備發(fā)出的I/O中斷、外部信號中斷(例如用戶鍵人ESC鍵)。各種定時器引起的時鐘中斷以及調試程序中設置的斷點等引起的調試中斷等。外中斷在狹義上一般被稱為中斷。

內中斷主要指在處理器和內存內部產(chǎn)生的中斷。內中斷一般稱為陷阱(trap)或異常。它包括程序運算引起的各種錯誤,如地址非法、校驗錯、頁面失效、存取訪問控制錯、算術操作溢出、數(shù)據(jù)格式非法、除數(shù)為零、非法指令、用戶程序執(zhí)行特權指令、分時系統(tǒng)中的時間片中斷以及從用戶態(tài)到核心態(tài)的切換等都是陷阱的例子。

為了按中斷源的輕重緩急處理響應中斷,操作系統(tǒng)為不同的中斷賦予不同的優(yōu)先級。例如在UNIX系統(tǒng)中,外中斷和陷阱的優(yōu)先級共分為8級。為了禁止中斷或屏蔽中斷,CPU的處理器狀態(tài)字PSW中也設有相應的優(yōu)先級。如果中斷源的優(yōu)先級高于PSW的優(yōu)先級,則CPU響應該中斷源的請求;反之,CPU屏蔽該中斷源的中斷請求。

各中斷源的優(yōu)先級在系統(tǒng)設計時給定,在系統(tǒng)運行時是固定的。而處理器的優(yōu)先級則根據(jù)執(zhí)行情況由系統(tǒng)程序動態(tài)設定。除了在優(yōu)先級的設置方面有區(qū)別之外,中斷和陷阱還有如下主要區(qū)別

陷阱通常由處理器正在執(zhí)行的現(xiàn)行指令引起,而中斷則是由與現(xiàn)行指令無關的中斷源引起的。陷阱處理程序提供的服務為當前進程所用,而中斷處理程序提供的服務則不是為了當前進程的。中斷是由硬件引起的,而異常是由軟件引起的;中斷是異步的,而異常是同步的。

陷阱處理程序分類操作系統(tǒng)中的陷井分為兩類:一類是標準系統(tǒng)陷井。這種陷井的處理程序是由系統(tǒng)提供的,用 戶不能對其進行修改。另一類是用戶專用陷井。這 種陷并的處理程序可以由用戶自己定義。具體 地說,在系統(tǒng)中有這樣一些陷井:

( l )專由系統(tǒng)處理的陷阱。

(2 )必須先由系統(tǒng)處理,然后才可以由用戶處理的陷阱。如 在Debug下的Tarce / Ba e rk 等。

(3 ) 若 開放,則由用 戶 處理:若 關 閉,則 由 系統(tǒng)處 理 的 陷 阱。

(4 ) 軟 件產(chǎn) 生 的 陷 阱。

(5)空 陷 阱

陷阱 處 理 是 由 固 件 和 軟 件 共 同 完 成 的。它首先 由固 件來識別,然后 由 軟 件 進 行 處 理。每當一個陷阱發(fā)生,固 件從 系 統(tǒng) 可 用陷阱保護區(qū)(TSA)隊列上取下一個STA,插入進入陷阱的那個任務的STA 隊列中(該隊列由TCB中的TS P指出 ),并將該任務進入陷阱時的一部分現(xiàn)場信息保 到 TSA 中(還有一部分現(xiàn)場信息 由軟件保存到STA 中 )。2

陷阱處理所完成的功能1. 定義一個陷阱處理程序

2. 開放陷阱

3. 關閉陷阱

4. 發(fā)送陷阱條件

5. 發(fā)送軟件陷阱條件

6. 組間發(fā)送陷阱條件2