2011-03-28 103 views
10

我正在閱讀/瞭解ARM體系結構... 我想知道爲什麼有這麼多模式 (FIQ,User,System,Supervisor,IRQ,...)。ARM模式,爲什麼有這麼多?

我的問題是爲什麼我們需要這麼多模式?用戶和系統不夠用嗎?

在此先感謝。

回答

11

這只是一個架構決定。多種模式的一大優點是它們有一些存儲庫。這些額外的寄存器允許你寫更多的不太複雜的異常例程。

如果你只選擇兩個,那麼USR和SYS可能是最好的選擇,但是當你發生異常時會發生什麼?正常的ARM模型將進入異常模式,將解除異常模式的存儲鏈接寄存器設置爲在解決異常後指向想要返回的指令,將處理器狀態保存在異常模式的SPSR寄存器中,然後跳轉到異常向量。 USR和SYS共享他們的所有寄存器 - 使用這種模式,每當您進行中斷時,您都會吹走您的函數返回地址(LR)!

特別是FIQ模式具有比其他異常模式更多的存儲寄存器。這些額外的寄存器符合FIQ的「F」部分 - 它代表「快速」。不需要在軟件中保存和恢復更多的處理器上下文會加快你的中斷處理程序。

5

沒有太多的補充卡爾的答案。不確定你正在討論的ARM處理器的家族/架構,所以我只是假設你正在討論關於ARM7/9/11的問題(FIQ,IRQ等)。我不會列舉每種ARM體系結構變體中每種模式之間的差異。

除了什麼卡爾說,對於不同情況不同模式的其他幾個優點:

  • 例如,在FIQ,你不必分出向右走,你可以只是繼續執行。除了其他例外,你必須馬上分支

  • 不同的模式,你有自然支持單獨的堆棧。如果您是多任務處理(例如RTOS),並且在處於中斷模式時沒有單獨的堆棧,則必須在每個任務堆棧中爲最壞情況的中斷情形內置額外空間

  • 具有不同的模式,某些寄存器(例如CPSR,MMU寄存器等 - 取決於體系結構)是禁止的。與特定說明相同的東西。你不想讓用戶代碼修改特權寄存器,現在呢?