1. 程式人生 > >ARM處理器的7種工作模式--linux作業系統與ARM的工作模式

ARM處理器的7種工作模式--linux作業系統與ARM的工作模式

一、ARM處理器的7種工作模式

  1. 使用者模式(USR):正常程式執行模式,不能直接切換到其他模式
  2. 系統模式SYS):執行作業系統的特權任務,與使用者模式類似,但具有可以直接切換到其他模式等特權
  3. 快中斷模式FIQ):支援高速資料傳輸及通道處理,FIQ異常響應時進入此模式
  4. 中斷模式IRQ):用於通用中斷處理,IRQ異常響應時進入此模式
  5. 管理模式SVC):作業系統保護模式,系統復位和軟體中斷響應時進入此模式(由系統呼叫執行軟中斷SWI命令觸發)
  6. 中止模式ABT):用於支援虛擬記憶體和/或儲存器保護,在ARM7TDMI沒有大用處
  7. 未定義模式UND):支援硬體協處理器的軟體模擬,未定義指令異常響應時進入此模式
   除使用者模式外,其餘6種工作模式都屬於特權模式
    特權模式中除了系統模式以外的其餘5種模式稱為異常模式
    大多數程式運行於使用者模式
    進入特權模式是為了處理中斷、異常、或者訪問被保護的系統資源

    硬體許可權級別:系統模式 > 異常模式 > 使用者模式

二、linux作業系統與ARM工作模式

   首先,ARM開發板在剛上電或者復位後,都會首先進入SVC即管理模式,此時、程式計數器R15-PC會被自動賦值為0x0000 0000,bootloader就是在該模式下,位於0x0000 0000 的NOR FLASH或SRAM中裝載的,因此,開機或重啟後bootloader會被首先執行。

   接著,bootloader引導linux核心,此時,linux核心仍然執行在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的使用者模式。