處理器間中斷處理 IPI

2021-09-26 04:43:00 字數 1100 閱讀 4771

處理器間中斷允許乙個cpu向系統其他的cpu傳送中斷訊號,處理器間中斷(ipi)不是通過irq線傳輸的,而是作為訊號直接放在連線所有cpu本地apic的匯流排上。在多處理器系統上,linux定義了下列三種處理器間中斷:

call_function_vector(向量0xfb)

發往所有的cpu,但不包括傳送者,強制這些cpu執行傳送者傳遞過來的函式,相應的中斷處理程式叫做call_function_interrupt(),例如,位址存放在群居變數call_data中來傳遞的函式,可能強制其他所有的cpu都停止,也可能強制它們設定記憶體型別範圍暫存器的內容。通常,這種中斷發往所有的cpu,但通過smp_call_function()執行呼叫函式的cpu除外。

reschedule_vector(向量0xfc)

當乙個cpu接收這種型別的中斷時,相應的處理程式限定自己來應答中斷,當從中斷返回時,所有的重新排程都自動執行。

invalidate_tlb_vector(向量0xfd)

發往所有的cpu,但不包括傳送者,強制它們的轉換後援緩衝器tlb變為無效。相應的處理程式重新整理處理器的某些tlb表項。

處理器間中斷處理程式的組合語言**是由build_interrupt巨集產生的,它儲存暫存器,從棧頂押入向量號減256的值,然後呼叫高階c函式,其名字就是第幾處理程式的名字加字首smp_,例如call_function_vector型別的處理器間中斷的低階處理程式時call_function_interrupt(),它呼叫名為smp_call_function_interrupt()的高階處理程式,每個高階處理程式應答本地apic上的處理器間中斷,然後執行由中斷觸發的特定操作。

linux有一組函式使得發生處理器間中斷變為一件容易的事:

函式說明

send_ipi_all()

傳送乙個ipi到所有cpu,包括傳送者

send_ipi_allbutself()

傳送乙個ipi到所有cpu,不包括傳送者

send_ipi_self()

傳送乙個ipi到傳送者的cpu

send_ipi_mask()

傳送乙個ipi到位掩碼指定的一組cpu

初識處理器 中斷

中斷是一種處理器與外設進行通訊的一種機制,用於通知處理器 處理器並不關心外部事件,但是外設不能 外部有重要的外部事件發生,一般情況下面中斷需要被處理器響應。處理器是怎麼處理中斷呢 需要中斷服務程式 isr 中斷一旦發生 對於軟體工程師而言,中斷服務程式只是乙個 c 函式。但是,不是所有的函式都可以的...

物理處理器與邏輯處理器

記錄解決方案,自己實際處理過,方案可用,在自己的部落格中記錄一下。cpu central processing unit 是 處理單元,本文介紹物理cpu,物理cpu核心,邏輯cpu,以及他們三者之間的關係。乙個物理cpu可以有1個或者多個物理核心,乙個物理核心可以作為1個或者2個邏輯cpu。物理c...

ARM處理器異常與中斷處理 學習總結

今天學習 arm system developer s guide designing and optimizing system software 第9章 異常與中斷處理,總結一下 1.異常處理 q1.異常和中斷嘛關係啊?中斷時異常的一種,中斷兩種 irq,fiq。異常好多種呢?reset,dat...