ARM體系架構


一、ARM處理器簡介及RISC特點
ARM處理器簡介
ARM(Advanced RISC Machines)是一個32位RISC(精簡指令集)處理器架構,ARM處理器則是ARM架構下的微處理器。ARM處理器廣泛的使用在許多嵌入式系統。ARM處理器的特點有指令長度固定,執行效率高,低成本等。

RISC設計主要特點
1、指令集——RISC減少了指令集的種類,通常一個周期一條指令,采用固定長度的指令格式,編譯器或程序員通過幾條指令完成一個復雜的操作。而CISC指令集的指令長度通常不固定。

2、流水線——RISC采用單周期指令,且指令長度固定,便於流水線操作執行。

3、寄存器——RISC的處理器擁有更多的通用寄存器,寄存器操作較多。例如ARM處理器具有37個寄存器。

4、Load/Store結構——使用加載/存儲指令批量從內存中讀寫數據,提高數據的傳輸效率。

5、尋址方式簡化,指令長度固定,指令格式和尋址方式種類減少。

二、數據大小和指令集

用於ARM時:
  半字(Halfword)表示16位(兩個字節)
  字(Word)表示32位(四個字節)
  雙字Doubleword表示64位(8字節)
大多數ARM實現兩個指令集
  32位ARM指令集
  16位Thumb指令集
最新的ARM內核引入了新的指令集Thumb-2
  提供32位和16位指令的混合
  保持代碼密度,增加靈活性
Jazelle-DBX內核也可以執行Java字節碼

 

三、ARM處理器存儲格式

32位的微處理器,ARM體系結構所支持的最大尋址空間為4GB,空間划分如下;

用戶空間(0—3G),這段空間映射到物理內存的高端內存

內核空間(3G—4G),這段空間映射到低端內存,這段空間又分為以下四部分,分別為

(a)直接映射區(0—896M):這段虛擬地址空間和低端內存地址存在線性的地址關系即虛擬地址3G+X=物理地址X

(b)動態映射區(896—1016M):這段 空間具體映射到物理內存的什么位置不確定,該區域的地址由內核中的vmalloc來實現  分配,其特點是虛擬地址空間連續,但是物理地址空間不一定連續。vmalloc函數返回的是虛擬地址,但是其映射的物理地址有可能在高端內存,也有可能在低端內存。

(c)永久內存映射區(pkmap1016—1020M):使用kmap函數將高端內存的地址映射到這部分區域,這樣就可以通過這個 虛擬地址來訪問高端內存的地址。通過這4M的窗口可以重復映射所有的高端內存。

(d)固定映射區:(1020—1024M):這4M的地址是有特定用途的固定地址,這4M的區域映射的物理內存作為ACPI電源管理等寄存器的地址。

ARM64架構處理器采用48位物理尋址,最大可以支持256T的地址空間,對於目前的應用來說已經足夠了。但是虛擬地址依然采用64,虛擬地址遠遠大於物理地址。所以在處理器架構設計上,把虛擬地址空間划分為三部分,分別為用戶空間,非規范區和內核空間,其中內核空間和用戶空間每個部分最大支持256T的訪問。

用戶空間:(0x0000_0000_0000_0000——0x0000_FFFF_FFFF_FFFF)256T

內核空間:(0xFFFF_0000_0000_0000——0xFFFF_FFFF_FFFF_FFFF)256T

其余部分被稱為非規范區域。

內核空間由做了詳細的划分,分為以下部分:

(a)Vmalloc區域:0xFFFF_0000_0000_0000——0xFFFF_7BFF_BFFF_0000(126974G)

(b)Vmemmap區域:0xFFFF_7BFF_C000_0000——0xFFFF_7FFF_C000_0000(4096G)

(c)PCI I/O區域:0xFFFF_7FFF_AE00_0000——0xFFFF_7FFF_BE00_0000(16M)

(d)Moudules區域:0xFFFF_7FFF_C000_0000——0xFFFF_8000_0000_0000(64M)

(e)Normal memory線性映射區:0xFFFF_8000_0000_0000——0xFFFF_FFFF_FFFF_FFFF(128T)

ARM體系結構可以用兩種方法存儲字數據,分別為大端模式和小端模式。

大端模式(高地高低):字的高字節存儲在低地址字節單元中,字的低字節存儲在高地址字節單元中。

小端模式(高高低低):字的高字節存儲在高地址字節單元中,字的低字節存儲在低地址字節單元中。

四、內核的工作模式:

ARM有七種基本操作模式:
每種模式都可以訪問自己的堆棧和不同的寄存器子集,某些操作只能在特權模式下執行

1、用戶模式(user):ARM正常程序執行模式,大多數應用程序/操作系統的模式

2、快速中斷模式(FIQ):高優先級的中斷產生會進入該種模式,用於高速通道傳輸;

3、外部中斷模式(IRQ):低優先級中斷產生會進入該模式,用於普通的中斷處理;

4、特權模式(SVC):CPU復位和軟中斷SWI指令會進入該模式;

5、數據訪問中止模式(Abort):當內存訪問沖突時會進入該模式;

6、系統模式(System): 用於運行特權級操作系統任務;

7、監控模式(Monitor):cortex-a8以上cpu特有的模式,主要用於安全方面;

8、未定義指令中止模式(Undefined):當未定義的指令執行時進入該模式,可用於支持硬件協處理器的軟件仿真。

用戶模式:
  應用程序不能夠訪問受操作系統保護的系統資源。
  應用程序不能進行處理器模式的切換。
系統模式
  不屬於異常模式,不是通過異常進入的。
  系統模式屬於特權模式,可以訪問所有的系統資源,也可以直接進行模式的切換。
  主要供操作系統使用。
特權模式:
  系統復位后進入管理模式,運行系統初始化程序,如中斷允許/禁止,完成各模式的堆棧設置主時鍾設置,SDRAM配置等。
  當執行軟件中斷指令SWI時(比如開啟一個新的進程),進入管理模式 。

異常模式:除用戶模式和系統模式外的其他5種處理器模式
以各自的中斷或異常方式進入,並且處理各自的中斷或異常。
特權模式:除用戶模式外的其他6種處理器模式
特權程序可以訪問所有的系統資源,也可以任意的進行處理器模式的切換。

五、寄存器

(1)ARM Cortex-A8處理器有40個32位長的寄存器:

    a、32個通用寄存器

    b、7個狀態寄存器:1個CPSR(當前程序狀態寄存器)

                                       6個SPSR(備份程序狀態寄存器)

    c、1個PC(程序計數器)

(2)通用寄存器包括R0-R15,可以分為3類:

A、未分組寄存器R0 – R7:

  在所有運行模式下,未分組寄存器都指向同一個物理寄存器,他們未被系統用作特殊的用途。因此在中斷或異常

處理進行異常模式轉換時,由於不同的處理器運行模式均使用相同的物理寄存器,所以可能造成寄存器中數據的破壞。

B、分組寄存器R8 – R14:

  對於分組寄存器,他們每次所訪問的物理寄存器都與當前的處理器運行模式相關。

  R13常用作存放堆棧指針,用戶也可以使用其他寄存器存放堆棧指針,稱為SP;

  R14稱為鏈接寄存器(LR),當執行子程序時,R14可得到R15(PC)的備份,執行完子程序后,又將R14的值

  復制回PC,即使用R14保存返回地址。

C、程序計數器PC(R15):

  寄存器R15用作程序計數器(PC),在ARM狀態下,位[1:0]為0,位[31:2]用於保存PC;在Thumb狀態下,位[0]為0,

  位[31:1]用於保存PC。對於ARM指令集而言,PC總是指向當前指令的下兩條指令的地址,即PC的值為當前指令的

  地址值加8個字節。

(4)程序狀態寄存器:

  CPSR(Current Program Status Register,當前程序狀態寄存器),CPSR可在任何運行模式下被訪問,它包括

條件標志位、中斷禁止位、當前處理器模式標志位以及其他一些相關的控制和狀態位。包含以下內容:

ALU狀態標志的備份;
當前的處理模式
中斷使能標志;
設置處理的狀態;
  每一種運行模式下都有一個專用的物理狀態寄存器,稱為SPSR(Saved Program Status Register,備份的程序

狀態寄存器),當異常發生時,SPSR用於保存當前CPSR的值,從異常退出時則可由SPSR來恢復CPSR。

由於用戶模式和系統模式不屬於異常模式,這兩種狀態下沒有SPSR,因此在這兩種狀態下訪問SPSR,結果是未知的。

 

六、異常中斷

1、硬件中斷&軟件中斷:

  硬件中斷是隨機的,不可預測的

  軟件中斷是事先安排的(如workQueue、task)

2、ARM處理器有七種類型的異常::

  (1)復位異常(Reset):處理器在工作時, 突然按下重啟鍵, 就會觸發該異常;

  (2)數據異常(Data Abort):讀取數據失敗;

  (3)快速中斷異常(FIQ):快速中斷要比普通中斷響應速度要快一些;

  (4)外部中斷異常(IRQ):普通中斷;

  (5)預取異常(Prefetch Abort):預取指令失敗, ARM 在執行指令的過程中, 要先去預取指令准備執行,

           如果預取指令失敗, 就會產生該異常;

  (6)軟中斷異常(SWI):軟件中需要去打斷處理器工作, 可以使用軟中斷來執行 ;

  (7)未定義指令異常(Undefined Instruction):處理器無法識別指令的異常, 處理器執行的指令是有規范的,

           如果嘗試執行不符合要求的指令, 就會進入到該異常指令對應的地址中;

  當異常發生時,分組寄存器R14和SPSR用於保存處理器狀態,

  異常返回時,SPSR內容恢復到SPSR,鏈接寄存器R14的內容恢復到程序計數器PC。

  下圖中每種異常對應一種內核的工作模式,當然每種異常產生,內核都會進入特定的工作模式;

  

3、異常處理流程:

(1)中斷響應所做的工作:

  A、保存短點:保存下一將要執行的指令的地址,也就是把這個地址送入堆棧;

  B、尋找中斷入口:根據不同的中斷源產生的中斷,查找不同的入口地址;

  C、執行中斷處理程序;

  D、中斷返回:執行完中斷指令后,就從中斷返回到主程序繼續執行;

(2)異常向量表

  每一個異常發生時,總是從異常向量表開始跳轉,所謂的異常向量表,是指由7個異常向量及其處理函數跳轉

關系組成的表:

   0x00000000: b reset

   0x00000004: ldr  pc, _undefined_instruction

   0x00000008: ldr pc, _software_interrupt

   0x00000008: ldr pc, _software_interrupt

   0x0000000c: ldr pc, _prefetch_abort

   0x00000010: ldr pc, _data_abort

   0x00000014: ldr pc, _not_used   //保留

   0x00000018: ldr pc, _irq

   0x0000001c: ldr pc, _fiq

(3)當一個ARM異常返回時,需要完成如下任務:

    通用寄存器的恢復;

    狀態寄存器的恢復;

    PC指針的恢復;

 
參考:https://blog.csdn.net/frank_zyp/article/details/84646051
https://blog.csdn.net/chengtong222/article/details/64440661



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM