淺談ARM體系CPU的7種工作模式
ARM有37個寄存器,其中31個通用寄存器,6個狀態(tài)寄存器。本文主要討論的是ARM體系的CPU的7種工作模式。
本文引用地址:http://m.butianyuan.cn/article/201807/383595.htm一、存儲器格式(字對齊)
Arm體系結構將存儲器看做是從零地址開始的字節(jié)的線性組合。從零字節(jié)到三字節(jié)放置第一個存儲的字(32位)數據,從第四個字節(jié)到第七個字節(jié)放置第二個存儲的字數據,一次排列。作為32位的微處理器,arm體系結構所支持的最大尋址空間為4GB。
存儲器格式
1、大端格式:高字節(jié)在低地址,低字節(jié)在高地址;
2、小端格式:高字節(jié)在高地址,低字節(jié)在低地址。
指令長度
Arm微處理器的指令長度是32位的,也可以為16位(thumb狀態(tài)下)。Arm微處理器中支持字節(jié)(8位),半字(16位),字(32位)三種數據類型,其中,字需要4字節(jié)對齊,半字需要2字節(jié)對齊。
注:所謂的指令長度是一條完整的指令的長度,而不是單純的mov這3個字母長度。
二、ARM體系的CPU有兩種工作狀態(tài)
1、ARM狀態(tài):處理器執(zhí)行32位的字對齊的ARM指令;
2、Thumb狀態(tài):處理器執(zhí)行16位的、半字對齊的Thumb指令。
在程序運行的過程中,可以在兩種狀態(tài)之間進行相應的轉換。處理器工作狀態(tài)的轉變并不影響處理器的工作模式和相應寄存器中的內容。
CPU上電處于ARM狀態(tài)。
三、ARM體系的CPU有以下7種工作模式
1、用戶模式(Usr):用于正常執(zhí)行程序;
2、快速中斷模式(FIQ):用于高速數據傳輸;
3、外部中斷模式(IRQ):用于通常的中斷處理;
4、管理模式(svc):操作系統(tǒng)使用的保護模式;
5、數據訪問終止模式(abt):當數據或指令預取終止時進入該模式,可用于虛擬存儲以及存儲保護。
6、系統(tǒng)模式(sys):運行具有特權的操作系統(tǒng)任務;
7、未定義指令中止模式(und):當未定義的指令執(zhí)行時進入該模式,可用于支持硬件。
CPU的模式可以簡單的理解為當前CPU的工作狀態(tài),比如:當前操作系統(tǒng)正在執(zhí)行用戶程序,那么當前CPU工作在用戶模式,這時網卡上有數據到達,產生中斷信號,CPU自動切換到一般中斷模式下處理網卡數據(普通應用程序沒有權限直接訪問硬件),處理完網卡數據,返回到用戶模式下繼續(xù)執(zhí)行用戶程序。
特權模式
除用戶模式外,其它模式均為特權模式(Privileged Modes)。ARM內部寄存器和一些片內外設在硬件設計上只允許(或者可選為只允許)特權模式下訪問。此外,特權模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。
異常模式
特權模式中除系統(tǒng)(system)模式之外的其他5種模式又統(tǒng)稱為異常模式。它們除了可以通過在特權下的程序切換進入外,也可以由特定的異常進入。比如硬件產生中斷信號進入中斷異常模式,讀取沒有權限數據進入中止異常模式,執(zhí)行未定義指令時進入未定義指令中止異常模式。其中管理模式也稱為超級用戶模式,是為操作系統(tǒng)提供軟中斷的特有模式,正是由于有了軟中斷,用戶程序才可以通過系統(tǒng)調用切換到管理模式 。
(1)用戶模式
用戶模式是用戶程序的工作模式,它運行在操作系統(tǒng)的用戶態(tài),它沒有權限去操作其它硬件資源,只能執(zhí)行處理自己的數據,也不能切換到其它模式下,要想訪問硬件資源或切換到其它模式只能通過軟中斷或產生異常。
(2)系統(tǒng)模式
系統(tǒng)模式是特權模式,不受用戶模式的限制。用戶模式和系統(tǒng)模式共用一套寄存器,操作系統(tǒng)在該模式下可以方便的訪問用戶模式的寄存器,而且操作系統(tǒng)的一些特權任務可以使用這個模式訪問一些受控的資源。
(3)一般中斷模式
一般中斷模式也叫普通中斷模式,用于處理一般的中斷請求,通常在硬件產生中斷信號之后自動進入該模式,該模式為特權模式,可以自由訪問系統(tǒng)硬件資源。
(4)快速中斷模式
快速中斷模式是相對一般中斷模式而言的,它是用來處理對時間要求比較緊急的中斷請求,主要用于高速數據傳輸及通道處理中。
(5)管理模式
管理模式是CPU上電后默認模式,因此在該模式下主要用來做系統(tǒng)的初始化,軟中斷處理也在該模式下,當用戶模式下的用戶程序請求使用硬件資源時通過軟件中斷進入該模式。
(6)終止模式
中止模式用于支持虛擬內存或存儲器保護,當用戶程序訪問非法地址,沒有權限讀取的內存地址時,會進入該模式,Linux下編程時經常出現的segment fault通常都是在該模式下拋出返回的。
(7)
未定義模式
未定義模式用于支持硬件協(xié)處理器的軟件仿真,CPU在指令的譯碼階段不能識別該指令操作時,會進入未定義模式。
評論