中斷控制器是連線裝置和cpu的橋梁,乙個裝置產生中斷後,需要經過中斷控制器的**,才能最終到達cpu。在up(uni-processor,單處理器)時代,x86主要使用的中斷控制器為pic(programmable interrupt controller)。隨著smp(symmetric multiple processor,對稱多處理器)的流行,apic(advanced programmable interrupt controller)已廣為流行並將最終取代pic。
作業系統通過表獲取平台上硬體中斷系統的資訊,表是bios報告系統資源資訊的通常方式。mp spec定義了mp table,acpi規範定義了madt(multiple apic description table)。雖然構建方式不一樣,但是從os看來兩者大同小異,都支援lapic entry、i/o apic entry,以及其他幾個與之相關的entry。這些entry描述了平台apic硬體的情況。
由於歷史原因,sylixos同樣定義了一組符合mp spec的資料結構來管理平台硬體。acpi被引入後,雖然匯報硬體資源的方式變了,但仍可以使用mp spec的資料結構管理。sylixos的acpi解析路徑,實際上是使用了acpi的方式讀表,填充mp spec的資料結構。
typedef
struct x86_mp_ioapic;
x86_mp_interrupt:對應mp spec的i/o interrupt entry,代表各個中斷源(乙個i/o apic管腳連線乙個中斷源),如下所示。
typedef
struct x86_mp_interrupt;
sylixos將所有從mp spec以及acpi探測出的資料全部儲存在全域性變數_g_pacpimpapicdata中。其中中斷源資訊儲存在該結構體成員mpapic_uiitloc指定的位址中,共mpapic_uiitsize個。此外,全域性變數_g_px86mpapicinterrupttable同樣儲存了中斷資訊表的起始位址。
mp spec的相關**在「libsylixos/sylixos/arch/x86/mpconfig」目錄中,acpi規範的相關**在「libsylixos/sylixos/arch/x86/acpi」目錄中。mp和acpi例項的初始化介面如下所示。
#include
"arch/x86/mpconfig/x86mpapic.h"
int x86mpapicinstinit (void);
函式x86mpapicinstinit原型分析:
《interrupt in linux》
SylixOS x86引導過程分析
當x86電源開啟後,cpu將自動進入實模式,並從位址0xffff0 cs 0xffff,ip 0x0 開始自動執行程式 此位址一般是bios的位址。bios啟動後,將啟動裝置的主引導記錄。主引導記錄位於第0磁軌的第1個扇區,它的大小是512位元組,裡面存放了用組合語言編寫的預啟動資訊 分割槽表資訊 ...
x86中斷(一) 中斷分類
一 中斷分類 x86系統支援256個中斷源,每個中斷源使用0 255數字標識,該標識稱作中斷向量號 即cpu中斷源的中斷號,要與外部中斷的中斷號irq n相區別 cpu通過獲取中斷向量號識別中斷源。256個中斷源可以分為 其中 1 內部中斷 由cpu內部事件及執行軟中斷指令產生,由除法中斷 溢位中斷...
x86中斷架構
x86計算機的 cpu 為中斷只提供了兩條外接引腳 nmi 和 intr。1.可程式設計中斷控制器8259a 8259a 只適合單 cpu 的情況。每個cpu都有乙個本地apic,所有本地apic連線到io apic。主要是收集來自 i o 裝置的 interrupt 訊號且在當那些裝置需要中斷時傳...