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)處理函式在這種模式下執行。
(7) undefined mode:處理無效指令的異常處理函式在這種模式下執行。
程式可以通過讀取cpsr的mode域來判斷cpu當前的執行模式。
如何看待arm的各種模式?要回答這個問題,我們要看不同模式下,有哪些東西不同。歸納來說,有如下兩個方面的不同:
(1) 物理暫存器不同
(2) 許可權不同
(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 代表...