arm的7種執行模式

2021-08-27 07:17:23 字數 2239 閱讀 5931

armv4以上版本的cpu任何時刻必定處於如下7種執行模式之一: 

(1) user mode:使用者模式。作業系統的task一般以這種模式執行。user mode是arm唯一的非特權模式,這表示如果cpu處於這種模式下,很多指令將不能夠執行,因此作業系統的資源得以保護。 

(2) system mode:這是v4及其以上版本所引入的特權模式。、 

(3) irq mode:中斷模式。中斷(不包括軟中斷)處理函式在這種模式下執行。 

(4) fiq mode:快速中斷模式。除了多了幾個暫存器外,其他同irq一樣。 

(5) supervisor mode:監視模式。軟中斷(swi)處理函式在這種模式下執行。 

(6) abort mode:所有同記憶體保護相關的異常均在這種模式下執行。 

(7) undefined mode:處理無效指令的異常處理函式在這種模式下執行。 

程式可以通過讀取cpsr的mode域來判斷cpu當前的執行模式。 

如何看待arm的各種模式?要回答這個問題,我們要看不同模式下,有哪些東西不同。歸納來說,有如下兩個方面的不同: 

(1) 物理暫存器不同 

(2) 許可權不同 

如果將user mode作為參考模式,那麼: 

(1) system mode:暫存器一樣,僅僅是許可權不同 

(2) 其他exception mode:暫存器不一樣,許可權也不一樣 

從許可權的角度看,system mode和其他exception mode(fiq,irq,supervisor,abort,undefined)是一樣的,他們之間的區別僅僅是暫存器方面有一些差別。 

從暫存器角度看,我們可以將cpsr中的mode域看作乙個類似於片選的東西,當其值不一樣,所選中的暫存器也不一樣。雖然指令中的暫存器是一樣的,但是經過mode域的片選後,實際就指向不同的物理暫存器了。 

必須要特別注意,system模式和user模式除了許可權不一樣外,其他都一樣,這樣可以讓作業系統自由訪問16個暫存器(包括狀態暫存器)。 

那麼,模式切換是如何進行的呢? 

(1) 執行swi或reset指令。如果在user模式下執行swi指令,cpu就進入supervisor模式。當然,在其它模式下執行swi指令,也會進入supervisor模式,補過一般作業系統不會這麼做。因為除了user模式是非特權模式下,其他模式都屬於特權模式(這說明arm只有兩種執行態,不想dummy的x86,定義了4種執行態)。執行swi一般是為了訪問系統資源,在特權模式下可以訪問所有的系統資源。swi指令一般用來用來為作業系統提供api介面。 

(2) 有外部中斷發生。如果發生了外部中斷,cpu就會進入irq或fiq模式,具體是哪種模式,得看外部的中斷源是接到cpu的那個pin。 

(3)  cpu執行過程中產生異常。最典型的異常是由於mmu保護所引起的記憶體訪問異常,此時cpu會切換到abort模式。如果是無效指令,則會進入undefined模式。 

從上面我們發現,有一種模式是cpu無法自動進入的,這種模式就是system模式。要進入system模式必須由程式設計師自己編寫指令來實現。其實很簡單,在任何特權模式下改變cpsr的mode域為system模式所對應得數字即可。進入system模式一般是為了利用「system 模式」和「user 模式」下的暫存器是一樣的。因此一般作業系統在通過swi進入supervisor模式後,做一些簡單處理後,就進入system模式。 

另外,在任何特權模式下,都可以通過修改cpsr的mode域而進入其他模式。不過需要注意的是,由於修改的cpsr是該模式下的影子cpsr,因此並不是實際的cpsr,所以一般的做法是修改影子cpsr,然後執行乙個movs指令來恢復執行到某個斷點並切換到新模式。 

我們還可以將執行模式按照如下型別劃分: 

(1)  使用者模式:user mode 

(2)  系統模式:system mode 

(3)  異常模式:所有其它5種模式 

為什麼這樣劃分呢?這是由於異常模式同使用者模式和系統模式有乙個不一樣的地方,那就是,當cpu產生中斷或異常而自動切換到相應異常模式後,cpu會根據產生中斷或異常的原因執行相應得中斷或異常向量。這些向量的位置是cpu事先定義好的,目前有兩種選擇: 

(1)   處於記憶體低位址0x00000000~0x0000001c,這種情況被稱之為low vector 

(2)   處於記憶體高低之0xffff0000~0xffff001c,這種情況被稱之為high vector。    

一般的作業系統會在這些異常向量位址處放置一條跳轉指令。至於到底是使用low vector,還是使用high vector,由cpu自己決定,arm規範不做任何限制。

arm的7種執行模式

armv4以上版本的cpu任何時刻必定處於如下7種執行模式之一 1 user mode 使用者模式。作業系統的task一般以這種模式執行。user mode是arm唯一的非特權模式,這表示如果cpu處於這種模式下,很多指令將不能夠執行,因此作業系統的資源得以保護。2 system mode 這是v4...

ARM微處理器支援7種執行模式

arm微處理器支援7種執行模式,分別為 使用者模式 usr arm處理器正常的程式執行狀態 快速中斷模式 fiq 用於高速資料傳輸或通道處理 外部中斷模式 irq 用於通用的中斷處理 管理模式 svc 作業系統使用的保護模式 資料訪問終止模式 abt 當資料或指令預取終止時進入該模式,可用於虛擬儲存...

Linux7種執行模式

1 在超級許可權下 vim etc inittab 2 檔案內容模式的理解 0 代表 關機模式 此模式 linux是關機狀態 1 代表 單使用者模式 例如root的密碼忘記了,可以在該模式下完成密碼的找回 2 沒有nfs網路共享的多使用者模式 nfs network file system 3 代表...