色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

干貨!從硬件看中斷之APIC

冬至子 ? 來源:TrustZone ? 作者:Hcoco ? 2023-08-08 17:28 ? 次閱讀

前言

前面我們學習了8259A,但8259A 只適合單 CPU 的情況,為了充分挖掘 SMP 體系結構的并行性,能夠把中斷傳遞給系統中的每個 CPU 至關重要。基于此理由,Intel 引入了一種名為 I/O 高級可編程控制器的新組件,來替代老式的 8259A 可編程中斷控制器。下面一起來學習一下APIC。

0 APIC概述

Intel從Pentium處理器開始引入了APIC(Advanced Programmable Interrupt Controller)機制,直譯為高級可編程中斷控制器。引入APIC機制是為了適應multiple processor(MP,多處理器)環境。

APIC經歷了4個版本

image.png

最初的APIC屬于外部設備,以外部的82489DX芯片形式存在。在P6家族和Pentium處理器后,以APIC on Chip形式存在,引入了處理器內部的local APIC架構,和82489DX 外部APIC相比較功能得到了擴展和增強。

Pentium 4和Intel Xeon處理器在APIC的基礎上進一步擴展,形成了xAPIC體系,以及最后在xAPIC基礎上再一次擴展的x2APIC體系。

1 APIC

每個logical processor(邏輯處理器)都有自己的local APIC,每個local APIC包括了一組local APIC寄存器,用來控制local和external中斷的產生、發送和接收等,也產生和發送IPI(處理器間的中斷消息)。local APIC寄存器組以內存映射形式映射到物理地址空間上,因此軟件可以使用MOV指令進行訪問。

然而在x2APIC模式上local APIC寄存器映射到MSR寄存器組來代替映射內存,軟件使用RDMSR和WRMSR指令來訪問local APIC寄存器。

如下所示,這是在支持Intel Hyper-Threading Technology的MP系統上,兩個logical processor(線程)共享一個processor core執行單元。

image.png

每個local APIC有自己的local APIC ID,這個ID決定了logical processor在system bus上的地址,可以用于處理器間的消息接收和發送,也可用于外部中斷消息的接收。

標準PC上兩片級聯的8259提供了理論上15個中斷輸入源,但實際系統中這些中斷源遠遠不夠用。

從Pentium開始,微機系統中引入了高級可編程中斷控制器APIC(Advanced Programmable Interrupt Controller), APIC兼容PIC(Programmable Interrupt Controller)。

新型高級可編程中斷控制器SAPIC(StreamLined Advanced Programmable Interrupt Controller)是APIC的64位升級版本。

APIC可以用于單CPU和多CPU系統中。 引入APIC一方面是為了支持多處理器系統需要 ,使外部中斷能被有選擇地交給某一個CPU來處理。

CPU利用處理器間中斷IPI (Inter-Processor Interrupt),可以將一個外部中斷交給另一個CPU來處理 ,也可以在CPU之間發布消息,或者實現搶占式調度。

多處理器系統中,CPU通過彼此發送中斷來完成它們之間的通信。另一方面,擴展了系統可用的中斷數達到24個,分隔了PCI/ISA設備使用的中斷,在APIC系統中只有PCI設備才能使用16~23號中斷,而ISA設備仍然使用常規的0~15號中斷,解決了使用8259中斷控制器所帶來的中斷共享、中斷優先級不易控制等問題。

ISA總線: (Industry Standard Architecture:工業標準體系結構)是為PC/AT電腦而制定的總線標準,為16位體系結構,只能支持16位的I/O設備,數據傳輸率大約是16MB/S。也稱為AT標準。ISA是IndustryStandardArchitecture的縮寫ISA插槽是基于ISA總線(IndustrialStandardArchitecture,工業標準結構總線)的擴展插槽,其顏色一般為黑色,比PCI接口插槽要長些,位于主板的最下端。其工作頻率為8MHz左右,為16位插槽,最大傳輸率16MB/sec,可插接顯卡,聲卡,網卡已及所謂的多功能接口卡等擴展插卡。其缺點是CPU資源占用太高,數據傳輸帶寬太小,是已經被淘汰的插槽接口。

ISA是8/16bit的系統總線,最大傳輸速率僅為8MB/s,但允許多個CPU共享系統資源。由于兼容性好,它在上個世紀80年代是最廣泛采用的系統總線,不過它的弱點也是顯而易見的,比如傳輸速率過低、CPU占用率高、占用硬件中斷資源等。后來在PC‘98規范中,就開始放棄了ISA總線,而Intel從i810芯片組開始,也不再提供對ISA接口的支持。

PCI-Express(peripheral component interconnect express)是一種高速串行計算機擴展總線標準,它原來的名稱為“3GIO”,是由英特爾在2001年提出的,旨在替代舊的PCI,PCI-X和AGP總線標準。PCI總線已成為了計算機的一種標準總線。

PCI總線取代了早先的ISA總線。有許多優點,比如即插即用(Plug and Play)、中斷共享等。所謂即插即用,是指當板卡插入系統時,系統會自動對板卡所需資源進行分配,如基地址、中斷號等,并自動尋找相應的驅動程序。而不象舊的ISA板卡,需要進行復雜的手動配置。實際的實現遠比說起來要復雜。

在PCI板卡中,有一組寄存器,叫"配置空間"(Configuration Space),用來存放基地址與內存地址,以及中斷等信息。以內存地址為例。當上電時,板卡從ROM里讀取固定的值放到寄存器中,對應內存的地方放置的是需要分配的內存字節數等信息。

操作系統要根據這個信息分配內存,并在分配成功后把相應的寄存器中填入內存的起始地址。這樣就不必手工設置開關來分配內存或基地址了。對于中斷的分配也與此類似。ISA卡的一個重要局限在于中斷是獨占的,而我們知道計算機的中斷號只有16個,系統又用掉了一些,這樣當有多塊ISA卡要用中斷時就會有問題了。PCI總線的中斷共享由硬件與軟件兩部分組成。

硬件上,采用電平觸發的辦法:中斷信號在系統一側用電阻接高,而要產生中斷的板卡上利用三極管的集電極將信號拉低。這樣不管有幾塊板產生中斷,中斷信號都是低;而只有當所有板卡的中斷都得到處理后,中斷信號才會回復高電平。

軟件上,采用中斷鏈的方法:假設系統啟動時,發現板卡A用了中斷7,就會將中斷7對應的內存區指向A卡對應的中斷服務程序入口ISR_A;然后系統發現板卡B也用中斷7,這時就會將中斷7對應的內存區指向ISR_B,同時將ISR_B的結束指向ISR_A。

以此類推,就會形成一個中斷鏈。而當有中斷發生時,系統跳轉到中斷7對應的內存,也就是ISR_B。ISR_B就要檢查是不是B卡的中斷,如果是,要處理,并將板卡上的拉低電路放開;如果不是,則呼叫ISR_A。這樣就完成了中斷的共享。咱們繼續

值得注意的是,只有Windows 2000以后的操作系統才支持APIC, Linux可以支持但需要定制,缺省安裝并不支持。

BIOS運行于實模式,不支持APIC, APIC只有在保護模式下才能使用。 (因此8259A)

整個APIC系統可以分為兩大部分:LAPIC(Local APIC)和IO APIC,如圖23所示。

image.png

單核或者多核情況下,每個處理器中都有自己的LAPIC,而IO APIC是作為系統芯片組中一部分,在PCI-to-ISA bridge的LPC控制器內,系統最多有8個IO APIC。

LAPIC通過系統總線接收該處理器產生的本地中斷(例如時鐘中斷等)及處理器間中斷,并接收外部的中斷消息,如來自IO APIC的消息等。

IO APIC負責接收所有外部的硬件中斷,并翻譯成消息選擇發給接收中斷的處理器。

APIC功能可以被關閉。 APIC被關閉時,由集成在芯片組內的8259功能模塊來處理中斷此時LAPIC的引腳LINT0連接到INTR, LINT1連接到NMI 。本節介紹的APIC以Pentium 4和Xeon為主,Pentium采用的APIC有所不同。

image.png
8259A內部結構

2 LAPIC

典型地,8259兼容類的legacy中斷控制器是在uni-processor(單處理器)系統上使用,已不能適應于多處理器環境,而I/O APIC能適用于multi-porcessor(多處理器)環境上。

I/O APIC可以發送中斷消息到指向的logical processor上。I/O APIC屬于芯片組的一部分,現稱為PCH(Platform controller Hub),位于PCIto-ISA bridge(南橋芯片)的LPC控制器上。

各芯片組廠商的南橋名稱都有所不同,例如英特爾稱之為I/O路徑控制器(ICH,IO Controller Hub)或平臺路徑控制器(PCH)。因此后面看著叫PCH也不需要奇怪哦!!!

I/O APIC也有自己的寄存器,同樣也以內存映射形式映射到物理地址空間上。

LAPIC(Local APIC,本地APIC)包含了8259和8254的功能。

Intel 8253/8254是一個可編程定時/計數器(PIT-Programmable Interval Timer)芯片,用于處理計算機中的精確時間延遲。該芯片提供了 3個獨立的16位計數器通道。每個通道可工作在不同的工作方式下, 并且這些工作方式均可以使用軟件來設置。對于PC/AT及其兼容微機系統采用的是8254芯片。Linux 0.11操作系統只對通道0進行了重新設置,使得該計數器工作在方式3下,并且每間隔10毫秒發出一個信號以產生中斷請求信號(IRQ0)。這個間隔定時產生的中斷請求就是Linux 0.11內核工作的脈搏,它用于定時切換當前執行的任務和統計每個任務使用的系統資源量(時間)。

它能響應以下幾種中斷:

  • ① 系統中斷:IO APIC送來的系統中斷請求,由IO APIC交給中斷請求指定的目標處理器處理。
  • ③ 本地中斷:本地APIC產生的系統中斷請求(計時器、LINT0/LINT1、性能監控、溫度傳感器、錯誤)。本地中斷只能由該CPU處理。

從P6系列處理器開始,可以用特殊命令CPUID探測LAPIC的存在。如執行以下命令:

MOV   EAX, 1CPUID

返回值在EDX寄存器中,當返回值第9位為1時,表示本地APIC存在,否則表示不存在。

下面簡要介紹LAPIC的相關機制。

  • (1)中斷發布方式

本地APIC的中斷發布方式分為靜態和動態兩種。

在靜態方式下,根據重定向表中的信息,中斷消息無條件地提交給某一個、幾個或全部CPU;

在動態方式下,中斷消息通過TPR (Task Priority Register)判斷提交給最低優先權的CPU或焦點CPU(已接收或正在處理該中斷)。

如果有多個CPU都執行相同優先級的進程,則必須采用仲裁(Arbitration)技術。

  • (2)IA32_APIC_BASE寄存器 在模式專用寄存器(Model Specific Register)中,有一個IA32_APIC_BASE寄存器,其索引為1BH。CPU通過它來配置和控制本地APIC,例如允許、禁止本地APIC及設置本地APIC寄存器的基地址。IA32_APIC_BASE寄存器的格式如圖24所示。

image.png
IA32_APIC_BASE寄存器

  • E=1時,啟用本地APIC。
  • BSP=1時,此CPU為引導處理器;
  • BSP=0時,為應用處理器。

在多CPU系統中,只能有一個引導處理器。

本地APIC寄存器是多個寄32_APIC_BASE指定,使用4KB存儲器空間。

默認情況下,Intel將LAPIC的寄存器都映射到了物理地址0xFEE00000H。

本地APIC寄存器長度為32位、64位或者256位,所有地址邊界按照16字節即128位為邊界來訪問。APIC地址映射見表如下

image.png

  • (3)局部向量表

偏移為320H~370H的6個本地APIC寄存器構成局部向量表LVT(Local Vector Table) ,分別代表6種中斷:

  • 計時器中斷、
  • 溫度傳感器中斷、
  • 性能監控中斷、
  • LINT0中斷、
  • LINT1中斷
  • 錯誤中斷。

LVT中各個寄存器的格式如圖25所示。
image.png

局部向量表LVT

  • ① D16屏蔽位等于1時,對應的中斷類型被屏蔽。
  • ② D15觸發位等于0時,邊沿觸發;等于1時,電平觸發。
  • ③ D14遠程位等于1時,本地APIC收到中斷請求。收到中斷結束命令時,置為0。
  • ④ D13極性位等于0時,LINT0/LINT1高電平有效;等于1時,低電平有效。
  • ⑤ D12狀態位等于1時,已經向CPU提交了中斷請求,但CPU還沒有應答。

一共有5種提交模式,見表如下。

image.png
局部中斷提交模式

當提交模式等于000B時,CPU讀取LVT中的低8位作為中斷向量。

  • (4)計時器中斷

本地APIC中的計時器相關寄存器包括當前計數寄存器CCR、計數初值寄存器CR和除數寄存器DCR。

給CR寄存器賦值時,初始值裝入CCR, CCR的值按一定頻率遞減,遞減的頻率等于系統總線頻率除以刻度系數。刻度系數由DCR確定。CCR的值遞減到0時,向處理器提交計時器中斷。

當計時器采用單次模式(循環位等于0)時 ,提交計時器中斷后,CCR的值一直保持為0,直到向CR寄存器裝入新的初值。采用循環模式時,提交計時器中斷后,CR的值重新到CCR,繼續遞減。計數過程中若初始計數寄存器被重置了,則將使用新的初始計數值,重新開始計數。

  • (5)發布中斷

通過寫入ICR寄存器,CPU可以向自身或者其他CPU發布處理器間中斷IPI。ICR寄存器為64位,低32位的地址為FEE00300H,高32位的地址為FEE00310H。

ICR的主要功能包括:發送一個中斷給另外一個處理器;允許處理器轉發它收到的一個中斷,但不對另一個處理器的請求提供服務 ;把處理器定向到中斷本身,即執行一次自我中斷;傳送特定的IPI,比如啟動IPI(SIPI)消息,到其他處理器。

ICR寄存器格式如圖26所示。

image.png

ICR寄存器中,D13、D16、D17、D20~D55均保留。其他位含義如下:

  • ① D7~D0表示中斷向量號。
  • ② D10~D8表示提交模式:
    • a. 000(固定):傳送向量域中指定的中斷到目標處理器或者處理器組。
    • b. 001(最低優先權):除了把中斷傳送給目的域中指定的目標處理器組中的優先級最低的處理器之外,其他同于固定模式。處理器傳送最低優先權IPI的能力是與模型相關的,BIOS和操作系統軟件應該避免它。
    • c. 010(SMI):傳送一個SMI中斷給目標處理器或者處理器組。為了與未來兼容,該向量域應該設成00H。
    • d. 011(保留)。e. 100(NMI):傳送一個NMI中斷給目標處理器或者處理器組。忽略向量信息。
    • f. 101(INIT):傳送一個INIT請求給目標處理器或者處理器組,使之執行一次初始化。作為這個IPI消息的結果之一,所有處理器都執行一次初始化。
    • g. 110(未激活INIT的電平):發送一個同步消息給系統中的所有本地APIC,把它們的仲裁ID設置成它們的APIC ID。對于這個傳送模式,電平標志必須設為0,觸發模式標志設為1,目標指示應為10(Pentium 4和Intel Xeon處理器中不支持)。
  • ③ D11用來指定接收目標的模式。D11=0時,使用物理目標模式;D11=1時,使用邏輯目標模式。
  • ④ D12提交狀態是只讀位。等于1時,表示上一次發送的IPI消息還沒有被目標CPU接收。
  • ⑤ D14有效電平位。0表示無效電平;1表示有效電平。注意,無效電平可能是高電平或者低電平,有效電平也可能是高電平或者低電平。
  • ⑥ D15觸發模式位。0表示邊沿觸發;1表示電平觸發。
  • ⑦ D19~D18目標指示位。等于00時,表示根據目標ID確定發送目標;等于01時,發送給自己;等于10時,發送給所有CPU;等于11時,發送給所有CPU(自己除外)。
  • ⑧ D64~D56表示消息的目標地址(Message Destination Address, MDA)。目標地址的表示方式包括兩種:物理目標模式和邏輯目標模式。 下面介紹這兩種模式。
    • 平面模式:本地APIC中的邏輯目標寄存器(Logic Destination Register, LDR)的高8位保存的是邏輯APIC標識,如圖28所示。將邏輯APIC標識與MDA相與,如果得到的結果有任何一位等于1,那么這個APIC就接收IPI消息。在平面模式下,由于邏輯APIC標識有8個二進制位,支持最多8個CPU。

image.png
LDR格式

* 集群模式:Pentium CPU支持平面集群模式和層次集群模式,而Pentium 4只支持層次集群模式。在層次集群模式下,在CPU的外部還必須設置專門的集群管理設備,支持最多15個集群,每個集群上最多連接4個APIC,每個集群使用單獨的APIC或系統總線。例9.14 假設三個CPU的logical模式配置為:CPU 1的LDR值為00000001b, CPU 2的LDR值為00010010b, CPU3的LDR值為00000100b,此時DFR的model值為0000b。IO APIC發出一條中斷消息,其Destination Mode為1, Destination field值為00000001b。試分析該中斷消息由哪些CPU接收。解答:三個LAPIC收到該消息后,CPU1、CPU3通過Destination field的高4位判斷出該消息目的地為本簇,再將自身Logical APIC ID的低4位與Destination field低4位進行位與操作,CPU1與結果不為0,故最終CPU1接收該中斷消息,CPU2、CPU3丟棄。
* 當第63~56位為FFH時,消息廣播給所有的APIC。
* 對于Pentium 4和Intel Xeon處理器來說,一個單個目的(本地APIC ID從00H到FEH)或對所有APIC的廣播(APIC ID是FFH)都可能在物理模式下指定。
* 對于P6系列和Pentium處理器來說,一個單個目的是由具有從0H到0EH的本地APIC ID的物理目的傳送模式指定的,允許APIC總線中訪問多達15個本地APIC。對所有本地APIC的廣播,是由0FH指定的。
* a.物理目標模式。每一個本地APIC都有唯一的APIC ID。在ICR寄存器的第63~56位中指定一個APIC ID,消息將發送給與它相同的另一個APIC。
* b.邏輯目標模式。使用邏輯目標模式發送IPI時,目標APIC可以采用平面模式和集群模式。本地APIC中有一個目標格式寄存器(Destination Format Register, DFR),如圖27所示,它的高4位(第31~28位)等于1111B時,表示平面模式;等于0000B時,表示集群模式。

image.png

  • (6)處理中斷 本地APIC接收到系統中斷、處理器間中斷、本地中斷后,按照以下流程進行處理:
  • ① 檢查系統中斷、處理器間中斷消息中的目標地址與本地APIC是否匹配,如果不匹配,則忽略此消息。
  • ② 檢查中斷消息中的提交模式,如果是NMI、SMI、INIT、ExtINT或者SIPI,那么由這個CPU直接處理;否則設置IRR寄存器(共256位)中的相應位。
  • ③ 當有IRR和ISR寄存器中記錄了中斷請求時,按照中斷請求的中斷向量、任務優先權寄存器TPR、處理器優先權寄存器PPR進行優先級判斷,交給某一個CPU處理。
  • ④ 中斷結束。提交模式為固定時,中斷服務程序寫LAPIC的EOI寄存器,將中斷從ISR寄存器中清除,如果是電平觸發,LAPIC向系統總線發送一條消息,表示中斷處理結束。提交模式為NMI、SMI、INIT、ExtINT或者SIPI時,中斷服務程序不需要寫入EOI寄存器。
  • (7)中斷請求寄存器IRR和中斷服務寄存器ISR

中斷請求寄存器IRR共256位,地址為FEE00200H~FEE00270H;中斷服務寄存器ISR也是256位,地址為FEE00100H~FEE00170H。

如果中斷的提交模式為固定方式,中斷請求寄存器IRR記錄了本地APIC已經接收到的,但還沒有指派給某一個CPU的中斷。當CPU可以處理中斷時,IRR中具有最高優先級的中斷(即中斷向量最大)對應的位被置為0,再將ISR中的對應位置為1。ISR中具有最高優先級的中斷被發送給CPU進行處理。

在處理高優先級的中斷時,如果發生了低優先級的中斷,該中斷的IRR位置為1。在高優先級的中斷處理完成后,中斷服務程序寫入EOI寄存器,清除高優先級中斷的ISR位。這時低優先級中斷就會被處理。在處理某個優先級的中斷時,如果發生了相同優先級的中斷,該中斷的IRR位置為1。前一個中斷處理完成后,后面的中斷才會被處理。在處理某個優先級的中斷時,如果發生了更高優先級的中斷,本地APIC可以向CPU發送中斷,前一個中斷被暫停,進入新的中斷服務程序。這就是中斷嵌套。

觸發模式寄存器TMR也是256位。當中斷的IRR位置為1時,邊沿觸發中斷的TMR位清為0,電平觸發中斷的TMR位置為1。

  • (8)優先權 中斷優先權由它的中斷向量號決定,中斷優先權等于中斷向量號除以16,即中斷向量號的高4位,范圍是2~15。注意,中斷向量號0~31由CPU保留。

任務優先權寄存器TPR的地址為FEE00080H,格式如圖29所示。

image.png
任務優先權寄存器TPR

處理器優先權寄存器PPR的地址為FEE000A0H,格式如圖30所示。

image.png
處理器優先權寄存器PPR

中斷優先權大于任務優先權時,中斷才會被處理。

CPU通過設置任務優先權寄存器TPR,禁止低級別的中斷。例如,把TPR中的第7~4位(任務優先權)設為15時,那么所有的外部中斷(除NMI、SMI、INIT、ExtINT等)都會被屏蔽。而任務優先權設為0時,這些外部中斷不被屏蔽。

處理器優先權寄存器不能被程序所修改,是一個只讀寄存器。 它反映了當前CPU正在執行的程序的優先級。PPR的值是當前正在服務的中斷向量和TPR二者之間較高的值。

設ISRV是ISR中被設置為1的最高優先權的中斷向量,ISR中所有位等于0時,ISRV等于0。PPR按照以下公式來確定:

IF  TPR[7∶∶4] ≥ ISRV[7∶∶4]THEN        PPR[7∶∶0]=TPR[7∶∶0]ELSE        PPR[7∶∶4]=ISRV[7∶∶4]; PPR[3∶∶0]=0
  • (9)消息信號中斷

PCI 2.2規范中引入了消息信號中斷MSI(Message Signaled Interrupts)。PCI設備可以用兩種方法向CPU發出中斷請求:

  • ①用設備的一個引腳發送中斷請求信號;
  • ②用MSI向處理器傳送中斷請求。

采用MSI向CPU發送中斷請求時,PCI設備發起一個PCI寫操作,向一個特殊的地址寫入一個特定數據。地址的格式如圖9-31所示,數據的格式如圖32所示。

image.png
MSI地址格式

image.png
MSI數據格式

在地址中,目標ID指定了MSI消息發送給哪一個(組)CPU, RH說明是否要把消息發送給一組中具有最低優先權的CPU, DM則指示采用物理目標模式或者邏輯目標模式。

在數據部分,觸發模式有邊沿觸發和電平觸發兩種,后者又分高電平有效和低電平有效。提交模式分為固定、最低優先級、SMI、NMI、INIT、ExtINT等幾種。

3 IO APIC

IO APIC用來替代傳統的8259中斷控制器,一般集成在ICH芯片組中。

ICHI/O controller hub意思是“輸入/輸出控制器中心”,負責連接PCI總線,IDE設備,I/O設備等,是英特爾的南橋芯片系列名稱。

表7中列出了IO APIC管理下每個中斷源對應的中斷向量。

image.png
表七:每個中斷源對應的中斷向量

和8259相比,IO APIC能支持24個中斷源,不需要中斷應答周期,可以將中斷請求發送給某一個指定的CPU。

IO APIC的中斷優先權由中斷向量來確定,與中斷源(IRQ)無關。 (所以軟件編程的時候這個中斷向量的設置很需要注意,也更加體現了APIC的靈活性)

系統中最多可以擁有8個IO APIC,每一個IO APIC都分別有自己的輸入編碼,加起來一臺PC上會有上百個IRQ可供設備中斷使用。

IO APIC和LAPIC共同起作用,如果系統中沒有IO APIC,那么LAPIC就沒有用處,此時操作系統會使用8259。Intel系統中常用82093AA芯片來作為IO APIC。

  • (1)IO APIC寄存器地址 Intel系統中,IO APIC默認映射到物理地址FEC00000H。IO APIC一共有4個寄存器地址,見表8。

image.png
表八:IO APIC的寄存器

一共有64個32位內部寄存器,其索引為0~63。內部寄存器索引見表9。

image.png
表九:IO APIC內部寄存器

  • (2)重定向表

中斷重定向表中的每一項都有可以被單獨編程,用來指明中斷向量和優先級、目標處理器及選擇處理器的方式。

重定向表中的信息用于把每個外部IRQ信號轉換為一條消息,然后通過APIC總線把消息發送給一個或者多個本地APIC單元。

重定向表的格式如圖33所示。

image.png
表十:重定向表

目標ID確定哪一個(組)CPU處理這個中斷。目標模式等于0時,即物理目標模式,目標ID的第59~56位表示某一個CPU的APIC ID;等于1時,即邏輯目標模式,目標ID的第53~56位與CPU中的邏輯APIC標識匹配,確定目標。

向CPU發送中斷時,擴展目標ID(8位)被放置在地址的第11~4位。地址格式如上圖所示。

屏蔽位等于1時,這個中斷不會向CPU發送。觸發模式分為邊沿觸發(D15=0)和電平觸發(D15=1)兩種,后者又分高電平有效(D13=0)和低電平有效(D13=1)。

在電平觸發時,遠程IRR位有效。等于1時,表示CPU的本地APIC已接受此中斷,收到本地APIC發送的EOI后,將此位清0。相對于本地APIC和CPU核心而言,IO APIC和本地APIC之間的傳遞是遠程的。

提交狀態等于1時,表示中斷消息已產生,但還沒有發送給本地APIC。提交模式分為固定(000B)、最低優先級(001B)、SMI(010B)、NMI(100B)、INIT (101B)、ExtINT(111B)等幾種。

最低優先級表示把這個中斷按照目標ID提交給PPR最低的CPU。重定向表的第7~0位表示該中斷對應的中斷向量號,在表7中列出了某系統中各個IRQ對應的中斷向量號。

以上就是對x86的中斷有了一個簡單的了解,后續我們接著來看看ARM的GIC。

這個名稱的由來,是由于繪制架構圖時所派生出來的稱呼,第一次被提到這名詞時是在1991年采用PCl Local Bus架構時。在IntelPCl規格的創始者視PCI總線為整個PC平臺架構的正中央。北橋芯片將PCl總線主干延伸至北邊,以支持CPU、存儲器或緩存(Cache)、以及其他攸關性能的功能。反之,南橋芯片將PCI總線主干延伸至南邊,并橋接起比較非攸關性能的I/O功能,例如磁盤接口等、音效等。CPU位于架構圖的正北方,它透過較高速的北橋芯片鏈接北邊的系統設備,而北橋則透過較慢速的南橋芯片連接南邊的其他系統設備。雖然現今PC平臺架構已將PCl總線主干取代,換上更快的I/O主干,但“橋”的傳統名稱仍然延續使用。北橋(英語:Northbridge)是基于Intel處理器的個人電腦主板芯片組兩枚芯片中的一枚,北橋用來處理高速信號,例如中央處理器、存儲器、顯卡(PCI Express接口或AGP接口),還有與南橋之間的通信。北橋芯片位置剛好跟南橋芯片位置相反,它是靠近CPU部分,被散熱片覆蓋的大的那塊芯片,主要功能是負責控制、連接和處理CPU與內存、與南橋通信。北橋芯片是主板的關鍵芯片,負責管理二級高速緩存,內存的類型和最大容量都由它決定,所以一般主板命名都是用北橋芯片的型號。有一些北橋會集成內置顯示核心(如Intel GMA),也支持AGPPCl Express接口。集成顯示核心的北橋若偵測到已安裝的PCle/AGP顯卡,會停止其GPU功能,但有些北橋可以允許同時使用集成式顯卡和安裝外加顯卡,作為多顯示輸出。英特爾在第一代Core i7中把存儲器控制器集成到了CPU,北橋的功能只剩下連接高速設備(如顯卡),此時Intel的南橋稱為IOH (Io Controller Hub)。從LGA 1156LGA 2011開始,Intel處理器集成了北橋(存儲器控制器、高速PCl Express控制器和Intel HDGraphics),主板上只剩下南橋,Intel將其稱為平臺路徑控制器(PCH)。

image.png

4、APIC與8259A

APIC全稱是Advanced Programmable Interrupt Controller,高級可編程中斷控制器。

它是在奔騰P54C之后被引入進來的。在現在的計算機它通常由兩個部分組成,分別為LAPIC(Local APIC,本地高級可編程中斷控制器)和IOAPIC(I/O高級可編程中斷控制器)。

LAPIC在CPU中,IOAPIC通常位于南橋

APIC是在PIC (Programmable Interrupt Controller) 的基礎上發展而來的。

在傳統的單處理器的PC-AT 兼容的機器,通常使用8259A雙片級聯組成Legacy中斷控制器(如下圖所示)。一共可以連接15個設備(有一個管腳被用于串聯另一片8259)。PIC的優先級規則比較簡單,0號管腳的優先級最高。

PIC可以通過ICW(Initialization CommandWord)編程設置起始的Vector號。

image.png

PIC在單個CPU的環境下工作的挺好,可是當系統越來越復雜出現了多個CPU的情況,它就沒法很好的工作了。這種情況下所有的中斷都會丟給主8259連接的那個CPU,那么這個CPU就要處理所有的中斷,性能上就會有影響。在一個多處理器的系統,任何一個CPU都應該能夠響應來自任何設備的中斷,這種就是所謂的對稱式多重處理(Symmetric Multiprocessing)

image.png

IOAPIC: IOAPIC的主要作用是中斷的分發。最初有一條專門的APIC總線用于IOAPIC和LAPIC通信,在Pentium4 和Xeon 系列CPU出現后,他們的通信被合并到系統總線中。

image.png

Virtual Wire Mode:虛擬接線模式,該模式主要是為了向前兼容,可以理解為就是PIC。在這種模式下,IOAPIC會把8259A的模擬硬件產生的中斷信號直接送給BSP。

image.png

如上圖所示,每個CPU/Core中都有一個LAPIC。相比較于IOAPIC, LAPIC會更復雜一些,它不僅能夠處理來自IOAPIC的中斷消息,它還可以處理IPI(Inter-Processor Interrupt Messages),NMI,SMI和Init消息。

LAPIC 默認使用基地址FEE00000h開始的4KB空間用來訪問內部寄存器,從Pentium Pro開始引入一個APIC_BASE 的MSR,可以用來設置基地址在任何4KB對齊的64GB內存地址空間。IRR:LAPIC已經收到中斷但是還未提交CPU處理。ISR:CPU已經開始處理中斷,但是尚未完成。TMR(Trigger Mode Register):中斷的觸發模式。EOI軟件寫入表示中斷處理完成。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19404

    瀏覽量

    230782
  • 溫度傳感器
    +關注

    關注

    48

    文章

    2974

    瀏覽量

    156297
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    120939
  • 中斷控制器
    +關注

    關注

    0

    文章

    59

    瀏覽量

    9479
  • DCR
    DCR
    +關注

    關注

    1

    文章

    54

    瀏覽量

    18849
收藏 人收藏

    評論

    相關推薦

    8259A芯片是一種什么類型的芯片?硬件看中斷8259A

    中斷控制過程中,中斷源的識別和優先權的確定可以用硬件排隊電路等實現, **Intel 8259A可編程中斷控制器就是為完成這些任務而設計的一種器件** 。
    的頭像 發表于 08-04 17:17 ?6273次閱讀
    8259A芯片是一種什么類型的芯片?<b class='flag-5'>從</b><b class='flag-5'>硬件</b><b class='flag-5'>看中斷</b><b class='flag-5'>之</b>8259A

    硬件看什么是中斷硬件看中斷8088

    所謂中斷,是指CPU在正常運行程序時,由程序預先安排好的事件,或者由內、外部事件引起CPU中斷正在運行的程序,而轉到為預先安排的事件或內、外部事件服務的程序中去。
    的頭像 發表于 08-04 17:37 ?4884次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>硬件</b>看什么是<b class='flag-5'>中斷</b>?<b class='flag-5'>從</b><b class='flag-5'>硬件</b><b class='flag-5'>看中斷</b><b class='flag-5'>之</b>8088

    干貨!Android藍牙驅動開發經驗

    干貨!Android藍牙驅動開發經驗目錄一 Bluetooth基本概念1二 Android Bluetooth架構12.1 Bluetooth架構圖12.2 Bluetooth代碼層次結構3三
    發表于 02-29 15:53

    如何在linux下查看中斷請求記錄

    linux下查看中斷請求記錄。通過cpu的中斷請求的響應,可以看出cpu都在為哪些設備干活,干的活有多少量等信息。
    發表于 07-23 06:06

    干貨!Linux中斷響應流程

    Linux系統中的中斷響應是怎樣的流程嗎? Linux的中斷響應流程如下 1.硬件觸發中斷外部硬件設備(例如網卡、鍵盤等)向處理器發送
    發表于 08-29 14:57

    Windows環境下硬件中斷的性能分析

    分析了32 位 Windows 系統實現硬件中斷服務的內部機理和系統對中斷信號的響應性能,通過比較多種測試環境下得到的中斷延時,討論了中斷
    發表于 06-27 10:57 ?26次下載

    基于APIC時鐘的嵌入式Linux內核實時化研究

    本文采用APIC時鐘修改的方法對Linux內核進行實時化改造,修改APIC中斷函數,將APIC中斷和8254
    發表于 04-25 09:43 ?936次閱讀
    基于<b class='flag-5'>APIC</b>時鐘的嵌入式Linux內核實時化研究

    一個關于Linux中斷的問題:硬件處理,初始化和中斷處理

    I/O APIC 每個I/O APIC提供24個管腳,能夠和外部設備的中斷線連接,每個管腳都可以通過配RTE(Redirection table entry)配置對應的vector。其功能是:把
    的頭像 發表于 08-09 17:16 ?8341次閱讀
    一個關于Linux<b class='flag-5'>中斷</b>的問題:<b class='flag-5'>硬件</b>處理,初始化和<b class='flag-5'>中斷</b>處理

    linux中斷處理IRQ中斷

    在前一個專題里曾分析過所有IRQ中斷處理流程,經過SAVE_ALL保存硬件環境后,都會進入do_IRQ()進行處理,今天接著分析do_IRQ()處理的相關東西.分為兩部中斷處理程序與軟中斷
    發表于 05-10 10:57 ?2657次閱讀

    實際中斷處理

    中斷處理處理外界發出的信號。中斷信號可能是關于數據讀寫操作的,也可能與外部設備控制有關。Intel處理器只有一個外部中斷引腳INTR,為了使處理器能夠同時接收多個硬件設備發送來的
    發表于 12-17 18:44 ?7次下載
    實際<b class='flag-5'>中斷</b>處理

    STM32FreeRTOS:(一) 中斷配置和臨界段的使用

    STM32FreeRTOS:(一) 中斷配置和臨界段的使用文章目錄STM32FreeRTOS:(一) 中斷配置和臨界段的使用前言 一、stm32的NVIC 分組配置二、FreeRT
    發表于 01-14 15:43 ?3次下載
    STM32<b class='flag-5'>之</b>FreeRTOS:(一) <b class='flag-5'>中斷</b>配置和臨界段的使用

    硬件中斷OB的功能

    硬件中斷 OB 在發生相關硬件事件時執行,可以快速的響應并執行硬件中斷 OB 中的程序(例如立即停止某些關鍵設備)。
    的頭像 發表于 02-12 11:44 ?2583次閱讀

    硬件中斷事件的示例

    根據硬件中斷模塊觸發的示例來說明 S7-1500 CPU 中面向事件的程序執行的功能原理。
    的頭像 發表于 08-29 09:45 ?1245次閱讀
    <b class='flag-5'>硬件</b><b class='flag-5'>中斷</b>事件的示例

    軟件中斷硬件中斷的區別

    的理論知識。 硬件中斷硬件中斷是由某些硬件設備引起的,例如啟動 I/O 的請求、硬件故障或類
    的頭像 發表于 11-07 16:52 ?1153次閱讀
    軟件<b class='flag-5'>中斷</b>與<b class='flag-5'>硬件</b><b class='flag-5'>中斷</b>的區別

    CPU中斷程序:硬件看什么是中斷

    CPU響應中斷轉去執行中斷服務程序前,需要把被中斷程序的現場信息保存起來,以便執行完中斷服務程序后,接著
    發表于 03-26 11:36 ?4137次閱讀
    CPU<b class='flag-5'>中斷</b>程序:<b class='flag-5'>從</b><b class='flag-5'>硬件</b>看什么是<b class='flag-5'>中斷</b>?
    主站蜘蛛池模板: 色悠久久久久综合欧美99 | 涩涩视频在线看 | 中文字幕午夜乱理片 | 美女脱了内裤张开腿让男人爽 | 国产精品免费观看视频播放 | 天堂tv免费tv在线tv香蕉 | 一区二区乱子伦在线播放 | 综合网伊人 | 妹妹我要色 | 国产成人精品电影 | 国产www视频 | 国内精品偷拍在线观看 | 京香在线播放 | www亚洲欲色成人久久精品 | 欧美日韩综合一区 | 亚洲免费无码中文在线 | 亚洲AV综合99一二三四区 | 亚洲成a人不卡在线观看 | 亚洲精品久久久午夜麻豆 | 快穿做妓女好爽H | 最新国自产拍天天更新 | 国产手机在线精品 | 国产精品视频成人 | 乌克兰少妇大胆大BBW | 俄罗斯人与动ZOZ0 | 亚洲精品人成电影网 | 免费看 a一级毛片 免费久久狼人香蕉网 | 色播播电影 | 欧美最猛性xxxxx亚洲精品 | 国产私拍福利精品视频 | 动漫美女和男人下载 | 国产三级精品三级男人的天堂 | 国产99对白在线播放 | 国产精品久久久久久免费字体 | 亚洲国产精品一区二区动图 | 亚洲AV久久无码精品热九九 | 免费在线观看的毛片 | 神马电影院午 夜理论 | 黄瓜视频苹果直接安装 | 热re99久久精品国99热 | 中文免费视频 |