模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序_操作系统基础6-支持操作系统的最基本的硬件-中断...
無(wú)論是桌面PC操作系統(tǒng)還是嵌入式都是多任務(wù)的操作系統(tǒng),而很遺憾,處理器往往是單個(gè)的,即便在硬件成本逐漸下降,而硬件配置直線(xiàn)上升的今天,PC機(jī)的核心可能已經(jīng)達(dá)到4核心,8核心,而手機(jī)移動(dòng)設(shè)備更不可思議的達(dá)到16核心,32核心,處理器的數(shù)量依然不可能做到每個(gè)任務(wù)一個(gè)CPU,所以CPU必須作為一種全局的資源讓所有任務(wù)共享。說(shuō)到共享,如何共享呢?什么時(shí)候給任務(wù)A用,什么時(shí)候給任務(wù)B用......這就是進(jìn)程調(diào)度,具體的安排就由調(diào)度算法決定了。進(jìn)程如何去調(diào)度?現(xiàn)代操作系統(tǒng)一般都是采用基于時(shí)間片的優(yōu)先級(jí)調(diào)度算法,把CPU的時(shí)間劃分為很細(xì)粒度的時(shí)間片,一個(gè)任務(wù)每次只能占用這么多的時(shí)間,時(shí)間到了就必須交出使用權(quán),換由其他的任務(wù)使用。這種要看操作系統(tǒng)的定時(shí)器機(jī)制了。那么時(shí)間片到之后,系統(tǒng)做了什么呢?這就要用到我們的中斷了,時(shí)間片到了由定時(shí)器觸發(fā)一個(gè)軟中斷,然后進(jìn)入相應(yīng)的處理歷程。當(dāng)然這一點(diǎn)不足以表明中斷的重要性,計(jì)算機(jī)操作系統(tǒng)自然離不開(kāi)外部設(shè)備:鼠標(biāo)、鍵盤(pán)、網(wǎng)卡、磁盤(pán)等等。就拿網(wǎng)卡來(lái)講,計(jì)算機(jī)并不知道什么時(shí)候數(shù)據(jù)包會(huì)來(lái)到,能保證的就是數(shù)據(jù)來(lái)了能正常接收就行了。但是我又不可能一直等著接收數(shù)據(jù)包,要是這樣其他任務(wù)就死完了。所以合理的辦法是,你數(shù)據(jù)包來(lái)到之后,通知我,然后我再對(duì)你處理,怎么通知呢?答:中斷!
定義:
(廣義的)指CPU對(duì)突發(fā)的外部事件的反應(yīng)過(guò)程或機(jī)制。CPU收到外部信號(hào)(中斷信號(hào))后,停止當(dāng)前工作,轉(zhuǎn)去處理該外部事件,處理完畢后回到原來(lái)工作的中斷處(斷點(diǎn))繼續(xù)原來(lái)的工作。中斷信號(hào)來(lái)自外圍硬件(相對(duì)于CPU和內(nèi)存)的異步信號(hào)或來(lái)自軟件的同步信號(hào)。
引入中斷的目的
- 實(shí)現(xiàn)并發(fā)活動(dòng)
1. CPU和外設(shè)并發(fā)工作:當(dāng)外設(shè)工作完畢,產(chǎn)生信號(hào)通知CPU,讓CPU處理外部事件;
2. 兩個(gè)進(jìn)程并發(fā)運(yùn)行:通過(guò)時(shí)鐘的切換,進(jìn)程并發(fā)使用CPU,時(shí)鐘產(chǎn)生一個(gè)中斷信號(hào)通知CPU將使用權(quán)切換到另一進(jìn)程
- 實(shí)現(xiàn)實(shí)時(shí)處理
實(shí)時(shí)系統(tǒng)中處理機(jī)隨時(shí)響應(yīng)并進(jìn)行處理各種監(jiān)測(cè)和控制裝置隨機(jī)向處理機(jī)發(fā)出的中斷請(qǐng)求
- 故障自動(dòng)處理
處理機(jī)中設(shè)有各種故障檢測(cè)和錯(cuò)誤診斷的部件,一旦發(fā)現(xiàn)故障或錯(cuò)誤,立即發(fā)出中斷請(qǐng)求,進(jìn)行故障現(xiàn)場(chǎng)記錄和隔離,為進(jìn)一步處理提供必要的依據(jù)
中斷的一些概念
中斷源:
引起中斷的事件或原因,或發(fā)出中斷申請(qǐng)的來(lái)源。
中斷類(lèi)型:
- 外中斷(Interruption):指來(lái)自CPU執(zhí)行指令以外的事件的發(fā)生,如設(shè)備發(fā)出的I/O結(jié)束中斷,表示設(shè)備輸入/輸出處理已經(jīng)完成,希望處理機(jī)能夠向設(shè)備發(fā)下一個(gè)輸入 / 輸出請(qǐng)求,同時(shí)讓完成輸入/輸出后的程序繼續(xù)運(yùn)行。時(shí)鐘中斷,表示一個(gè)固定的時(shí)間片已到,讓處理機(jī)處理計(jì)時(shí)、啟動(dòng)定時(shí)運(yùn)行的任務(wù)等。這一類(lèi)中斷通常是與當(dāng)前程序運(yùn)行無(wú)關(guān)的事件,即它們與當(dāng)前處理機(jī)運(yùn)行的程序無(wú)關(guān)。 外中斷又可分為不可屏蔽中斷、可屏蔽中斷。對(duì)于不可屏蔽中斷,CPU必須無(wú)條件響應(yīng),而對(duì)于可屏蔽中斷,CPU可以響應(yīng),也可以不響應(yīng),CPU一般設(shè)置兩根中斷請(qǐng)求線(xiàn):可屏蔽中斷請(qǐng)求INTR(Interrupt Require)和不可屏蔽中斷請(qǐng)求NMI(NonMaskable Interrupt)。對(duì)于可屏蔽中斷,除了受本身的屏蔽位控制外,還都要受一個(gè)總的控制,即CPU標(biāo)志寄存器中的中斷允許標(biāo)志位IF(Interrupt Flag)的控制,IF位為1,可以得到CPU響應(yīng),否則,得不到響應(yīng)。
- 內(nèi)中斷:也稱(chēng)為異常(exception),是由CPU內(nèi)部事件所引起的中斷,例如進(jìn)程在運(yùn)算中發(fā)生了上溢或者下溢,有如程序出錯(cuò),如非法指令,地址越界等。通常把這類(lèi)中斷稱(chēng)為內(nèi)中斷或者陷入。若系統(tǒng)發(fā)現(xiàn)有陷入事件,CPU也將暫停正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行該陷入事件的處理程序。
斷點(diǎn):
程序中斷的地方,將要執(zhí)行的下一指令的地址。
現(xiàn)場(chǎng)(上下文)Context
用戶(hù)空間的應(yīng)用程序,通過(guò)系統(tǒng)調(diào)用,進(jìn)入內(nèi)核空間。這個(gè)時(shí)候用戶(hù)空間的進(jìn)程要傳遞很多變量、參數(shù)的值給內(nèi)核,內(nèi)核態(tài)運(yùn)行的時(shí)候也要保存用戶(hù)進(jìn)程的一些寄存器值、變量等。所謂的“進(jìn)程上下文”,可以看作是用戶(hù)進(jìn)程傳遞給內(nèi)核的這些參數(shù)以及內(nèi)核要保存的那一整套的變量和寄存器值和當(dāng)時(shí)的環(huán)境等。
中斷信號(hào)由外部設(shè)備發(fā)起,準(zhǔn)確來(lái)說(shuō)是由外部設(shè)備的控制器發(fā)起,因?yàn)橥獠吭O(shè)備本身并不能發(fā)起信號(hào)。硬件通過(guò)觸發(fā)信號(hào),導(dǎo)致內(nèi)核調(diào)用中斷處理程序,進(jìn)入內(nèi)核空間。這個(gè)過(guò)程中,硬件的一些變量和參數(shù)也要傳遞給內(nèi)核,內(nèi)核通過(guò)這些參數(shù)進(jìn)行中斷處理。所謂的“中斷上下文”,其實(shí)也可以看作就是硬件傳遞過(guò)來(lái)的這些參數(shù)和內(nèi)核需要保存的一些其他環(huán)境(主要是當(dāng)前被打斷執(zhí)行的進(jìn)程環(huán)境)。
現(xiàn)場(chǎng)的保護(hù):進(jìn)入中斷服務(wù)程序之前,棧
現(xiàn)場(chǎng)的恢復(fù):進(jìn)入中斷服務(wù)程序之后,棧
中斷的響應(yīng)過(guò)程
中斷響應(yīng)的實(shí)質(zhì)
中斷響應(yīng)的實(shí)質(zhì)是交換CPU的模式和交換指令執(zhí)行地址和處理器狀態(tài),以達(dá)到如下目的:
1、保留及恢復(fù)程序斷點(diǎn)及有關(guān)信息。
2、自動(dòng)轉(zhuǎn)入相應(yīng)的中斷處理程序執(zhí)行。
參考: 華中科技大學(xué)軟件學(xué)院蘇曙光老師的操作系統(tǒng)原理課程
總結(jié)
以上是生活随笔為你收集整理的模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序_操作系统基础6-支持操作系统的最基本的硬件-中断...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安卓平板运行python_使用Pytho
- 下一篇: 两个list怎么对比数据_基于日志的回放