8259a pic 原理收集

2021-07-04 04:59:06 字數 2211 閱讀 2483

最近在寫乙個簡單的kernel, 中斷弄得我很頭疼, 查詢了很多資料, 順便整理下一些關於8259a pic的資料

1. 簡介

8259a晶元是乙個中斷管理晶元,中斷的**除了來自於硬體自身的nmi中斷和來自於軟體的int n指令造成的軟體中斷之外,還有來自於外部硬體裝置的中斷,這些中斷是可遮蔽的。這些中斷也都通過pic(programmable interrupt controller)進行控制,並傳遞給cpu。

乙個8259a晶元的可以接最多8個中斷源,但由於可以將2個或多個8259a晶元級連(cascade),並且最多可以級連到9個,所以最多可以接64個中斷源。如今絕大多數的pc都擁有兩個8259a,這樣 最多可以接收15個中斷源。

通過8259a可以對單個中斷源進行遮蔽。

2. 內部暫存器功能介紹

在乙個8259a晶元有如下幾個內部暫存器
interrupt mask register (imr)。

interrupt request register (irr)。

in service register (isr)。

imr被用作過濾被遮蔽的中斷,irr被用作暫時放置未被進一步處理的interrupt,當乙個interrupt正在被cpu處理時,此中斷被放置在isr中。

除了這幾個暫存器之外,8259a還有乙個單元叫做priority resolver,當多個中斷同時發生時,priority resolver根據它們的優先順序,將高優先順序者優先傳遞給cpu。

3. 工作原理

當乙個中斷請求從ir0到ir7中的某根線到達imr時,imr首先判斷此ir是否被遮蔽,如果被遮蔽,則此中斷請求被丟棄;否則,則將其放入irr中。在此中斷請求不能進行下一步處理之前,它一直被放在irr中。一旦發現處理中斷的時機已到,priority resolver將從所有被放置於irr中的中斷中挑選出乙個優先順序最高的中斷,將其傳遞給cpu去處理。ir號越低的中斷優先級別越高,比如ir0的優先級別是最高的。

8259a通過傳送乙個intr(interrupt request)訊號給cpu,通知cpu有乙個中斷到達。cpu收到這個訊號後,會暫停執行下一條指令,然後傳送乙個inta(interrupt acknowledge)訊號給8259a。8259a收到這個訊號之後,馬上將isr中對應此中斷請求的bit設定,同時irr中相應的bit會被reset。比如,如果當前的中斷請求是ir3的話,那麼isr中的bit-3就會被設定,irr中ir3對應的bit就會被reset。這表示此中斷請求正在被cpu處理,而不是正在等待cpu處理。

隨後,cpu會再次傳送乙個inta訊號給8259a,要求它告訴cpu此中斷請求的中斷向量是什麼,這是乙個從0到255的乙個數。8259a根據被設定的起始向量號(起始向量號通過中斷控制字icw2被初始化)加上中斷請求號計算出中斷向量號,並將其放置在data bus上。比如被初始化的起始向量號為8,當前的中斷請求為ir3,則計算出的中斷向量為8+3=11。

cpu從data bus上得到這個中斷向量之後,就去idt中找到相應的中斷服務程式isr,並呼叫它。如果8259a的end of interrupt (eoi)通知被設定位人工模式,那麼當isr處理完該處理的事情之後,應該傳送乙個eoi給8259a。

8259a得到eoi通知之後,isr暫存器中對應於此中斷請求的bit會被reset。

如果8259a的end of interrupt (eoi)通知被設定位自動模式,那麼在第2個inta訊號收到後,8259a isr暫存器中對應於此中斷請求的bit就會被reset。

在此期間,如果又有新的中斷請求到 達,並被放置於irr中,如果這些新的中斷請求中有比在isr寄存中放置的所有中斷優先級別還高的話,那麼這些高優先順序別的中斷請求將會被馬上按照上述過 程進行處理;否則,這些中斷將會被放在irr中,直到isr中高優先順序別的中斷被處理結束,也就是說知道isr暫存器中高優先順序別的bit被reset為 止。

4. 中斷向量

當intel cpu執行在32位保護模式下時,需要使用中斷描述符表(interrupt descriptor table,idt)來管理中斷或異常。idt是intel 8086~80186 cpu中使用的中斷向量表的直接替代物。其作用也類似於中斷向量表,只是其中每個中斷描述符項中除了含有中斷服務程式位址以外,還包含有關特權級和描述符類別等資訊。linux作業系統工作於80x86的保護模式下,因此它使用中斷描述符表來設定和儲存各中斷的」向量」資訊。

8259A工作原理描述

通過初始化程式設計向8259a寫入相應的初始化命令icw,可以使晶元處於乙個規定的基本工作方式,並在此方式下進行工作。8259a的初始化命令字共有4個icw1 icw4,進行初始化時要求icw1 icw4按一定的順序寫入。首先,乙個外部中斷請求訊號通過中斷請求線 irq 傳輸到 imr 中斷遮蔽暫存...

BT原理收集 1

bt是通過web伺服器來實現的,首先bt會通過分析 torrent 來得到下面一串 http btfans.3322.6969 announce 是發布伺服器的位址 info hash 是torrent檔案中的 info 部分的sha校驗碼,web通過它在發布列表找到對應的紀錄 peer id 是自...

Vue響應式系統之收集依賴原理。

舉個例子 假設我們有多個vue物件 這個全域性變數需要在所有vue物件都能進行展示 let obj let vm1 newvue data obj let vm2 newvue data obj 這時候我們要物件全域性變數進行修改 修改後還需要讓count知道是誰依賴了自己,然後count變更的時候...