arm中斷保護和恢復 ARM處理器工作模式詳解

2021-10-14 03:47:29 字數 2217 閱讀 6071

一、儲存器格式

arm體系結構將儲存器看做是從零位址開始的位元組的線性組合。從零位元組到三位元組放置第乙個儲存的字(32位)資料,從第四個位元組到第七個位元組放置第二個儲存的字資料,一次排列。作為32位的微處理器,arm體系結構所支援的最大定址空間為4gb。

儲存器格式

指令長度

arm微處理器的指令長度是32位的,也可以為16位(thumb狀態下)。arm微處理器中支援位元組(8位),半字(16位),字(32位)三種資料型別,其中,字需要4位元組對齊,半字需要2位元組對齊。

注:所謂的指令長度是一條完整的指令的長度,而不是單純的mov這3個字母長度。

二、arm體系的cpu有兩種工作狀態

1、arm狀態:處理器執行32位的字對齊的arm指令;

2、thumb狀態:處理器執行16位的、半字對齊的thumb指令。

在程式執行的過程中,可以在兩種狀態之間進行相應的轉換。處理器工作狀態的轉變並不影響處理器的工作模式和相應暫存器中的內容。

cpu上電處於arm狀態。

三、arm體系的cpu有以下7種工作模式

1、使用者模式(usr):用於正常執行程式;

2、快速中斷模式(fiq):用於高速資料傳輸;

3、外部中斷模式(irq):用於通常的中斷處理;

4、管理模式(svc):作業系統使用的保護模式;

5、資料訪問終止模式(abt):當資料或指令預取終止時進入該模式,可用於虛擬儲存以及儲存保護;

6、系統模式(sys):執行具有特權的作業系統任務;

7、未定義指令中止模式(und):當未定義的指令執行時進入該模式,可用於支援硬體。

cpu的模式可以簡單的理解為當前cpu的工作狀態,比如:當前作業系統正在執行使用者程式,那麼當前cpu工作在使用者模式,這時網絡卡上有資料到達,產生中斷訊號,cpu自動切換到一般中斷模式下處理網絡卡資料(普通應用程式沒有許可權直接訪問硬體),處理完網絡卡資料,返回到使用者模式下繼續執行使用者程式。

特權模式

除使用者模式外,其它模式均為特權模式(privileged modes)。arm內部暫存器和一些片內外設在硬體設計上只允許(或者可選為只允許)特權模式下訪問。此外,特權模式可以自由的切換處理器模式,而使用者模式不能直接切換到別的模式。

異常模式

特權模式中除系統(system)模式之外的其他5種模式又統稱為異常模式。它們除了可以通過在特權下的程式切換進入外,也可以由特定的異常進入。比如硬體產生中斷訊號進入中斷異常模式,讀取沒有許可權資料進入中止異常模式,執行未定義指令時進入未定義指令中止異常模式。其中管理模式也稱為超級使用者模式,是為作業系統提供軟中斷的特有模式,正是由於有了軟中斷,使用者程式才可以通過系統呼叫切換到管理模式。

(1)使用者模式

使用者模式是使用者程式的工作模式,它執行在作業系統的使用者態,它沒有許可權去操作其它硬體資源,只能執行處理自己的資料,也不能切換到其它模式下,要想訪問硬體資源或切換到其它模式只能通過軟中斷或產生異常。

(2)系統模式

系統模式是特權模式,不受使用者模式的限制。使用者模式和系統模式共用一套暫存器,作業系統在該模式下可以方便的訪問使用者模式的暫存器,而且作業系統的一些特權任務可以使用這個模式訪問一些受控的資源。

(3)一般中斷模式

一般中斷模式也叫普通中斷模式,用於處理一般的中斷請求,通常在硬體產生中斷訊號之後自動進入該模式,該模式為特權模式,可以自由訪問系統硬體資源。

(4)快速中斷模式

快速中斷模式是相對一般中斷模式而言的,它是用來處理對時間要求比較緊急的中斷請求,主要用於高速資料傳輸及通道處理中。

(5)管理模式

管理模式是cpu上電後預設模式,因此在該模式下主要用來做系統的初始化,軟中斷處理也在該模式下,當使用者模式下的使用者程式請求使用硬體資源時通過軟體中斷進入該模式。

(6)終止模式

中止模式用於支援虛擬記憶體或儲存器保護,當使用者程式訪問非法位址,沒有許可權讀取的記憶體位址時,會進入該模式,linux下程式設計時經常出現的segment fault通常都是在該模式下丟擲返回的。

(7)未定義模式

未定義模式用於支援硬體協處理器的軟體**,cpu在指令的解碼階段不能識別該指令操作

時,會進入未定義模式。

arm中斷保護和恢復 ARM的中斷處理 一

前面的文章介紹了linux的中斷處理機制,而作業系統的中斷處理是和硬體的中斷控制器緊密相關的,本文將以arm這樣乙個具體的處理器為例,講解硬體層面對中斷的支援。arm的中斷控制器被稱為gic generic interrupt controller 最開始的v1版本最多支援8個pe和1020個中斷源...

arm中斷保護和恢復 ARM中斷異常處理的返回

舉個小例子,下面是一段arm彙編 0x3000bl add 0x3004mov r0,0 0x3008mov r1,1 0x300cmov r2,2 area test,code,readonly entry start mov r0,1 mov r1,1 bl add mov r0,0 mov r...

arm中斷保護和恢復 ARM中斷異常處理的返回

舉個小例子,下面是一段arm彙編 位址指令 0x3000 bl add 0x3004 mov r0,0 0x3008 mov r1,1 0x300c mov r2,2 area test,code,readonly entry start mov r0,1 mov r1,1 bl add mov r...