作業系統 認識認識保護模式(三)中斷

2021-10-07 13:28:34 字數 3130 閱讀 4231

理解中斷與異常的機制

除錯8259a的程式設計基本例程

除錯時鐘中斷例程

建立idt,實現乙個自定義的中斷,功能可自定義,如特定鍵盤組合觸發某個動作、電子鐘、自己遊走的字元顯示、蜂鳴器等

了解iopl的作用

理解中斷與異常的機制

除錯8259a的程式設計基本例程

除錯時鐘中斷例程

建立idt,實現乙個自定義的中斷,功能可自定義,如特定鍵盤組合觸發某個動作、電子鐘、自己遊走的字元顯示、蜂鳴器等

了解iopl的作用

1.什麼是中斷,什麼是異常

中斷是cpu暫停當前工作,有計畫地去處理其他的事情。中斷的發生一般是可以預知的,處理的過程也是事先制定好的。處理中斷時程式是正常執行的。

而異常是cpu遇到了無法響應的工作,而後進入一種非正常狀態。異常的出現表明程式有缺陷。

實際上,它們都是程式執行過程中的強制性轉移,轉移到相應的處理程式。

2.8259a的工作原理是怎樣的?

8259a結構如上圖。

通過初始化程式設計向8259a寫入相應的初始化命令icw,可以使晶元處於乙個規定的基本工作方式,並在此方式下進行工作。8259a的初始化命令字共有4個icw1-icw4,進行初始化時要求icw1-icw4按一定的順序寫入。

首先,乙個外部中斷請求訊號通過中斷請求線irq,傳輸到imr(中斷遮蔽暫存器),imr根據所設定的中斷遮蔽字(ocw1),決定是將其丟棄還是接受。

如果可以接受,則8259a將irr(中斷請求暫存暫存器)中代表此irq的位置位,以表示此irq有中斷請求訊號,並同時向cpu的intr(中斷請求) 管腳傳送乙個訊號,但cpu這時可能正在執行一條指令,因此cpu不會立即響應,而當這cpu正忙著執行某條指令時,還有可能有其餘的irq線送來中斷請求,這些請求都會接受imr的挑選,如果沒有被遮蔽,那麼這些請求也會被放到irr中,也即irr中代表它們的irq的相應位會被置1。

當cpu執行完一條指令時後,會檢查一下intr管腳是否有訊號,如果發現有訊號,就會轉到中斷服務,此時,cpu會立即向8259a晶元的inta(中斷應答)管腳傳送乙個訊號。當晶元收到此訊號後,判優部件開始工作,它在irr中,挑選優先順序最高的中斷,將中斷請求送到isr(中斷服務暫存器),也即將isr中代表此irq的位置位,並將irr中相應位置零,表明此中斷正在接受cpu的處理。同時,將它的編號寫入中斷向量暫存器ivr的低三位(ivr正是由icw2所指定的,不知你是否還記得icw2的最低三位在指定時都是0,而在這裡,它們被利用了!)這時,cpu還會送來第二個inta訊號,當收到此訊號後,晶元將ivr中的內容,也就是此中斷的中斷號送上通向cpu的資料線。

3.如何建立idt,如何實現乙個自定義的中斷

1)將idt放入乙個單獨的段中

定義了idt所對應的中斷向量的偏移,即為圖中紅色框圈出的部分。

2)定義偏移定義

分別對應上圖兩個中斷處理程式。其功能為在時鐘中斷到來時,將[gs:((80 * 0 + 70)*2]位置的字串值增1,並以其字串所對應的值作為行數,將新獲得的字串列印到對應行。

3)呼叫中斷,開中斷

結果如下:

可能是暫存器操作的時候出現失誤,不小心更改了背景顏色和字串顏色,但其列印過程是根據時鐘進行的,可見時鐘中斷呼叫是順利的。

4.如何控制時鐘中斷

核心思路就是在idt表中,將中斷向量號單獨寫出來,對應乙個中斷處理的函式,在函式裡定義時鐘中斷的處理過程:

中斷處理程式:

中斷處理程式並不僅僅只有乙個,使用者可以自定義多個程式。在遇到不同中斷向量號的時候使用不同的中斷處理方式可以提高cpu處理效率。

5.iopl的作用與基本機理

(1)iopl的作用:

保護模式通過iopl和i/o許可點陣圖來限制使用者程序進行的i/o操作。iopl是i/o保護機制的關鍵之一,位於暫存器eflags的第12、13位。指令in、ins、out、outs、cli、sti只有在cpl <= iopl時才能執行。這些指令被稱為i/o敏感指令(i/o sensitive instructions)。如果低特權級的指令試圖訪問這些i/o敏感指令將會導致常規保護錯誤(#gp)。

(2)iopl的執行機理:

i/o點陣圖基址是乙個以tss的位址為基址的偏移,指向的便是i/o許可位圖。之所以叫做位圖,是因為它的每一位表示乙個位元組的埠位址是否可用。如果某一位為0,則表示此位對應的埠號可用,為1則不可用。由於每乙個任務都可以有單獨的tss,所以每乙個任務可以有它單獨的i/o許可位圖。

比如,有乙個任務的tss是這樣的:

由於i/o許可位圖開始有12位元組內容為0ffh,即有12×8=96位被置為1,所以從埠00h到5fh共96個埠位址對此任務不可用。

同理,接下來的1位元組只有第1位(從0開始數)是0,表示這一位對應的埠(61h)可用。

如果i/o點陣圖基址大於或等於tss段界限,就表示沒有i/o許可位圖,如果cpliopl,則所有i/o指令都會引起異常。i/o許可位

圖的使用使得即便在同一特權級下不同的任務也可以有不同的i/o訪問許可權。

作業系統學習(三) 中斷概述

中斷分為外部硬體中斷 內部中斷和軟中斷。中斷也是作業系統的一種解決方案,那麼為什麼需要引入中斷機制呢。為了分享計算能力,處理器應當為多使用者多工提供硬體一級的支援。在單處理系統中,當乙個任務的執行時,還有其他多個任務等待獲取處理器來執行。當乙個任務等待輸入輸出時,應該把處理器轉給另乙個任務執行。但問...

動手製作作業系統 認識實模式與保護模式

因為計算機啟動後按照實模式定址,cpu只能訪問1m的記憶體,所以為了訪問1m記憶體後更大的空間,就需要進入到保護模式,保護模式不僅有更大的位址空間,還將程式分成了4個特權級 0 4 數字越小特權級越高,在涉及特權級的操作時,處理器將會對特權級進行比較,最終允許訪問或者拒絕訪問。描述符 乙個特殊的資料...

作業系統保護模式Protected Mode

保護模式,是一種80286系列和之後的x86相容 cpu操作模式。保護模式有一些新的特色,設計用來增強 多工和系統穩定度,像是 記憶體保護,分頁系統,以及硬體支援的 虛擬記憶體。大部分的現今 x86 作業系統 都在保護模式下執行,包含 linux freebsd 以及 微軟windows 2.0 和...