【我所認知的BIOS】—>计算机中断系統(2)

时间:2022-07-30 15:00:02

【我所認知的BIOS】—>计算机中斷系統(2

 LightSeed     

2009-6-10     

繼續前一章節。

 

4、中斷的進階APIC(advanced programable interrupt controller)

4.1  何謂 APIC?

APIC 是裝置的擴充組合用來驅動 Interrupt 控制器。在目前的建置中,系統的每一個部份都是經由 APIC Bus 連接的。"本機 APIC" 為系統的一部份,負責傳遞 Interrupt 至指定的處理器;舉例來說,當一台機器上有三個處理器則它必須相對的要有三個本機 APIC。自 1994 年的 Pentium P54c 開始Intel 己經將本機 APIC 建置在它們的處理器中。實際建置了 Intel 處理器的電腦就己經包含了 APIC 系統的部份。

系統中另一個重要的部份為 I/O APIC。系統中最多可擁有 8 I/O APIC。它們會收集來自 I/O 裝置的 Interrupt 訊號且在當那些裝置需要 interrupt 時傳送訊息至本機 APIC。每個 I/O APIC 有一個專有的 interrupt 輸入 ( IRQ) 號碼。Intel 過去與目前的 I/O APIC 通常有 24 個輸入 -- 其他的可能有多逹 64 個。而且有些機器擁有數個 I/O APIC,每一個分別有自己的輸入號碼,加起來一台機器上會有上百個 IRQ 可供裝置 Interrupt 使用。

4.2  APICPIC優越的幾點

    APIC效率高。8259引起的HW反應很慢,也因此而導致中斷的效率不夠高。

     Method of Interrupt TransmissionThe I/O APIC transmits interrupts through memory writes on the normal datapath to the processor, and interrupts are handled without the need for the processor to run an interrupt acknowledge cycle.

     Interrupt PriorityThe priority of interrupts in the I/O APIC is independent of the interrupt number. Take an example, interrupt 10 can be given a higher priority than interrupt 3.

     More Interrupts.The I/O APIC in the ICH6 supports a total of 24 interrupts.

     Multiple Interrupt Controllers.The I/O APIC architecture allows for multiple I/O APIC devices in the system with their own interrupt vectors.

4.3  APIC的簡單結構介紹

如圖7所示,在CPU這面和IO這面均要有相應的APIC Units才能成功運行APICMODE下。

 【我所認知的BIOS】—>计算机中断系統(2)

7  I/O And Local APIC Units

4.4  APIC的主要寄存器

IOAPICID—IOAPIC IDENTIFICATION REGISTER

在此列出寄存器描述,詳細請參看spec,見表1

1  Map of IOAPICID

Bit

Description

31:28

Reserved

27:24

IOAPIC Identification—R/W. This 4 bit field contains the IOAPIC identification.

23:0

Reserved

IOAPICVER—IOAPIC VERSION REGISTER

在此列出寄存器描述,詳細請參看spec 2

2  Map of IOAPICVER

Bit

Description

31:24

Reserved

23:16

Maximum Redirection Entries — RO. This is the entry number (0 being the lowest entry) of the highest entry in the redirection table. It is equal to the number of interrupt input pins minus one and is in the range 0 through 239. In the ICH6 this field is hardwired to 17h to indicate 24 interrupts.

15

PRQ — RO. This bit indicate that the IOxAPIC does not implement the Pin Assertion Register.

14:8

Reserved

7:0

Version — RO. This is a version number that identifies the implementation version.

 

REDIR_TBLRedirection Table

這個寄存器比較重要,它以64 bits為單位表示一個IRQ的全部屬性。詳細解釋請查看附錄B 3

5、關於PICAPIC我想說的

5.1我們應該怎麼看待兩種控制器

這個兩種控制器是在不同的時代為了滿足相同的需求而產生的,只是一種存在形式的不同而已,我們要分階段地去看待這兩種控制器。平時我們簡說的PIC模式,APIC模式其實就是說在中斷控制的時候是哪個在起作用,僅此而已。

5.2 PCI中斷在兩者中的差別(這個很重要)

PIC模式下分配IRQ No.的時候有可能只有兩個號碼分配給PIRQy,那麼中間就需要繞一下。比如說PIRQA—IRQ5, PIRQB—IRQ9, PIRQC—IRQ5, PIRQD—IRQ5。但是在APIC的模式下就不會有這種情況,因為在南橋的datasheet裏就規定好了,PIRQA必定是IRQ16, PIRQB必定是IRQ17等等。我們可以看看ICH6中的截圖。見圖8

 【我所認知的BIOS】—>计算机中断系統(2)

8 APICICH6中的說明

5.3 關於ISA中斷在兩者中的說明

PICAPIC模式中,ISA中斷應該說大部分都是相同的。只有個別是不同的。如果大家有興趣的話不妨研究一下ICH6或者它一系列的datasheet裏面有對他們的一個表格。在APIC datasheet裏面也有對ISA設備的中斷的詳細說明。我就不一一舉例了。

6PCI設備的中斷在XP下不正常!!

也許細心的讀者會發現在XP下(已經是APIC模式了),有極個別屬於PCI設備,但是它的中斷號碼卻不是IRQ16~IRQ23中的一個值。而是以前它在PIC模式下的IRQ No.(具體點說,在DOS下,筆者用ADU查看Smbus controller分配得到的IRQ IRQ5。在XP下,我用device manager查看Smbus controller分配得到的IRQ也是IRQ5。)我截了一个图下来,如下图

 【我所認知的BIOS】—>计算机中断系統(2)

PCI设备中断在APIC下异常

哇哇,原來APIC也犯錯誤了!

NO,其實這並沒有犯錯誤。容我說說為什麼會出現這樣的情況。引用高手回答的話語原文如下:原作者,seanchang(H)

 

windows 如果是使用APIChal的話. IRQ number如果跟BIOS 的一樣的話, 其實就是沒有windows driver驅動 .你只要從 device manager中的選擇driver 下的driver details. driver在一定可以找到device driver的檔.話說為甚麼會如此呢? 其實是因為所有的PCI device一定會存在於 PCI bus. 如果沒有driver的話. Windows 會在device manager 中以問號的形式表示. 可是有些device 根本不需要driver( host controller). device manager中如果有問號, 使用者就會產生疑問. 因此我們可以可以建立一個對應的INF 來描述這個裝置, 而不需要真的有driver. 這樣可以去掉那些帶問號的裝置(因為不需要driver), 以免造成誤會.有興趣可以去看看一個叫做machine.inf

原文出處大家可以到以下鏈結看看詳細過程。

http://www.programmer-club.com.tw/ShowSameTitleN/assembly/8137.html

 

表3

【我所認知的BIOS】—>计算机中断系統(2)