鐵人賽
今天的 title 有回文ㄝ cool~
默認情況下,除非平台具有不同 IPI 機制,否按照 Privileged SPEC ,具有多個 hart 的機器,必須為每個 hart 提供一個記憶體位置,該位置可以進行寫入,以向該 hart 發送 machine level 的 software interrupt (major code 3),因此 machine level 的 IPI 可以發送到任何 hart。
對於 remote hart 上的 supervisor level software interrupt(major code 1),可能存在不同的機制,通常會透過 supervisor mode到 machine mode 進行調用, 將 supervisor level software interrupt 發送到另一個 hart。因此,在 supervisor mode 時, OS(作業系統)會調用特定的 SBI 函數,將 software interrupt 傳遞給另一 hart,使原本 hart 可以向 target hart 發送 IPI。
當 hart 具有 IMSIC 時,可以透過將 message 寫入到 target hart 的 IMSIC,來向 hart 發送 IPI,就像發送 MSI 一樣,與 Privileged 的機制不同。在這種情況下,傳入的 IPI 在顯示上為透過 IMSIC 的 external interrupt 而不是以前的 software interrupt。
這樣 hart 是否會 不知道是 IPI 的傳入呢?
根據 SPEC 的說法,只要在相同的控制軟體上進行操作, target hart 就不應該不知道此次的 external interrupt是因為 IPI 的傳入。
如果 hart 沒有 IMSIC,則使用 Privileged SPEC 方式發送 IPI,即向 target hart 發出 software interrupt signal。如果機器實作 IMSIC 而且不是使用 software interrupt 機制,則 machine level software interrupt mip/mie
的 MSIP和 MSIE 為0。
今日介紹完 IPI,明天繼續介紹 IOMMU(input–output memory management unit)。