8.4-中断系统小结(cpu中断七个问题)
【README】
本文轉(zhuǎn)自bilibili《計算機組成原理(哈工大劉宏偉)》的視頻講解,非常棒,墻裂推薦;
【1】中斷介紹
1)作用:用中斷系統(tǒng)實現(xiàn)了外設(shè)數(shù)據(jù)的輸入輸出; 還可以用于程序調(diào)試,計算機系統(tǒng)的異常事件,都可以用中斷系統(tǒng)來處理;
2)中斷因素
【2】 cpu中斷問題
【2.1】問題1:各中斷源如何向cpu提出請求?
給每一個中斷源設(shè)置一個觸發(fā)器,用觸發(fā)器來標(biāo)記這個中斷源是否提出了中斷請求;
一個中斷源對應(yīng)一個中斷請求觸發(fā)器INTR,多個觸發(fā)器組成了中斷請求標(biāo)記寄存器 INTR;
中斷請求標(biāo)記寄存器 INTR 如下:
【2.2】 問題2:各中斷源同時提出請求,怎么辦?
對中斷源進行分級;響應(yīng)優(yōu)先級最高的中斷源(對中斷源的級別進行排隊);
中斷優(yōu)先級分為:響應(yīng)優(yōu)先級和處理優(yōu)先級;
響應(yīng)優(yōu)先級,由硬件決定(中斷源)決定,無法修改;
處理優(yōu)先級可以修改,通過設(shè)置中斷屏蔽字到中斷屏蔽寄存器來屏蔽其他中斷;
?【2.3】問題3:Cpu在什么條件,什么時間,以什么方式響應(yīng)中斷?
【2.3.1】cpu在什么條件下響應(yīng)中斷請求 ?
- 為了表示cpu是否響應(yīng)中斷請求,有一個允許中斷觸發(fā)器EINT,值=1表示允許cpu 響應(yīng)中斷源發(fā)出的中斷請求;
【2.3.2】 cpu在什么時間響應(yīng)中斷請求 ?
- 通常情況下,cpu只有在指令的執(zhí)行階段結(jié)束以后,才能夠響應(yīng)中斷請求;但cpu的某些指令的執(zhí)行階段比較長,這種情況就允許cpu在指令執(zhí)行過程中,響應(yīng)中斷請求;
【2.3.3】 cpu響應(yīng)中斷過程:
- 在指令執(zhí)行以后,cpu發(fā)送查詢信號到中斷源的中斷請求觸發(fā)器;查詢信號把中斷請求觸發(fā)器的輸出端設(shè)置為1,把中斷請求信號發(fā)送到排隊電路;
補充:中斷隱指令作為響應(yīng)中斷的一部分,有3個操作(保護程序斷點,尋找入口地址,硬件關(guān)中斷):如下:
中斷響應(yīng)步驟如下:
| 步驟 | 描述 |
| 1 | Cpu完成指令執(zhí)行階段后,通過硬件向量法查找中斷源;各個中斷源的信號送入排隊器; |
| 2 | 排隊器把中斷源信號(只有一根線為1)送給中斷標(biāo)記觸發(fā)器,從而把INT設(shè)置為1,而EINT設(shè)置為0; |
| 3 | 此外,排隊器還要把中斷信號送給向量地址形成部件,這個向量地址送給PC,為執(zhí)行中斷服務(wù)程序做準(zhǔn)備;(向量地址保存了中斷服務(wù)程序的入口地址) |
?【小結(jié)】中斷響應(yīng)過程中要解決的3個問題:
問題1)保護程序斷點: 斷點就是中斷服務(wù)程序執(zhí)行完成后,返回執(zhí)行的指令;
?????? 方法1 斷點存到特定地址(0號地址)內(nèi);
??????? 方法2 斷點進棧;
問題2)尋找中斷服務(wù)程序入口地址;
????????方法1 采用硬件向量法:把中斷向量地址發(fā)送到PC寄存器;PC中保存了向量地址,這個向量地址保存了中斷服務(wù)程序的入口地址,或跳轉(zhuǎn)指令,該指令會跳轉(zhuǎn)到中斷服務(wù)程序;
????????方法2 軟件查詢法:中斷識別程序的入口地址發(fā)送到PC寄存器;計算機執(zhí)行中斷識別程序來查找中斷服務(wù)程序的入口地址;
問題3)硬件關(guān)中斷(把中斷允許觸發(fā)器的值設(shè)置為0);
關(guān)中斷的目的: 避免在單重中斷的機器中,在執(zhí)行中斷服務(wù)程序的過程中,有新的中斷源會打斷當(dāng)前的中斷服務(wù)程序的執(zhí)行;
另外,即使在多重中斷的cpu中,采用關(guān)中斷的方式,也是為了保存程序斷點,保存程序現(xiàn)場的一個過程;
【2.4】問題4:如何保護現(xiàn)場 ?
【2.5】問題5:如何恢復(fù)現(xiàn)場?
1 保護現(xiàn)場
1.1?? ?保存斷點:由中斷隱指令(硬件)來做,包括3個步驟(保存斷點,形成中斷服務(wù)程序的入口地址,硬件關(guān)中斷) ;
1.2?? ?保存寄存器內(nèi)容(由中斷服務(wù)程序來做,軟件):cpu當(dāng)中的一些寄存器在執(zhí)行中斷服務(wù)程序的時候需要用到;這些寄存器的內(nèi)容也要進行保存 ;因為這些內(nèi)容將來中斷返回的時候,主程序還要用到;
2 恢復(fù)現(xiàn)場
2.1 由中斷服務(wù)程序完成;
因為中斷服務(wù)程序在保存現(xiàn)場的時候,可以吧寄存器內(nèi)容壓入到堆棧中;
在中斷服務(wù)程序恢復(fù)現(xiàn)場時,可以出棧;
3 中斷服務(wù)程序的工作內(nèi)容包括:
1)?? ?保護現(xiàn)場;push指令;
2)?? ?其他服務(wù)程序(中斷服務(wù)程序剩余部分);
3)?? ?恢復(fù)現(xiàn)場;pop指令;
4)?? ?中斷返回;IRET指令;
【補充*】上述保護現(xiàn)場入棧,恢復(fù)現(xiàn)場出棧,也是線程切換的流程,即線程上線文切換的原理,可以看到,頻繁切換就是入棧和出棧過程,即寄存器數(shù)據(jù)送入內(nèi)存棧,和內(nèi)存棧數(shù)據(jù)送入寄存器的過程;頻繁切換的話,可以看到成本非常高,這個切換過程并沒有做實際的業(yè)務(wù)邏輯;
【2.6】問題6:如何尋找中斷服務(wù)程序的入口地址?
通過硬件向量法,或程序查詢法尋找;
【2.6.1】硬件向量法
排隊器輸出:只有1根線是高電平1,其他全部為低電平0;
向量地址形成部件:根據(jù)排隊器輸出,確定需要響應(yīng)的中斷源,從而確定執(zhí)行哪一個中斷服務(wù)程序(通過中斷向量地址確定);
用硬件查找中斷服務(wù)程序入口地址有兩種方法:
方法1: 在中斷向量地址的存儲單元中存放一條跳轉(zhuǎn)指令 如 jmp 200,則200就是中斷服務(wù)程序的入口地址;
方法2: 在中斷向量地址的存儲單元中存放的就是中斷服務(wù)程序的入口地址,如中斷向量地址12H,其保存的入口地址200;
【2.6.2】程序查詢法
中斷識別程序查詢步驟:
| 步驟 | 指令 | 說明 |
| 1 | SKP DZ 1# | SKP表示跳過下一條指令; 指令功能:查詢第1號中斷源的完成觸發(fā)器D;看觸發(fā)器是等于0還是等于1; |
| 2 | JMP 1#SR | 執(zhí)行中斷服務(wù)程序 |
| 3 | SKP DZ 2 | …… |
| 4 | JMP 2SR | …… |
【2.7】問題7:處理中斷的過程中又出現(xiàn)新的中斷 怎么辦?
?處理過程如下:
- 處理中斷1時,發(fā)生了中斷2,且中斷2優(yōu)先級大于中斷1,則停止中斷1的服務(wù)程序,轉(zhuǎn)而執(zhí)行中斷2的服務(wù)程序;
- 處理中斷2時,發(fā)生了中斷3,且中斷3優(yōu)先級大于中斷2,則停止中斷2的服務(wù)程序,轉(zhuǎn)而執(zhí)行中斷3的服務(wù)程序;
上圖中: 產(chǎn)生了3次中斷,和3個斷點,分別是 k+1, l+1, m+1 ;
【例】利用中斷屏蔽字修改中斷處理優(yōu)先級(響應(yīng)多個中斷),參見
https://blog.csdn.net/PacosonSWJTU/article/details/123595867
?【3】cpu中斷全過程小結(jié)
cpu全過程有5個步驟:
總結(jié)
以上是生活随笔為你收集整理的8.4-中断系统小结(cpu中断七个问题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有源码怎么做成app(有源码怎么做成ap
- 下一篇: 域名实名制怎么查询(中国域名实名制)