armv8处理器有哪些_arm是精简指令集

armv8处理器有哪些_arm是精简指令集ARMv8是ARM版本升级以来最大的一次改变,ARMv8的架构继承以往ARMv7与之前处理器技术的基础,除了现有的16/32bit的Thumb2指令支持外,也向前兼容现有的A32(ARM32bit)指令集,扩充了基于64bit的AArch64架构,除了新增A64(ARM64bit)指令集外,也扩充了现有的A32(ARM32bit)和T32(Thumb232bit)指令集;ARMv8拥有两种…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

ARMv8是ARM版本升级以来最大的一次改变,ARMv8的架构继承以往ARMv7与之前处理器技术的基础,除了现有的16/32bit的Thumb2指令支持外,也向前兼容现有的A32(ARM 32bit)指令集,扩充了基于64bit的AArch64架构,除了新增A64(ARM 64bit)指令集外,也扩充了现有的A32(ARM 32bit)和T32(Thumb2 32bit)指令集;

156305846_1_20190312053002910

ARMv8拥有两种执行模式(two execution modes):

AArch64 :64-bit registers and memory accesses, new instruction set;

AArch32 : backwards compatible with ARMv7-A;

(一)A64新的指令和寄存器固定大小32位操作码,清除基于5位寄存器说明符的解码表;

可以拥有32位或者64位参数;

地址设定为64位,主要针对LP64和LLP64数据模型;

比AArch32拥有更少的条件指令,条件指令有:分支,比较,选择;

没有LDM/STM(用于批量从内存中读取或者写入数据)指令,添加LDP/STP指令来操作以降低复杂性及功耗;

支持先进的SIMD(Single-Instruction,Multiple-Data:单指令多数据)和(FP浮点);

支持加密技术;

可随时访问31个通用的64位寄存器 (X0-X30),没有banked(banked是指一个寄存器不同模式下会对应不同的物理地址)的通用寄存器,堆栈指针(SP),PC不是通用寄存器,附加专用的零寄存器(Xzr);

AArch32状态是使用CPSR来存储当前process执行状态,AArch64定义了一组PSTATE寄存器用以保存PE(Processing Element)状态;

AArch64 – Unbanked Registers:

156305846_2_20190312053003285

左边的通用寄存器用于:32位或者64位的整数运算或者64位的寻址,右边的用于浮点运算;

AArch64 Banked Registers:

156305846_3_20190312053003473

AArch64不在根据之前通过不同模式来区别banked寄存器,而是通过exception level;

下图为AArch32和AArch64通用寄存器对应关系:

156305846_4_20190312053003660

(二)AArch64 Exception Model

AArch64 Exception Model:

156305846_5_20190312053003894

Exception model nomenclature:

156305846_6_2019031205300482

总共分为4 exception levels: EL3-EL0,在这种特权模式下EL0位权限最低模式,也就是用户模式,Monitor(EL3)和Supervisor(EL2),分别用于security扩展和virtualization扩展;;低level向高level切换通过exception的方式转换,有如下exceptions:Interrupts, page faults etc.

SVC for transition to EL1 (system calls)

HVC for transition to EL2 (hypervisor:超级监督者 calls)

SMC for transition to EL3 (secure monitor call)

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. 异常有可能发生任何在exception level,EL1, EL2, and EL3有不同的向量表地址,之前的arm版本只有一个向量表地址;

3. 向量的区分是根据Exception type(synchronous, IRQ, FIQ or System Error)或者Exception origin (same or lower exception level) and register width;

4. Syndrome 寄存器提供了exceptions信息;

AArch32 and AArch64之间切换

156305846_7_20190312053004269

AArch32和AArch64之间的切换只能通过发生异常或者系统Reset来实现,A32 -> T32之间是通过BX指令切换的;

不同level之间的组合:

156305846_8_20190312053004629

AArch32 /AArch64 relationship:Changes between AArch32 and AArch64 occur on exception/exception return only;

Allows AArch32 applications under AArch64 OS Kernel;

Allows AArch32 guest OS under AArch64 Hypervisor;

Allows AArch32 Secure side with AArch64 Non-secure side

(二)AArch64 MMU Support

在ARMv8 64bit出现之前,我们用的都是32位寻址,每个地址单位对应内存一个字节单元(B),所以我们最大的寻址范围为2^32B = 4GB,但是实际当中,内存设备有可能远远大于4GB内存空间,以前是通过LPAE(大物理地址扩展)实现地址的扩展,可以支持最大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以上的存储空间).

156305846_9_20190312053004816

在ARMv8 64bits架构下,会通过EL1的TTBR0 (ttbr0_el1, in /arch/arm64/mm/proc).存储User-Space行程所在的Page Table,与EL1的TTBR1存储Kernel Space所在的Page Table,并会依据Page Size与32/64bits行程而有不同的存储空间配置. 參考如下圖所示:

156305846_10_20190312053004941

由于ARM 64bit Kernel分页大小为4kb和64kb两种,通过设置TASK_SIZE_64 (/arch/arm64/include/asm/memory.h)来设定,当分页大小为4KB的时候,决定TASK_SIZE_64大小的VA_BITS会等于39,也就是2^39大小的Task空间(=512GB),若分页大小为64KB时,则TASK_SIZE_64对应的VA_BITS等于 42,也就是2^42大小的Task空间(=4TB).

156305846_11_2019031205300566

同时kernel空间也根据分页大小来划分内核空间,可以参考下面的图来区分:

156305846_12_20190312053005223

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181309.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 簡單SQL存儲過程實例

    簡單SQL存儲過程實例

    2021年12月3日
    35
  • spring任务调度SchedulerFactoryBean、CronTriggerFactoryBean(简单,明了)[通俗易懂]

    spring任务调度SchedulerFactoryBean、CronTriggerFactoryBean(简单,明了)[通俗易懂]http://img.blog.csdn.net/20160530121730543?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerok,在控制台打印一句话,每隔一秒打印一次: 两步得到上述效果:…

    2022年5月24日
    40
  • python常见的数据类型有哪些?

    python常见的数据类型有哪些?变量用来存储数据,那么大家有没有想过,我们应该让变量占用多大空间,保存什么样的数据呢?在讲解变量的类型之前,我们先来看一个生活中的例子,例如,我们要运送一台电脑,大卡车和小轿车都可以完成,但是,如果使用大卡车运送一台电脑,显然有点小题大做,浪费了大卡车的空间,如图1所示。图一:卡车和轿车运输一台电脑同理,如果使用变量存储数据时,为了更充分利用内存空间,我们可以为变量指定不同的数据类型。Python中常见的数据类型如图2所示图二:Python变量数据类型图二中罗列了Python中常见的数据类型,下

    2022年6月4日
    26
  • Python动态爬虫爬取京东商品评论[通俗易懂]

    Python动态爬虫爬取京东商品评论[通俗易懂]Python动态爬虫爬取京东商品评论1.概述京东商城是Python爬虫初学者试手的经典平台,反爬虫程度较低,但评论采取了动态加载的方式,爬取京东商品评论是学习动态爬虫的一个极佳方法。动态爬虫,即针对动态加载JSON文件网页的爬虫,其原理与静态爬虫没有本质区别,只是不爬取所见的静态目标网页,而是寻找该网页所加载的JSON文件,爬取JSON文件中的内容。2.目标观察观察京东具体商品评论页面:点击商品评价页:发现商品评价翻页的url不改变,可推测出其采用动态加载的方式,同时,会发现直接获取该

    2022年7月26日
    6
  • java定时任务实现的几种方式注解(JAVA定时任务)

    摘要:在开发测试工具的应用后台,经常听到同事说要做个定时任务把做日志处理,或者数据清理,包括做些复杂的业务计算逻辑,在选择定时任务的时候,怎么能够快速实现,并且选择一种更适合自己的方式呢?我这里把定时任务的实现收集整理了一些方法,希望可以帮到刚开始做定时任务的同学,写得不对的地方请指正。一在开发测试工具的应用后台,经常听到同事说要做个定时任务把做日志处理,或者数据清理,…

    2022年4月14日
    775
  • .Net组件程序设计之远程调用(一)

    .Net组件程序设计之远程调用(一)

    2021年8月29日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号