2010年8月12日 星期四

關於APIC的見解

APIC(高級可編程中斷控制器)對計算機來講有兩個作用, 管理IRQ的分配,可以把傳統的16個IRQ擴展到24個(傳統的管理方式叫PIC),以適應更多的設備。
管理多CPU。由於Nf2主板並不支援多CPU,所以,APIC關閉直接的影響是減少了可用的IRQ。 不過,如果板卡不是非常多的話,關閉 APIC對系統是沒有什麼影響的。要實現SMP功能,我們使用的CPU必須具備以下要求:CPU 內部必須內置APIC單元。Intel 多處理規範的核心就是高級可編程中斷控制器(Advanced Programmable Interrupt Controllers–APICs)的使用。CPU通過彼此發送中斷來完成它們之間的通信。通過給中斷附加動作(actions),不同的CPU可以在某種程度上彼此進行控制。每個CPU有自己的APIC(成為那個CPU的本地APIC),並且還有一個I/O APIC來處理由I/O設備引起的中斷,這個I/O APIC是安裝在主板上的,但每個CPU上的APIC則不可或缺,否則將無法處理多CPU之間的中斷協調。以上內容截自http://boy-asmc.blogspot.com/2009/11/acpi-vs-apic.html
一般而言,若要得知BIOS是否支援APIC時會先到e0000H~f0000h之間尋找20445352h(" DSR")及20525450h(" RTP")字樣;若找到後接下來CHECK接下來的20Bytes其check_sum是否等於0。接著以目前的es:dword ptr[10h]的值為index並以es:word ptr[index+4]為cx當成loop迴圈,來搜尋"CIPA"字樣,便可找到APIC Table。
更詳細的內容請參考Intel64 and IA-32 Architectures Software Developer's Manual-3A.pdf 之Chapter 10。另外參考:
http://www.cs.usfca.edu/~cruse/cs630f06/lesson27.ppt
http://faculty.qu.edu.qa/rriley/cmpt507/minix/apic_8c-source.html