- 用戶模式(USR):正常程序執行模式,不能直接切換到其他模式
- 系統模式(SYS):運行操作系統的特權任務,與用戶模式類似,但具有可以直接切換到其他模式等特權
- 快中斷模式(FIQ):支持高速數據傳輸及通道處理,FIQ異常響應時進入此模式
- 中斷模式(IRQ):用於通用中斷處理,IRQ異常響應時進入此模式
- 管理模式(SVC):操作系統保護模式,系統復位和軟件中斷響應時進入此模式(由系統調用執行軟中斷SWI命令觸發)
- 中止模式(ABT):用於支持虛擬內存和/或存儲器保護,在ARM7TDMI沒有大用處
- 未定義模式(UND):支持硬件協處理器的軟件仿真,未定義指令異常響應時進入此模式
-
表3-1 ARM處理器工作模式
處理器工作模式
特權模式
異常模式
說明
用戶(user)模式
用戶程序運行模式
系統(system)模式
該組模式下可以任意訪問系統資源
運行特權級的操作系統任務
一般中斷(IRQ)模式
通常由系統異常狀態切換進該組模式
普通中斷模式
快速中斷(FIQ)模式
快速中斷模式
管理(supervisor)模式
提供操作系統使用的一種保護模式,swi命令狀態
中止(abort)模式
虛擬內存管理和內存數據訪問保護
未定義指令終止(undefined)模式
支持通過軟件仿真硬件的協處理
CPU的模式可以簡單的理解為當前CPU的工作狀態,比如:當前操作系統正在執行用戶程序,那么當前CPU工作在用戶模式,這時網卡上有數據到達,產生中斷信號,CPU自動切換到一般中斷模式下處理網卡數據(普通應用程序沒有權限直接訪問硬件),處理完網卡數據,返回到用戶模式下繼續執行用戶程序。
特權模式
除用戶模式外,其它模式均為特權模式(Privileged Modes)。ARM 內部寄存器 和一些 片內外設 在硬件設計上只允許(或者可選為只允許)特權模式下訪問。此外,特權模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。
異常模式
特權模式中除系統(system)模式之外的其他5種模式又統稱為異常模式。它們除了可以通過在特權下的程序切換進入外,也可以由特定的異常進入。比如硬件產生中斷信號進入中斷異常模式,讀取沒有權限數據進入中止異常模式,執行未定義指令時進入未定義指令中止異常模式。其中管理模式也稱為超級用戶模式,是為操作系統提供軟中斷的特有模式,正是由於有了軟中斷,用戶程序才可以通過系統調用切換到管理模式
7種工作模式介紹
(1)用戶模式:
用戶模式是用戶程序的工作模式,它運行在操作系統的用戶態,它沒有權限去操作其它硬件資源,只能執行處理自己的數據,也不能切換到其它模式下,要想訪問硬件資源或切換到其它模式只能通過軟中斷或產生異常。
(2)系統模式:
系統模式是特權模式,不受用戶模式的限制。用戶模式和系統模式共用一套寄存器,操作系統在該模式下可以方便的訪問用戶模式的寄存器,而且操作系統的一些特權任務可以使用這個模式訪問一些受控的資源。
說明:用戶模式與系統模式兩者使用相同的寄存器,都沒有SPSR(Saved Program Statement Register,已保存程序狀態寄存器),但系統模式比用戶模式有更高的權限,可以訪問所有系統資源。
(3)一般中斷模式:
一般中斷模式也叫普通中斷模式,用於處理一般的中斷請求,通常在硬件產生中斷信號之后自動進入該模式,該模式為特權模式,可以自由訪問系統硬件資源。
(4)快速中斷模式:
快速中斷模式是相對一般中斷模式而言的,它是用來處理對時間要求比較緊急的中斷請求,主要用於高速數據傳輸及通道處理中。
(5)管理模式(Supervisor,SVC) :
管理模式是CPU上電后默認模式,因此在該模式下主要用來做系統的初始化,軟中斷處理也在該模式下。當用戶模式下的用戶程序請求使用硬件資源時,通過軟件中斷進入該模式。
說明:系統復位或開機、軟中斷時進入到SVC模式下。
(6)終止模式:
中止模式用於支持虛擬內存或存儲器保護,當用戶程序訪問非法地址,沒有權限讀取的內存地址時,會進入該模式,linux下編程時經常出現的segment fault通常都是在該模式下拋出返回的。
(7)未定義模式:
未定義模式用於支持硬件協處理器的軟件仿真,CPU在指令的譯碼階段不能識別該指令操作時,會進入未定義模式。
說明:
1、用戶模式外,其它6種模式稱為特權模式。所謂特權模式,即具有如下權利:
a.MRS(把狀態寄存器的內容放到通用寄存器);
b.MSR(把通用寄存器的內容放到狀態寄存器中)。
由於狀態寄存器中的內容不能夠改變,因此要先把內容復制到通用寄存器中,然后修改通用寄存器中的內容,再把通用寄存器中的內容復制給狀態寄存器中,即可完成“修改狀態寄存器”的任務。
2、剩下的六種模式中除去系統模式外,統稱為異常模式。
特權模式中除了系統模式以外的其余5種模式稱為異常模式
大多數程序運行於用戶模式
進入特權模式是為了處理中斷、異常、或者訪問被保護的系統資源

- 大端格式:高字節在低地址,低字節在高地址
- 小端格式:高字節在高地址,低字節在低地址
- ARM狀態
- THumb狀態
接着,bootloader引導Linux內核,此時、Linux內核一樣運行在ARM的SVC即管理模式下;當內核啟動完畢、准備進入用戶態init進程時,內核將ARM的當前程序狀態CPSR寄存器M[4:0]設置為10000、進而用戶態程序只能運行在ARM的用戶模式。
由於ARM用戶模式下對資源的訪問受限,因此、可以達到保護Linux操作系統內核的目的。
需要強調的是:Linux內核態是從ARM的SVC即管理模式下啟動的,但在某些情況下、如:硬件中斷、程序異常(被動)等情況下進入ARM的其他特權模式,這時仍然可以進入內核態(因為就是可以操作內核了);同樣,Linux用戶態是從ARM用戶模式啟動的,但當進入ARM系統模式時、仍然可以操作Linux用戶態程序(進入用戶態,如init進程的啟動過程)。
即:Linux內核從ARM的SVC模式下啟動,但內核態不僅僅指ARM的SVC模式(還包括可以訪問內核空間的所有ARM模式);Linux用戶程序從ARM的用戶模式啟動,但用戶態不僅僅指ARM的用戶模式