# Exceptions ## Exceptions and Interrupts Exceptions 和Interrupts 是指需要改變控制流程的“意外”事件。 Exception:在CPU內部產生的事件。例如,未定義的 opcode 、Overflow、 syscall 等都屬於Exceptions。Exceptions是由於程序執行中出現了某種不正常的狀況而觸發的,需要引起系統的注意並進行相應的處理。 Interrupt:來自外部I/O控制器的事件。這些事件來自於外部設備或其他外部源頭,需要InterruptsCPU正在執行的程序,轉而處理這些事件。例如,鍵盤輸入、網絡數據包到達等都可以引發Interrupts。 在處理Exceptions和Interrupts時,需要平衡處理這些事件的及時性和效率。因為不管是Exceptions還是Interrupts,都需要中止當前正在執行的程序,轉而執行相應的處理程序。而這樣的切換會帶來一定的性能開銷,因此在處理這些事件時需要儘可能地減少對系統性能的影響,這是一個相當具有挑戰性的問題。 ## Handling Exceptions 處理Exceptions的方式在不同的處理器架構中可能會有所不同。在MIPS架構中,Exceptions由系統控制協處理器(CP0)管理。 以下是在MIPS中處理Exceptions的一般步驟: * 保存觸發Exceptions的指令的 PC:當Exceptions發生時,系統會保存正在執行的指令的PC位置。在MIPS中,這個位置被稱為Exceptions PC。 * 保存Exceptions的原因:系統會保存Exceptions發生的原因,這通常由一個特殊的 register 來記錄。在MIPS中,這個 register 被稱為Cause寄存器。根據文檔,我們可以假設這個寄存器是1位的,其中0表示未定義的 opcode ,1表示Overflow等問題。 * 跳轉到Exceptions處理程序:最後,系統會跳轉到預先定義好的Exceptions處理程序,這個程序的地址在MIPS中通常是0x8000 00180。 ## An Alternate Mechanism 另一種處理 Exceptions 和 Interrupts 的機制是Vectored Interrupts 。 在Vectored Interrupts 機制中, Exceptions 或 Interrupts 的處理程序地址是通過 Exceptions 或 Interrupts 的原因來確定的。具體而言,每個可能的 Exceptions 或 Interrupts 原因都對應著一個處理程序地址,這些地址通常被組織成一個 Vector Table。 以下是Vectored Interrupts 機制的一個例子: * 未定義的 opcode :0xC000 0000 * Overflow:0xC000 0020 * 其他 Exceptions 或 Interrupts 原因:0xC000 0040 當系統遇到 Exceptions 或 Interrupts 時,它會根據 Exceptions 或 Interrupts 的原因查找相應的處理程序地址。然後,系統會跳轉到這個地址,開始執行相應的處理程序。 在這種機制下,處理程序可以直接處理 Exceptions 或 Interrupts ,或者它們也可以跳轉到實際的 Exceptions 或 Interrupts 處理程序中進行進一步的處理。這種機制使得系統可以靈活地處理不同的 Exceptions 和 Interrupts ,並根據具體情況選擇適當的處理程序 ## Handler Actions Exceptions 或 Interrupts 處理程序的行動通常包括以下步驟: * 讀取 Exceptions 原因(Cause):首先,處理程序會讀取引發 Exceptions 或 Interrupts 的原因。根據系統架構,可能是從特定的 register 中讀取這些信息,例如在MIPS架構中就是從Cause register 中讀取。 * 轉移到相應的處理程序:根據 Exceptions 原因,系統將轉移到相應的處理程序地址。這可以是通過向量 Interrupts 表(Vector Table)或其他方式來決定。 * 確定所需的操作:處理程序將根據 Exceptions 或 Interrupts 的具體情況確定所需的操作。這可能涉及到採取一些校正措施來恢復程序的正常執行,或者可能需要終止程序並報告錯誤。 * 如果可重新啟動:如果 Exceptions 是可重新啟動的,那麼處理程序將採取一些校正措施來修復問題,然後使用 Exceptions 程序計數器(EPC)來返回到原始程序中繼續執行。 * 否則:如果 Exceptions 無法重新啟動,處理程序將終止程序的執行。它可能會使用EPC、 Exceptions 原因等信息來報告錯誤,以供後續的調試或記錄。 ## Exceptions in a Pipeline 在 Pipeline 處理器中,Exceptions 也是一種 control hazard 的形式。考慮一個在執行階段(EX stage)發生溢出的加法指令: ``` add $1, $2, $1 ``` 當在執行這條指令時發生溢出,系統需要立即處理這個 Exceptions 。為了有效地處理這個 Exceptions ,需要採取以下步驟: * 防止 register 被覆蓋:首先,需要防止在溢出發生時,目標 register (在這個例子中是$1)被覆蓋。這意味著暫停對後續指令的執行。 * 完成之前的指令:任何已經在 Pipeline 中但尚未完成的指令都應該被執行完畢。這包括在加法指令之前的所有指令。 * 清空加法指令和後續指令:由於加法指令及其後續指令可能會被取消,因此 Pipeline 中的這些指令需要被清空。 * 設置Cause和EPC寄存器的值:這些寄存器用於記錄 Exceptions 的原因和發生 Exceptions 時的程序計數器(PC)值。 * 將控制轉移到 Exceptions 處理程序:最後,系統需要將控制轉移到預先定義的 Exceptions 處理程序中,以進行進一步的處理。 * 在某種程度上,處理 Exceptions 與處理 Branch hazard 預測錯誤類似,因為它們都需要進行類似的硬體和流程操作,例如清空 Pipeline 和轉移控制。 ## Instruction-Level Parallelism (ILP) 指令級平行處理(ILP)是指在處理器內同時執行多個指令的能力,以提高整體性能。有幾種技術可用於增加ILP: pipeline : pipeline 將指令的執行分解為多個階段,允許不同指令的不同階段同時進行處理。這減少了執行指令的整體時間。具有較深 pipeline 的處理器,每個階段的任務較少,使時鐘周期縮短,從而可能增加ILP。 Multiple issue :該技術涉及在處理器內複製 pipeline 階段,以創建多個管道。通過每個時鐘周期啟動多個指令,處理器可以實現低於1的CPI(每指令週期數),使使用每週期指令(IPC)作為性能指標更有效。例如,具有4GHz時鐘速度和4路Multiple issue 功能的處理器在理論上可以達到IPC的峰值4,如果每個指令僅需要四分之一的周期完成,則可達到16億指令每秒(BIPS)。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up