www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > > 21ic電子網(wǎng)
[導(dǎo)讀]來源 :智能軟件研究中心,作者:羅宇哲,直接來源:華為開發(fā)者社區(qū) 聲明:本公眾號轉(zhuǎn)發(fā)僅為傳播相關(guān)技術(shù)知識,不作任何商業(yè)用途,如有疑義請聯(lián)系刪除。 01 ARM匯編指令 操作系統(tǒng)中硬件相關(guān)的部分集中體現(xiàn)在匯編指令和對寄存器的操作中,因此我們對ARM體系結(jié)


最全ARM體系結(jié)構(gòu)知識!(匯編、架構(gòu)、異常級別和安全狀態(tài))

來源 :智能軟件研究中心,作者:羅宇哲,直接來源:華為開發(fā)者社區(qū)
聲明:本公眾號轉(zhuǎn)發(fā)僅為傳播相關(guān)技術(shù)知識,不作任何商業(yè)用途,如有疑義請聯(lián)系刪除。

01
ARM匯編指令


操作系統(tǒng)中硬件相關(guān)的部分集中體現(xiàn)在匯編指令和對寄存器的操作中,因此我們對ARM體系結(jié)構(gòu)的介紹也圍繞ARMv8-A的匯編指令和寄存器來展開。

處理器架構(gòu)是處理器廠商為同一個系列的處理器規(guī)定的一個規(guī)范。ARM架構(gòu)是一種精簡指令集(RISC)架構(gòu),具有以下RISC架構(gòu)特點:

  • 較大的通用寄存器堆。

  • load/store體系結(jié)構(gòu),其中數(shù)據(jù)處理操作僅對寄存器內(nèi)容進行操作,而不是直接對內(nèi)存內(nèi)容。

  • 簡單尋址模式,所有l(wèi)oad/store地址由寄存器內(nèi)容和指令確定。該體系結(jié)構(gòu)定義了處理單元與內(nèi)存(包括緩存)的交互,并包括內(nèi)存地址翻譯系統(tǒng)。它還描述了多個處理單元如何相互作用。面積小、性能強和非常低的功耗是ARM體系結(jié)構(gòu)的關(guān)鍵特性。本小節(jié)主要以ARMv8-A架構(gòu)為例來介紹ARM體系結(jié)構(gòu)的基本特性。ARMv8-A體系結(jié)構(gòu)的一個重要特性是向后兼容,可以支持諸多標(biāo)準(zhǔn)和應(yīng)用場景下的最優(yōu)設(shè)計。ARMv8-A架構(gòu)支持64bit的執(zhí)行模式(AArch64)和32bit的執(zhí)行模式(AArch32),這一模式兼容之前的ARM架構(gòu)。兩種執(zhí)行狀態(tài)都支持SIMD和浮點指令。


最全ARM體系結(jié)構(gòu)知識!(匯編、架構(gòu)、異常級別和安全狀態(tài))

一、AMRv8架構(gòu)概要


ARM體系結(jié)構(gòu)自推出以來已經(jīng)有了顯著的發(fā)展,并且ARM還在繼續(xù)開發(fā)它。到目前為止,已經(jīng)有八個主要版本,由版本號1到8表示。其中前三個版本現(xiàn)在已經(jīng)過時了。

通用名稱AArch64和AArch32描述了64位和32位執(zhí)行狀態(tài)。AArch64是64位執(zhí)行狀態(tài),意味著地址保存在64位寄存器中,并且基本指令集可以使用64位寄存器進行處理。AArch64支持A64指令集。AArch32是32位執(zhí)行狀態(tài),這意味著地址保存在32位寄存器中,并且基本指令集使用32位寄存器進行處理。AArch32支持T32和A32指令集。

ARM支持三種架構(gòu)配置:

  • A系列,面向應(yīng)用場景的架構(gòu)(Application Profile)。該系列支持基于內(nèi)存管理單元(MMU)的虛擬內(nèi)存系統(tǒng)體系結(jié)構(gòu)(VMSA)。它支持A64、A32和T32指令集。

  • R系列,面向?qū)崟r場景的架構(gòu)配置。該系列支持基于內(nèi)存保護單元(MPU)的受保護內(nèi)存系統(tǒng)體系結(jié)構(gòu)(PMSA)。它支持A32和T32指令集。

  • M系列,面向微處理器的架構(gòu)。該系列實現(xiàn)了一個為低延遲中斷處理而設(shè)計的程序員模型(programmers’ model),該模型具有寄存器硬件堆棧和對中斷處理程序的高級語言支持。它支持T32指令集的變種。

    (注:內(nèi)存保護單元(MPU)是ARM中配備的有效保護系統(tǒng)資源的一種硬件,提供了內(nèi)存區(qū)域保護功能。)


最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

二、ARMv8-A指令集


在ARMv8-A中,可能的指令集取決于執(zhí)行狀態(tài):

  1. AArch64:AArch64 state只支持A64指令集。這是一個固定長度的指令集,使用32位指令編碼。

  2. Arch32:AArch32 state支持以下指令集:

  • A32:這是一個固定長度的指令集,使用32位指令編碼。它是與ARMv7 ARM指令集兼容。

  • T32:這是一個可變長度指令集,它同時使用16位和32位指令編碼。它與ARMv7 Thumb?指令集兼容。


ARM指令的基本格式如下[2]:

<Opcode>{<Cond>}<S><Rd>,<Rn> {,<Opcode2>}


其中各個部分的含義為:

  • Opcode:操作碼,也就是助記符,說明指令需要執(zhí)行的操作類型;

  • Cond:指令執(zhí)行條件碼;

  • S:條件碼設(shè)置項,決定本次指令執(zhí)行是否影響PSTATE寄存器相應(yīng)狀態(tài)位值;

  • Rd/Xt:目標(biāo)寄存器,A32指令可以選擇R0-R14,T32指令大部分只能選擇RO-R7,A64指令可以選擇X0-X30;

  • Rn/Xn:第一個操作數(shù)的寄存器,和Rd一樣,不同指令有不同要求;

  • Opcode2:第二個操作數(shù),可以是立即數(shù),寄存器Rm和寄存器移位方式(Rm,#shit);

ARMv8-A指令集的條件碼如下圖所示:

最全ARM體系結(jié)構(gòu)知識!(匯編、架構(gòu)、異常級別和安全狀態(tài))

下面以A64指令集為例簡要介紹ARMv8-A的指令體系。A64指令集中的指令主要分為控制指令、訪存指令和計算指令。控制指令主要包括有條件分支指令、無條件分支指令、異常產(chǎn)生和返回指令、系統(tǒng)寄存器指令、系統(tǒng)指令、提示指令、同步指令和清除獨占訪問標(biāo)志指令。訪存指令主要有Load指令和Store指令,這兩種指令有許多變種。計算指令包含算數(shù)指令、邏輯指令、MOVE指令、移位指令、位擴展指令和SIMD指令等等。以下列出了一些常用的控制指令的名稱與用途。


1. 控制指令:

  • 條件分支指令:

最全ARM體系結(jié)構(gòu)知識!(匯編、架構(gòu)、異常級別和安全狀態(tài))

  • 無條件分支指令: 

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

  • 使用寄存器的無條件分支指令:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

  •  異常產(chǎn)生指令:

最全ARM體系結(jié)構(gòu)知識!(匯編、架構(gòu)、異常級別和安全狀態(tài))

  •  異常返回指令:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

  •  系統(tǒng)寄存器指令:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

  • 同步指令和獨占狀態(tài)清除指令:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

例如:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

2. 訪存指令:

ARMv8訪存指令支持以下尋址模式:

  • 基址加上無符號立即數(shù)的尋址和基址加上有符號立即數(shù)的尋址;

  • 基址加上寄存器偏移值;

  • 基址加上擴展的寄存器偏移;

  • pre-index模式;

  • post-index模式;

  • PC相對尋址模式。


具體情形見下表:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

其中對于A64指令集來說,64bit的基址來自通用寄存器X0-X30或來自棧指針SP,立即數(shù)或寄存器偏移值則是可選的,對尋址方式的解釋如下:

  • 寄存器偏移尋址是指來自64bit基址寄存器的地址加上一個偏移值;

  • Pre-indexed模式是指尋址地址是64bit基址加上一個偏移值,這個計算和將會寫入基址寄存器;

  • Post-indexed模式是指尋址地址是64bit的基址,但之后基址和偏移值的和將會寫入基址寄存器;由此可見pre-indexed和post-indexed的區(qū)別在于使用的地址是先加上偏移值再使用還是先使用再加上偏移值;

  • PC相對尋址是指尋址地址是這條指令64bit的PC值加上一個19bit的有符號字偏移,這個地址在當(dāng)前指令的PC值的 ±1MB范圍內(nèi)并且是4byte對齊的。使用PC相對尋址所load的數(shù)據(jù)大小至少為32bit并且只能用來預(yù)取指令,且PC值不能被其他尋址方式使用。

  • 一個立即數(shù)偏移可以為有符號的,也可以為無符號的,可以為scaled也可以為unscaled。當(dāng)一個立即數(shù)偏移是scaled的時候,它被編碼為傳輸數(shù)據(jù)大小的整數(shù)倍。雖然匯編程序總是使用byte對齊的偏移,但匯編器或反匯編器會做必要的轉(zhuǎn)換工作,因此可用的byte偏移值取決于load/store指令類型和數(shù)據(jù)傳輸?shù)拇笮 ?/span>


下面列出了一些load/store指令:

最全ARM體系結(jié)構(gòu)知識!(匯編、架構(gòu)、異常級別和安全狀態(tài))

例如Load寄存器指令:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

 最全ARM體系結(jié)構(gòu)知識!(匯編、架構(gòu)、異常級別和安全狀態(tài))

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

上表中指令的尋址方式有:

  • 基址加上12bit無符號scaled立即數(shù)偏移尋址;

  • 基址加上9bit有符號unscaled立即數(shù)偏移尋址;

  • 基址加上64bit寄存器偏移,可選為scaled;

  • 基址加上32bit可拓展寄存器偏移,可選為scaled;

  • 有unscaled9bit有符號立即數(shù)偏移的pre-indexed模式;

  • 有unscaled9bit有符號立即數(shù)偏移的post-indexed模式;

  • Load至少32bit數(shù)據(jù)的PC相對尋址模式。

如果被load或store的指令的尋址模式會修改基址寄存器的內(nèi)容,且被load/store寄存器恰好的是基址所在的寄存器,那么硬件的行為可能不確定。

 

3.計算指令:

在操作系統(tǒng)匯編語言中使用的計算指令主要是一些簡單的算數(shù)計算指令,用于對寄存器的move操作和對地址的計算操作,一般計算指令既可以使用立即數(shù)作為操作數(shù),也可以使用寄存器中的數(shù)作為操作數(shù)。下面簡單列舉了一些算數(shù)指令:


使用立即數(shù)的簡單算數(shù)指令:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

例如:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

 使用寄存器的邏輯操作指令:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

例如:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

最全ARM體系結(jié)構(gòu)知識!(匯編、架構(gòu)、異常級別和安全狀態(tài))

其中:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

 寄存器移位指令:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

 例如:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

 

02

ARM架構(gòu)寄存器


在處理器中,寄存器用于保存需要被快速訪問的數(shù)據(jù),在操作系統(tǒng)中需要特別注意的寄存器主要有棧指針寄存器(SP)、連接寄存器(LR)、程序計數(shù)器(PC)以及當(dāng)前程序狀態(tài)寄存器(CPSR)和保存程序狀態(tài)寄存器(SPSR)。本小節(jié)主要以ARMv8-A為例介紹ARM架構(gòu)的寄存器的基本情況。詳情可參見文獻[3],D1.6小節(jié)。


在這一小節(jié)中,我們主要介紹ARMv8架構(gòu)中AArch64執(zhí)行狀態(tài)下的寄存器使用情況。ARM架構(gòu)中的寄存器主要有兩類,一類用于提供系統(tǒng)控制與狀態(tài)報告;另一類用于指令運行和異常處理。我們主要討論第二類。

通用寄存器主要用于基本指令集中的指令運行,通用寄存器共有31個,編號為R0-R31。這些通用寄存器可以被當(dāng)成31個64bit的寄存器,編號為X0-X30;或者被作為31個32bit的寄存器,編號為W0-W30。

在AArch64執(zhí)行狀態(tài)下,除了通用寄存器外,每一個異常級別都會有一個棧指針寄存器(StackPointer Register, SP),棧指針寄存器為SPEL0和SPEL1。異常級別用于區(qū)分指令的執(zhí)行權(quán)限,我們將在本章的第四期介紹。如果處理器實現(xiàn)中包含EL2,那么還有SPEL2。如果處理器實現(xiàn)中包含EL3,那么還有SPEL3。詳情可參考鏈接[5]。

SIMD和浮點寄存器共用一系列寄存器,這些寄存器會用于浮點操作、向量操作和其它SIMD有關(guān)的標(biāo)量操作。SIMD指令是能夠復(fù)制多個操作數(shù)、并把它們打包在大型寄存器的一組指令集[3]。以加法指令為例,單指令單數(shù)據(jù)(SISD)的CPU對加法指令譯碼后,執(zhí)行部件先訪問內(nèi)存,取得第一個操作數(shù);之后再一次訪問內(nèi)存,取得第二個操作數(shù);隨后才能進行求和運算。而在SIMD型的CPU中,指令譯碼后幾個執(zhí)行部件同時訪問內(nèi)存,一次性獲得所有操作數(shù)進行運算。浮點寄存器和SIMD寄存器共包含32個128bit位寬的寄存器,V0-V31。這些寄存器可以作為:

  • 32個雙字(64bit)寄存器,D0-D31。

  • 32個單字(32bit)寄存器,S0-S31。

  • 32個半字(16bit)寄存器,H0-H31。

  • 32個單字(8bit)寄存器,B0-B31。

程序狀態(tài)寄存器(Current Program Status Register,CPSR) 在用戶級編程時用于存儲條件碼。CPSR包含條件碼標(biāo)志,中斷禁止位,當(dāng)前處理器模式以及其他狀態(tài)和控制信息。

保存程序狀態(tài)寄存器(SPSR,Saved Program StatusRegister)用于保存CPSR的狀態(tài),以便異常返回后恢復(fù)異常發(fā)生時的工作狀態(tài)。在A64中,不再使用單一的CPSR寄存器,來保存當(dāng)前處理器狀態(tài),而是用PSTATE來保存處理器狀態(tài),而在A32中依然使用CPSR。有關(guān)PSTATE和CPSR的詳細信息可參考鏈接[4]。A64中SPSR 格式的示意圖如下圖所示:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

其中N、Z、C、V均為條件碼標(biāo)志位。它們的內(nèi)容可被算術(shù)或邏輯運算的結(jié)果所改變,并且可以用于決定某條指令是否被執(zhí)行,其含義如下表所示[8]:

標(biāo)志位

含義

N

當(dāng)兩個有符號整數(shù)運算時:N=1表示運算的結(jié)果為負數(shù);N=0表示運算的結(jié)果為正數(shù)或零。

Z

Z=1表示運算的結(jié)果為零,Z=0表示運算的結(jié)果非零。

C

可以有4種方法設(shè)置C的值:

  • 在加法指令中(包括比較指令CMP),當(dāng)結(jié)果產(chǎn)生了進位,則C=1,表示無符號運算發(fā)生上溢出;其他情況C=0。

  • 在減法指令中(包括減法指令CMP),當(dāng)運算中發(fā)生借位,則C=0,表示無符號運算數(shù)發(fā)生下溢出;其他情況下C=1。

  • 對于包含移位操作的非加減運算指令,C中包含最后一次溢出的位的數(shù)值。

  • 對于其他非加減運算指令,C位的值通常不受影響。

V

對于加減運算指令,當(dāng)操作數(shù)和運算結(jié)果為二進制的補碼表示的帶符號數(shù)時,V=1表示符號為溢出,通常其他指令不影響V位。

 M[3:0]則用來確定異常級別和SP:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

有關(guān)SPSR中各個位的詳細信息可以參考文獻[1] 1.6.4小節(jié)。


連接寄存器LR(R14)的主要作用有兩個:

1. 保存子程序返回地址,用MOVE指令或BX指令可以用于實現(xiàn)返回,如MOV PC、LR或BXLR。若子程序中還需要調(diào)用子程序,則可以寫為:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

第一條指令將LR中的內(nèi)容入棧,最后一條將棧中保存的LR寄存器的內(nèi)容存入PC中用于返回。

2. 當(dāng)異常發(fā)生時,異常模式的LR用于保存異常返回地址,將LR內(nèi)容入??梢蕴幚砬短字袛唷?/span>

PC是程序計數(shù)器,其中保存的是正在被加載的指令,而不是正在被執(zhí)行的指令。例如,若指令長度為4byte,則PC指向當(dāng)前正在被執(zhí)行的指令的地址+8byte的地址。關(guān)于LR和PC的詳細內(nèi)容可參考文獻[6]和[7]。

以下是異常級別EL3中使用的寄存器的例圖:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

ARM架構(gòu)中處理器有不同的運行模式,因此同一個功能的寄存器在不同的運行模式下可能對應(yīng)不同的物理寄存器,這些寄存器被稱為備份寄存器。如SPSR_svc表示svc模式下使用的SPSR寄存器。ARM架構(gòu)中常用的運行模式如下表所示[9]:

處理器模式

描述

用戶模式(User, usr)

正常程序執(zhí)行的模式

快速中斷模式(FIQ, fiq)

用于高速數(shù)據(jù)傳輸和通道處理

外部中斷模式(IRQ, irq)

用于通常的中斷處理

特權(quán)模式(Supervisor, svc)

供操作系統(tǒng)使用的一種保護模式

數(shù)據(jù)訪問中止模式(Abort, abt)

當(dāng)數(shù)據(jù)或指令預(yù)取中止時進入該模式,用于虛擬存儲及存儲保護

未定義指令中止模式(Undefined, und)

當(dāng)執(zhí)行未定義指令時進入該模式,用于支持通過軟件仿真硬件的協(xié)處理器

系統(tǒng)模式(System, sys)

用于運行特權(quán)級的操作系統(tǒng)任務(wù)

ARMv8-A架構(gòu)還有Monitor(mon)工作模式,用于處理器安全狀態(tài)與非安全狀態(tài)的切換,Hypervisor(hyp)模式則用于對虛擬化有關(guān)功能的支持。有關(guān)安全狀態(tài)的詳細內(nèi)容在后續(xù)的文章中會介紹。

 

03
ARM架構(gòu)中的執(zhí)行狀態(tài)


ARMv8-A有兩種執(zhí)行模式,一種是AArch64執(zhí)行模式,另一種是AArch32執(zhí)行模式。執(zhí)行狀態(tài)定義處理單元(Processing Element, PE)的執(zhí)行環(huán)境,包括以下內(nèi)容:

  1. 支持的寄存器寬度

  2. 支持的指令集

  3. 異常模型

  4. 虛擬存儲系統(tǒng)(Virtual Memory System Architecture, VMSA)架構(gòu)

  5. 程序員模型


AArch64為64位執(zhí)行狀態(tài)。對應(yīng)上述內(nèi)容,此執(zhí)行狀態(tài):

  1. 提供31個64位通用寄存器,其中X30用作過程鏈接寄存器(ProcedureLink Register)。

  2. 提供64位程序計數(shù)器(PC)、堆棧指針(SP)和異常鏈接寄存器(ELRs)。

  3. 提供32個128位寄存器以支持SIMD矢量和標(biāo)量浮點運算。

  4. 提供單一指令集A64。

  5. 定義ARMv8異常模型,該模型最多有四個異常級別EL0-EL3,它們提供執(zhí)行權(quán)限層次結(jié)構(gòu)。

  6. 支持64位虛擬尋址。

  7. 定義一系列與PSTATE相關(guān)的寄存器。A64指令集包括能直接操作各種PSTATE寄存器的指令。

  8. 使用后綴命名每個系統(tǒng)寄存器,該后綴指示可以訪問寄存器的最低異常級別。


AArch32為32位執(zhí)行狀態(tài)。對應(yīng)上述內(nèi)容,此執(zhí)行狀態(tài):

  1. 提供13個32位通用寄存器和一個32位PC、一個32位SP寄存器和一個32位鏈接寄存器(Link Register,LR)。鏈接寄存器用作異常鏈接寄存器和過程鏈接寄存器。其中一些寄存器有多個備份寄存器,用于不同的處理器工作模式。我們在上一期提到過,同一個功能的寄存器在不同的處理器運行模式下可能對應(yīng)不同的物理寄存器,這些寄存器被稱為備份寄存器。

  2. 為從Hyp(hypervisor)模式返回的異常提供一個異常鏈接寄存器。

  3. 提供32個64位寄存器,用于對高級SIMD矢量和標(biāo)量浮點計算的支持。

  4. 提供兩個指令集,A32和T32。

  5. 支持基于處理器工作模式的ARMv7-A異常模型,并將其映射到基于異常級別的ARMv8異常模型。

  6. 使用32位虛擬地址。

  7. 使用單個當(dāng)前程序狀態(tài)寄存器(CPSR)保存處理器狀態(tài)。

  8. 在AArch64和AArch32執(zhí)行狀態(tài)之間進行轉(zhuǎn)換稱為內(nèi)部處理(interprocessing)。


04
ARMv8-A架構(gòu)的異常級別和安全狀態(tài)


ARMv8-A有四個異常級別,從EL0到EL3。對于異常級別ELn,整數(shù)n增加表示軟件執(zhí)行的特權(quán)權(quán)限變大了。EL0級別下的執(zhí)行叫非特權(quán)執(zhí)行(unprivileged execution)。EL1主要用于運行操作系統(tǒng)內(nèi)核。EL2可以支持非安全操作的虛擬化。EL3則支持安全狀態(tài)和非安全狀態(tài)之間的轉(zhuǎn)換。安全狀態(tài)與ARM TrustZone技術(shù)有關(guān)[2]。安全狀態(tài)可以運行可信執(zhí)行環(huán)境(TEE, Trusted Execution Environment)及安全應(yīng)用,用于保障隱私數(shù)據(jù)和程序運行環(huán)境的安全性。


ARMv8-A架構(gòu)并未直接指定哪些軟件應(yīng)該運行在哪些異常級別,但是在通常情況下,有如異常級別的使用模型:

1.應(yīng)用程序運行在EL0;

2.操作系統(tǒng)內(nèi)核和相關(guān)功能運行在EL1;

3.Hypervisor[3]運行在EL2;

4.安全世界狀態(tài)和正常世界狀態(tài)的切換在EL3完成。


下圖反映了ARM-v8A架構(gòu)中的執(zhí)行狀態(tài)、安全狀態(tài)和異常級別之間關(guān)系[1]:

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))


從圖中我們可以看出,Hypervisor相關(guān)的支持特性主要是在EL2的非安全狀態(tài)實現(xiàn)的。Hypervisor可以支持虛擬機之間的切換,而虛擬機主要被包含在EL1的非安全狀態(tài)和EL0的非安全狀態(tài)中。一些Guest OS可以運行在EL1狀態(tài)里,每一個Guest OS可以運行在一個虛擬機上。而應(yīng)用則運行在EL0的非安全狀態(tài)中,同時也運行在Guest OS上。



引用

[1]ARM? Architecture Reference ManualARMv8, for ARMv8-A architecture profile**

[2]https://blog.csdn.net/tanli20090506/article/details/71487570

[3]ARM? Architecture Reference ManualARMv8, for ARMv8-A architectureprofile

[4]https://www.cnblogs.com/smartjourneys/p/6845078.html

[5]https://baike.baidu.com/item/SIMD/3412835?fr=aladdin

[6]http://www.lujun.org.cn/?p=1676

[7]https://www.cnblogs.com/pengdonglin137/p/10259971.html

[8]https://blog.csdn.net/layuetian2011/article/details/52039328

[9]https://blog.csdn.net/allan0508/article/details/52624618

[10]https://blog.csdn.net/myarrow/article/details/9701499

[11]《ARM體系結(jié)構(gòu)與編程(第二版)》,杜春雷主編。
[12]ARM? Architecture Reference ManualARMv8, for ARMv8-A architecture profile
[13]ARM? Architecture Reference Manual ARMv8, forARMv8-A architecture profile

[13]https://baike.baidu.com/item/trustzone/15953889?fr=aladdin
[14]https://blog.csdn.net/baidu_23959681/article/details/82732488


-END-

推薦閱讀

【1】安謀中國“星辰”處理器商用

【2】Soitec:今明兩年,F(xiàn)D-SOI應(yīng)用或迎來騰飛拐點

【3】終于整理齊了,電子工程師“設(shè)計錦囊”,你值得擁有!

【4】半導(dǎo)體行業(yè)的人都在關(guān)注這幾個公眾號

最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))

你和大牛工程師之間到底差了啥?
加入技術(shù)交流群,與高手面對面 
添加管理員微信
最全ARM體系結(jié)構(gòu)知識?。▍R編、架構(gòu)、異常級別和安全狀態(tài))
加入“中國電子網(wǎng)微信群”交流

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

21ic電子網(wǎng)

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉