1. 前言
ARMv8(當(dāng)前只有A系列,即ARMv8-A)架構(gòu),是ARM公司為滿足新需求而重新設(shè)計(jì)的一個(gè)架構(gòu),是近20年來,ARM架構(gòu)變動(dòng)最大的一次。它引入的Execution State、Exception Level、Security State等新特性,已經(jīng)和我們對(duì)舊的ARM架構(gòu)的認(rèn)知,有很大差距了。
因此,本文從ARMv8-A產(chǎn)生的背景開始,對(duì)它進(jìn)行一個(gè)簡(jiǎn)單的介紹,使大家從整體上,對(duì)ARMv8有一個(gè)簡(jiǎn)單的了解。
2. 背景
有一點(diǎn)是可以確定的,ARM誕生時(shí),對(duì)Intel主導(dǎo)的PC市場(chǎng),沒有(也不敢有)一點(diǎn)點(diǎn)的非分之想。最初的ARMv4(ARM7系列),到最近的ARMv7(Cortex-A,-M,-R系列),都是針對(duì)功耗比較敏感的移動(dòng)設(shè)備的,就性能而言,基于ARM處理器的設(shè)備,始終無法和PC相提并論。
但從ARMv7開始,情況開始有些轉(zhuǎn)變,ARM的市場(chǎng)開始擴(kuò)展到移動(dòng)設(shè)備之外的其它領(lǐng)域,這也是ARMv7劃分為A(Application)、R(Real-time)和M(Microcontroller)三個(gè)系列的原因,其實(shí)質(zhì)就是三個(gè)細(xì)分市場(chǎng),其中的A系列,就是針對(duì)性能要求較高的應(yīng)用。
特別是在Cortex-A9之后,ARM的處理性能有很大的提高,漸漸的吸引了一些PC用戶。因此基于ARM的類PC產(chǎn)品,如平板電腦,開始大量涌現(xiàn)。此時(shí),ARM的處理能力,已經(jīng)有機(jī)會(huì)應(yīng)用于其它領(lǐng)域了,如企業(yè)設(shè)備、服務(wù)器等,當(dāng)然,其優(yōu)勢(shì)依然是低功耗。
與此同時(shí),新的趨勢(shì)正在醞釀,主要包括大內(nèi)存(Large Memory)、虛擬化(Virtualization)和安全(Security)。Virtualization在ARMv7上已經(jīng)有簡(jiǎn)單的硬件實(shí)現(xiàn),Security也有可能基于當(dāng)前架構(gòu)擴(kuò)展,唯有Large memory的需求,有點(diǎn)棘手。
由于處理器性能越來越強(qiáng),運(yùn)行于其上的軟件也來越復(fù)雜,復(fù)雜到單一應(yīng)用對(duì)內(nèi)存的需求可能超出32-bit架構(gòu)所能支持的最大內(nèi)存(4G),這就是Large memory需求的起因。不過,后來的Cortex-A15(ARMv7架構(gòu))通過Large Physical Address Extensions (LPAE) 技術(shù),可以支持高達(dá)40bits的物理地址空間。但受限于32-bit的指令集,虛擬地址空間依舊只有32bits(4G),如果有應(yīng)用需要更大的虛擬內(nèi)存,怎么辦?只能定義一個(gè)新的架構(gòu),使用64-bit的指令集(也即我們常說的ARM64)。
毫無疑問,在現(xiàn)階段,需要超過4G虛擬內(nèi)存的應(yīng)用場(chǎng)景,是非常少的。但ARM還是定義了一個(gè)新的架構(gòu)--ARMv8,為什么呢?下面是ARM的解釋(只有偉大的公司才有偉大的理念?。?/p>
Trends. That’s really what ARM has to look at when defining a new architecture. That is the nature of our business, we need to look a long way forward, and plan.
當(dāng)然,ARMv8并不僅僅是為了解決虛擬地址的問題,它也要解決現(xiàn)有架構(gòu)的一些問題。不過,新的問題又來了:一個(gè)新的架構(gòu)?用戶為什么要使用新的架構(gòu)?因此,ARMv8的定義,必須先滿足如下前提條件:
1)對(duì)上兼容。
2)能解決現(xiàn)存架構(gòu)的已知問題。
3)相比現(xiàn)存架構(gòu),必須具備優(yōu)勢(shì)明顯的新特性,哪怕軟件從來不使用這些新特性。
以上就是ARMv8-a產(chǎn)生的背景,也是ARMv8-a架構(gòu)之所以是“這個(gè)”樣子的直接原因。那么到底是什么樣子呢?我們繼續(xù)介紹。
3. ARMv8-a架構(gòu)簡(jiǎn)介
基于上面的前提條件,ARMv8-a架構(gòu)的主要特性包括:
1)新增一套64-bit的指令集,稱作A64。
2)由于需要向前兼容ARMv7,所以同時(shí)支持現(xiàn)存的32-bit指令集,稱作A32和T32(也即我們熟悉的ARM和Thumb指令集)。
3)定義AArch64和AArch32兩套運(yùn)行環(huán)境(稱作Execution state),分別執(zhí)行64-bit和32-bit指令集。軟件可以在需要的時(shí)候,切換Execution state。
4)AArch64最大的改動(dòng),使用新的概念(exception level),重新解釋了processor mode、privilege level等概念,具體可參考第4章的介紹。
5)在ARMv7 security extension的基礎(chǔ)上,新增security model,支持安全相關(guān)的應(yīng)用需求。
6)在ARMv7 virtualization extension的基礎(chǔ)上,提供完整的virtualization框架,從硬件上支持虛擬化。
4. AArch64 Exception level
Exception level,是ARMv8-a引入的一個(gè)新概念,用于整合之前架構(gòu)中processor mode和privilege level相關(guān)的功能。
4.1 ARMv7之前的實(shí)現(xiàn)
我們知道,以前的ARM架構(gòu),處理器可以工作在多種模式(稱作processor mode)下,包括User、FIQ、IRQ、Abort、Undefined、System等,之所以存在不同的模式,主要有2個(gè)方面的考慮:
1)不同的處理器模式,有不同的硬件訪問權(quán)限,稱作privilege level。
主要有2個(gè)level,privilege和non-privilege。其中只有User模式屬于non-privilege level,其它均是privilege level。
安全起見,大多數(shù)時(shí)候,軟件都運(yùn)行在User mode。一旦需要其它操作,則需要切換到相應(yīng)的privilege模式下。這是最原始、最樸素的安全思想,當(dāng)然,只防君子,不防小人。
2)這些處理器模式,除User模式外,其它模式基本上和各類異常一一對(duì)應(yīng)。而不同的模式,都有一些自己獨(dú)有的寄存器,例如R13(SP)、R14(LR)等等,可以使模式切換過程(也是異常處理過程)更為高效、便利。
4.2 ARMv7-a的實(shí)現(xiàn)
ARMv7-a基本保留了之前的設(shè)計(jì),不同之處,將privilege level命名了,稱作PL0和PL1(也許您猜到了,后來出現(xiàn)了PL2,用于虛擬化擴(kuò)展(Virtualization Extension)。
另外,增加了兩個(gè)模式:Monitor和Supervisor,分別用于security擴(kuò)展和virtualization擴(kuò)展。
4.3 ARMv8-a的實(shí)現(xiàn)
可能ARMv8-a的設(shè)計(jì)者覺得之前的設(shè)計(jì)有些啰嗦,就把processor mode的概念去掉(或者說淡化)了,取而代之的是4個(gè)固定的Exception level,簡(jiǎn)稱EL0-EL3。同時(shí),也淡化了privilege level的概念。Exception level本身就已經(jīng)包好了privilege的信息,即ELn的privilege隨著n的增大而增大。類似地,可以將EL0歸屬于non-privilege level,EL1/2/3屬于privilege level。
這些Exception level的現(xiàn)實(shí)意義是(如下圖,先忽略Secure model有關(guān)的內(nèi)容):
ARMv8-a Exception level有關(guān)的說明如下:
1)首先需要注意的是,AArch64中,已經(jīng)沒有User、SVC、ABT等處理器模式的概念,但ARMv8需要向前兼容,在AArch32中,就把這些處理器模式map到了4個(gè)Exception level。
2)Application位于特權(quán)等級(jí)最低的EL0,Guest OS(Linux kernel、window等)位于EL1,提供虛擬化支持的Hypervisor位于EL2(可以不實(shí)現(xiàn)),提供Security支持的Seurity Monitor位于EL3(可以不實(shí)現(xiàn))。
3)只有在異常發(fā)生時(shí)(或者異常處理返回時(shí)),才能切換Exception level(這也是Exception level的命名原因,為了處理異常)。當(dāng)異常發(fā)生時(shí),有兩種選擇,停留在當(dāng)前的EL,或者跳轉(zhuǎn)到更高的EL,EL不能降級(jí)。同樣,異常處理返回時(shí),也有兩種選擇,停留在當(dāng)前EL,或者調(diào)到更低的EL。
注1:有關(guān)ARMv8-a異常處理的具體細(xì)節(jié),會(huì)在其它文章中描述。
5. security model
ARMv8-a的security模型基本沿用了ARMv7 security extension的思路,主要目的保護(hù)一些安全應(yīng)用的數(shù)據(jù),例如支付等。它不同于privilege level等軟件邏輯上的保護(hù),而是一種物理上的區(qū)隔,即不同security狀態(tài)下,可以訪問的物理內(nèi)存是不同的。
ARMv8-a架構(gòu)有兩個(gè)security state(參考上面圖片),Security和non-Security。主要的功效是物理地址的區(qū)隔,以及一些system control寄存器的訪問控制:
在Security狀態(tài)下,處理器可以訪問所有的Secure physical address space以及Non-secure physical address space;
在Non-security狀態(tài)下,只能訪問Non-secure physical address space,且不能訪問Secure system control resources。
6. virtualization
硬件虛擬化包括指令集虛擬化、異常處理虛擬化、MMU虛擬化、IO虛擬化等多個(gè)議題,比較復(fù)雜,這里先不描述了。
7. 總結(jié)
本文簡(jiǎn)單介紹了ARMv8-a中的一些概念,后續(xù)文章將會(huì)重點(diǎn)關(guān)注異常處理模型、security模型、virtualization模型。
編輯:hfy
-
處理器
+關(guān)注
關(guān)注
68文章
19161瀏覽量
229122 -
ARM
+關(guān)注
關(guān)注
134文章
9046瀏覽量
366815 -
ARMv8
+關(guān)注
關(guān)注
1文章
35瀏覽量
14141 -
虛擬內(nèi)存
+關(guān)注
關(guān)注
0文章
70瀏覽量
8052
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論