小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ARMv8-AArch64簡述

 waston 2019-03-12

ARMv8是ARM版本升級以來最大的一次改變,ARMv8的架構(gòu)繼承以往ARMv7與之前處理器技術(shù)的基礎(chǔ),除了現(xiàn)有的16/32bit的Thumb2指令支持外,也向前兼容現(xiàn)有的A32(ARM 32bit)指令集,擴(kuò)充了基于64bit的AArch64架構(gòu),除了新增A64(ARM 64bit)指令集外,也擴(kuò)充了現(xiàn)有的A32(ARM 32bit)和T32(Thumb2 32bit)指令集;

這里寫圖片描述

ARMv8擁有兩種執(zhí)行模式(two execution modes):
AArch64 :64-bit registers and memory accesses, new instruction set;
AArch32 : backwards compatible with ARMv7-A;



(一)A64新的指令和寄存器

  1. 固定大小32位操作碼,清除基于5位寄存器說明符的解碼表;

  2. 可以擁有32位或者64位參數(shù);

  3. 地址設(shè)定為64位,主要針對LP64和LLP64數(shù)據(jù)模型;

  4. 比AArch32擁有更少的條件指令,條件指令有:分支,比較,選擇;

  5. 沒有LDM/STM(用于批量從內(nèi)存中讀取或者寫入數(shù)據(jù))指令,添加LDP/STP指令來操作以降低復(fù)雜性及功耗;

  6. 支持先進(jìn)的SIMD(Single-Instruction,Multiple-Data:單指令多數(shù)據(jù))和(FP浮點);

  7. 支持加密技術(shù);

  8. 可隨時訪問31個通用的64位寄存器 (X0-X30),沒有banked(banked是指一個寄存器不同模式下會對應(yīng)不同的物理地址)的通用寄存器,堆棧指針(SP),PC不是通用寄存器,附加專用的零寄存器(Xzr);

  9. AArch32狀態(tài)是使用CPSR來存儲當(dāng)前process執(zhí)行狀態(tài),AArch64定義了一組PSTATE寄存器用以保存PE(Processing Element)狀態(tài);

AArch64 – Unbanked Registers:

這里寫圖片描述

左邊的通用寄存器用于:32位或者64位的整數(shù)運算或者64位的尋址,右邊的用于浮點運算;

AArch64 Banked Registers:

這里寫圖片描述

AArch64不在根據(jù)之前通過不同模式來區(qū)別banked寄存器,而是通過exception level;

下圖為AArch32和AArch64通用寄存器對應(yīng)關(guān)系:

這里寫圖片描述



(二)AArch64 Exception Model

AArch64 Exception Model:

這里寫圖片描述

Exception model nomenclature:

這里寫圖片描述

總共分為4 exception levels: EL3-EL0,在這種特權(quán)模式下EL0位權(quán)限最低模式,也就是用戶模式,Monitor(EL3)和Supervisor(EL2),分別用于security擴(kuò)展和virtualization擴(kuò)展;;低level向高level切換通過exception的方式轉(zhuǎn)換,有如下exceptions:

  1. Interrupts, page faults etc.

  2. SVC for transition to EL1 (system calls)

  3. HVC for transition to EL2 (hypervisor:超級監(jiān)督者 calls)

  4. SMC for transition to EL3 (secure monitor call)

  5. Dedicated ELR register for the return address (banked at each EL);

而高level向低level則通過ERET指令;
低level的寄存器位寬不能大于高level:E.g. no 64-bit EL0 with 32-bit EL1;


對異常的處理:

1. Exception Link Register written on exception entry;
2. 異常有可能發(fā)生任何在exception level,EL1, EL2, and EL3有不同的向量表地址,之前的arm版本只有一個向量表地址;
3. 向量的區(qū)分是根據(jù)Exception type(synchronous, IRQ, FIQ or System Error)或者Exception origin (same or lower exception level) and register width;
4. Syndrome 寄存器提供了exceptions信息;

AArch32 and AArch64之間切換

這里寫圖片描述

AArch32和AArch64之間的切換只能通過發(fā)生異?;蛘呦到y(tǒng)Reset來實現(xiàn),A32 -> T32之間是通過BX指令切換的;

不同level之間的組合:

這里寫圖片描述

AArch32 /AArch64 relationship

  1. Changes between AArch32 and AArch64 occur on exception/exception return only;

  2. Allows AArch32 applications under AArch64 OS Kernel;

  3. Allows AArch32 guest OS under AArch64 Hypervisor;

  4. Allows AArch32 Secure side with AArch64 Non-secure side



(二)AArch64 MMU Support

在ARMv8 64bit出現(xiàn)之前,我們用的都是32位尋址,每個地址單位對應(yīng)內(nèi)存一個字節(jié)單元(B),所以我們最大的尋址范圍為2^32B = 4GB,但是實際當(dāng)中,內(nèi)存設(shè)備有可能遠(yuǎn)遠(yuǎn)大于4GB內(nèi)存空間,以前是通過LPAE(大物理地址擴(kuò)展)實現(xiàn)地址的擴(kuò)展,可以支持最大2^40的地址尋址范圍,ARMv8理論上最高可以提供提供了2^64個虛擬地址,但是超過16 Exabyte (2^4 * 2^60)意義并不大,所以選擇跟x86一樣,可以使用最大支持2^48虛擬地址的尋址范圍就足夠;

ARM 32bits下會用TTBR0存儲User-Space行程所在的Page Table (也就是0xC0000000以下的存儲空間),并用TTBR1存儲Kernel Space所在的Page Table (也就是0xC0000000以上的存儲空間).

這里寫圖片描述

在ARMv8 64bits架構(gòu)下,會通過EL1的TTBR0 (ttbr0_el1, in /arch/arm64/mm/proc).存儲User-Space行程所在的Page Table,與EL1的TTBR1存儲Kernel Space所在的Page Table,并會依據(jù)Page Size與32/64bits行程而有不同的存儲空間配置. 參考如下圖所示:

這里寫圖片描述

由于ARM 64bit Kernel分頁大小為4kb和64kb兩種,通過設(shè)置TASK_SIZE_64 (/arch/arm64/include/asm/memory.h)來設(shè)定,當(dāng)分頁大小為4KB的時候,決定TASK_SIZE_64大小的VA_BITS會等于39,也就是2^39大小的Task空間(=512GB),若分頁大小為64KB時,則TASK_SIZE_64對應(yīng)的VA_BITS等于 42,也就是2^42大小的Task空間(=4TB).

這里寫圖片描述

同時kernel空間也根據(jù)分頁大小來劃分內(nèi)核空間,可以參考下面的圖來區(qū)分:
這里寫圖片描述



    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多