久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 學習資源 > 講師博文 > ARM處理器7種工作模式

ARM處理器7種工作模式 時間:2023-09-11      來源:華清遠見

 ARM處理器是當前嵌入式領域使用最多的處理器,我們在使用中一定注意處理器的工作模式,下面對ARM處理的工作模式進行描述

一、ARM體系的CPU有以下7種工作模式:

1、用戶模式(Usr):用于正常執行程序;

2、快速中斷模式(FIQ):用于高速數據傳輸;
3、外部中斷模式(IRQ):用于通常的中斷處理;

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

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

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

7、未定義指令中止模式(und):當未定義的指令執行時進入該模式,可用于支持硬件;

二、Arm的工作模式切換有兩種方法:

被動切換:在arm運行的時候產生一些異常或者中斷來自動進行模式切換

 主動切換:通過軟件改變,即軟件設置寄存器來經行arm的模式切換,應為arm的工作模式都是可以通過相應寄存器的賦值來切換的。

Tips:當處理器運行在用戶模式下,某些被保護的系統資源是不能被訪問的。

除用戶模式外,其余6種工作模式都屬于特權模式;

特權模式中除了系統模式以外的其余5種模式稱為異常模式;

大多數程序運行于用戶模式;

進入特權模式是為了處理中斷、異常、或者訪問被保護的系統資源;

三、模式切換

當異常發生,CPU進入相應的異常模式時,以下工作是由CPU自動完成的:

1、在異常模式的R14中保存前一工作模式的下一條即將執行的指令地址;

2、將CPSR的值復制到異常模式的SPSR中;

3、將CPSR的工作模式設為該異常模式對應的工作模式;

4、令PC值等于這個異常模式在異常向量表中的地址,即跳轉去執行異常向量表中的相應指令;

從異常工作模式退回到之前的工作模式時,需要由軟件來完成以下工作:

1、將異常模式的R14減去一個適當的值(4或8)后賦給PC寄存器;

2、將異常模式SPSR的值賦給CPSR;

 早期的ARM核有狀態(ARM或Thumb)切換(通過BX等指令修改CPSR寄存器(當前程序狀態寄存器,存放條件碼標志,中斷禁止位,當前處理器模式以及其他狀態和控制信息)中T的控制位完成程序狀態的切換),現在ARM都只使用Thumb狀態了。所以,我們不在討論狀態切換相關。

 一、ARM七種工作模式及其應用場合(Linux操作系統使用了其中USR和SVC模式、出現異常時還可能通過進入其他模式轉為Linux內核態)

 在CPSR寄存器中設置M[4:0]位,分別對應如下七種模式(注意:用戶模式和系統模式只有對CPSR的讀權限,因此、這兩種模式下不可以通過直接設置CPSR進入其他模式(SWI匯編指令除外)):

 1.用戶模式(USR):用于正常執行程序。在Linux操作系統中,用戶空間進程就是在這種模式下運行。CPSR寄存器M[4:0]設置10000。

  2.系統模式(SYS):運行有特權的操作系統任務。CPSR寄存器M[4:0]設置11011。

 這個模式和用戶模式共用R15-pc(程序計數器,存放下一條指令所在單元的地址)的值,因此不用ARM強制賦值。

ARM進入以下幾種模式后,都需要給R15-PC寄存器重新賦值、也就是開始執行新的指令。

 3.管理模式(SVC):操作系統使用的保護模式(高權限)。在Linux操作系統中,內核空間在這種模式下運行。CPSR寄存器M[4:0]設置10011。

 當ARM剛上電或復位時、進入該模式,并強制PC從0x0000 0000處取指令;當系統軟中斷(如系統調用,調用ARM的SWI匯編指令)時、進入該模式,并強制PC從0x0000 0008處取指令——這也是ARM從用戶模式主動切入管理模式(Linux從用戶態主動進入內核態)的唯一方法。

 當出現異常狀況時,Linux還有可能在如下幾種ARM模式下運行;如硬件中斷、程序問題導致的異常等。

4.快速中斷模式(FIQ):用于高速數據傳輸。CPSR寄存器M[4:0]設置10001。

進入該模式后、ARM強制PC從0x0000 001C處取指令。

5.外部中斷模式(IRQ):用于通常的中斷處理。CPSR寄存器M[4:0]設置10010。

進入該模式后、ARM強制PC從0x0000 0018處取指令。

 6.數據訪問終止模式(ABT):當數據或指令預取終止時進入該模式,可用于虛擬內存及存儲保護。CPSR寄存器M[4:0]設置10111。

 當指令取終止時、進入該模式,并強制PC從0x0000 000C處取指令;當數據取終止時、進入該模式;并強制PC從0x0000 0010處取指令。

 7.未定義指令終止模式(UND):當未定義的指令執行時進入該模式,可用于支持硬件。CPSR寄存器M[4:0]設置11111。

當程序中出現未定義的指令時、進入該模式,并強制PC從0x0000 0004處取指令。

 在非user模式下的其他6中模式,有SVC,FIQ,IRQ,ABT,UND,SYS 都可以修改CPSR寄存器、從而控制ARM工作模式的切換。

 在Linux操作系統中;當CPU處于特權模式(Linux處于內核態)時,可以隨意進入用戶態。而當CPU處于用戶模式(Linux處于用戶態)時,Linux從用戶態切換到內核態(ARM從用戶模式切換到其他特權模式)只有在系統調用和中斷(中斷進入IRQ模式,也可以操作內核)兩種情況下發生,一般程序一開始都是運行于用戶態,當程序需要使用系統資源時,就必須通過調用軟中斷進入內核態。

 每一種工作模式的R13-SP(堆棧指針寄存器,在堆棧操作中使用)都是獨立的。因此,對程序中需要用到的每一種模式都要給SP定義一個堆棧地址。方法是改變狀態寄存器(CPSR)內的狀態位,使處理器切換到不同的狀態,然后給SP賦值。注意:不要切換到User模式進行User模式的堆棧設置,因為進入User模式后就不能再操作CPSR回到別的模式了,可能會對接下去的程序執行造成影響。

 ARM在剛上電或復位后、進入SVC管理模式,并從0x0000 0000開始取指令;bootloader和Linux Kernel都是工作在此模式。

四、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的用戶模式。

 

上一篇:LCD屏的工作原理是什么,主要作用是什么

下一篇:Java設計模式有幾種?自學還是專業學習?

戳我查看嵌入式每月就業風云榜

點我了解華清遠見高校學霸學習秘籍

猜你關心企業是如何評價華清學員的

干貨分享
相關新聞
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2024 北京華清遠見科技發展有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部