匯流排錯誤

本页使用了标题或全文手工转换,现处于澳门繁体模式
求聞百科,共筆求聞
於 2022年10月18日 (二) 09:40 由 初尘對話 | 貢獻 所做的修訂
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)

電腦領域,匯流排錯誤bus error)是一種硬件故障,為通知作業系統一個行程正嘗試存取CPU無法存取的實體位址,即一個無效的地址匯流排地址,它由此得名。在現代的大多數架構中,這比記憶體區段錯誤(段錯誤)更罕見,而那主要由於記憶體存取衝突所造成:即邏輯地址或權限的問題。

POSIX相容平台上,匯流排錯誤通常導致傳送SIGBUS訊號到導致錯誤的行程。SIGBUS也可能因電腦檢測到的任何常規裝置故障引發。

原因

匯流排錯誤有至少三種主要原因:

不存在的地址

軟件令CPU讀寫特定的物理記憶體地址時,CPU會將這個實體記憶體地址填入地址匯流排,並等待所有其他連接着CPU的硬件來認領並響應這個請求。當沒有任何硬件響應CPU時,CPU會觸發一個異常,表示整個電腦系統都無法辨識上述請求的實體記憶體地址。需要注意的是,這裏僅涉及到物理記憶體地址。如果存取一個未定義的虛擬記憶體地址,一般會產生一個段錯誤而不是匯流排錯誤,儘管對於MMU與CPU分離的電腦來說,CPU無法區分這兩種情況。

未對齊的存取

分頁錯誤

不存在段(x86)

x86上存在一種較舊的稱為x86記憶體區段的記憶體管理機制。

如果應用程式使用不存在段的選擇器載入段暫存器(在POSIX相容的作業系統下只能使用匯編語言完成),則會生成異常。

參考資料