Linux內核0.12——8086中斷

中斷:CPU不再繼續依序執行指令,而是轉去處理某一從CPU外部或內部產生的特殊信息

從彙編角度理解:

內中斷:對於8086CPU來說,以下發生在CPU內部的的情況會產生內中斷:

除法錯誤;單步執行;執行into指令;執行int指令。其相應的中斷類型碼爲0,1,4,n(n爲字節型立即數)

中斷向量表:8086CPU利用此表中的中斷類型碼來找到相應的中斷處理程序的入口地址;中斷向量表必須存入內存中0000:0000~0000:03FF的1024個單元中,CPU直接從這個地址開始讀取中斷向量表;中斷向量表的一個表項存放一箇中斷處理程序的入口地址,而把中斷類型碼按順序從0開始排序,所以並不需要多餘的空間來記錄中斷類型碼,即一個表項需要兩個字(段+偏移);兩個字的一個表項說明1KB中最多隻能放256箇中斷處理程序。

中斷過程:

1、獲取中斷類型碼N

2、pushf(標誌寄存器的值入棧)

3、TF = 0,IF = 0(當TF==1時,陷阱標誌被置位,CPU會進入單步模式,即每執行一次便中斷一次;當IF==1時,CPU是允許訪問外部可屏蔽中斷的請求的)

4、push CS(保護CPU現場)

5、push IP(同上)

6、(IP) = (N*4),(CS) = (N*4+2)(將中斷程序入口地址讀入)

(實地址模式)自制中斷處理程序:

1、編寫一個程序

2、將程序的入口寫入內存的制定地址,並記錄

3、將該程序的入口地址寫入中斷向量表中即可

外中斷:CPU對外部信息的處理,多爲I/O中斷

從操作系統角度:

通常在操作系統中,中斷主要用於I/O設備的控制,爲每一類設備設置一個I/O進程的設備處理方式時,其中斷處理程序的處理過程大致爲以下幾步:

1、喚醒被阻塞的驅動進程

2、保護被中斷進程的CPU環境(同編程角度不太一樣,這裏的保護不只是單純的記錄中斷前程序的運行位置,而且還要記錄處理機狀態字、程序計數器、所有CPU寄存器)

3、轉入相應的設備處理程序

4、中斷處理

5、恢復被中斷進程的現場

從硬件角度:

CPU響應中斷的時候,需要有一箇中斷控制器,在IBM PC/AT 80x86兼容機上使用兩片相連的8259A可編程中斷控制芯片來組成一個可以提供15個獨立中斷控制功能,在內存當然也需要一箇中斷向量表,當然最多可聯到九級芯片

詳細的中斷控制器介紹:http://blog.csdn.net/ustc_dylan/article/details/4106436

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章