苏州网站排名优化系统网站建设方案机构

当前位置: 首页 > news >正文

苏州网站排名优化系统,网站建设方案机构,搜索引擎优化特点,东莞志豪建设公司网站1.当发生异常时#xff0c;异常级别可以增加或保持不变#xff0c;永远无法通过异常来转移到较低的权限级别。从异常返回时#xff0c;异常级别可能会降低或保持不变#xff0c;永远无法通过从异常返回来移动到更高的权限级别。EL0级不进行异常处理#xff0c;异常必须在比…1.当发生异常时异常级别可以增加或保持不变永远无法通过异常来转移到较低的权限级别。从异常返回时异常级别可能会降低或保持不变永远无法通过从异常返回来移动到更高的权限级别。EL0级不进行异常处理异常必须在比EL0更高的异常级别处理。 2.ARM A-profile处理器即A系列的虚拟内存系统通过内存管理单元MMU管理内存访问权限。MMU使用转换表将虚拟地址映射到物理地址并设置内存区域的属性和访问权限包括读/写权限。访问权限分为特权和非特权访问特权访问由高异常级别如EL1、EL2、EL3控制通常用于操作系统内核或虚拟机管理程序而非特权访问用于低级别的用户模式EL0。当应用程序在EL0执行时内存访问权限会根据非特权访问权限进行检查确保其不能访问超出权限的区域。而EL1、EL2、EL3的内存访问根据特权访问权限进行检查。MMU的配置存储在系统寄存器中这些寄存器的访问权限由当前的异常级别控制确保只有高权限级别才能修改MMU的配置从而保障系统的安全性和稳定性。 3.SCTLR_ELx即System Control Register。是ARM架构中用于控制系统行为的关键寄存器之一。不同的异常级别EL0,EL1,EL2,EL3都有相应的SCTLR_ELx寄存器EL1和EL0共享相同的MMU配置并且控制仅限于在EL1上运行的特权代码。因此没有SCTLR_EL0所有控制均来自EL1可访问寄存器。较高的异常级别有权访问控制较低级别的寄存器反之则不行。例如如果需要EL2有权访问SCTLR_EL1。无法从EL0访问该寄存器任何尝试这样做都会生成异常。常见的系统寄存器如下表 4.ARM架构中处理元件PE在AArch32和AArch64执行状态间的切换只能在异常级别EL变化时发生。较低EL到较高EL时可以保持当前状态或切换为AArch64较高EL到较低EL时可以保持或切换为AArch32。64位层可以托管32位层但32位层不能托管64位层。例如64位操作系统可运行64位和32位应用程序而32位操作系统只能运行32位应用程序。AArch32提供与旧32位架构的向后兼容性从Armv9-A开始在所有异常级别都必须支持AArch64并且仅可选择在EL0级别支持AArch32。即除EL0其他异常级别均为 AArch64并且复位时执行状态始终为 AArch64。这意味着旧版应用程序可以运行但不能运行内核、虚拟机管理程序或固件。 5.AArch64架构支持多种安全状态主要分为安全状态和非安全状态。想要从一种安全状态切换到另一种安全状态时必须通过EL3。如果实现了TrustZone则处理器可以处于安全状态或非安全状态这由SCR_EL3.NS位选择。安全状态下处理元件PE可访问安全和非安全物理地址空间适用于运行可信软件而在非安全状态下PE仅能访问非安全物理地址空间适用于普通操作系统。EL3 是最高特权的异常级别EL3 的安全状态是固定的EL3 能够访问存储系统寄存器的所有副本。在Armv8-A架构中EL3始终处于安全状态。而在Armv9-A架构中EL3属于安全状态除非实现了RMERoot Management Entity。 Armv9-A新引入了对Realm Management ExtensionRME的支持。当实现RME时支持两种额外的安全状态Realm状态和Root状态。在Realm状态下处理元件PE可以访问非安全和Realm物理地址空间而在Root状态下PE可以访问所有物理地址空间且Root状态仅在EL3中可用。 6.对于任何特定处理器是否实现所有异常级别以及每个实现的异常级别允许哪些执行状态都是可选择的EL0和EL1是唯一必须实现且强制执行的异常级别EL2和EL3是可选的。EL2包含许多虚拟化功能没有EL2的实现无法访问这些功能。EL3是唯一可以更改安全状态的级别如果实现选择不实现EL3则该PE将只能访问单个安全状态。在Armv8.0-A中EL2只存在于Non-secure状态因为Secure状态下没有虚拟化支持。Armv8.4-A添加了S.EL2作为带有使能位(SCR_EL3.EEL2)的可选功能以提供向后兼容性。 7.异常是指任何可能导致当前正在执行的程序挂起的事件发生异常会导致状态发生变化以执行代码来处理该异常。当发生异常时处理器不会移至当前代码中的下一条指令而是停止当前执行并分支到一段代码来处理请求。该代码称为异常处理程序一旦事件处理完毕执行就可以返回到原来的程序。Arm架构将异常分为两大类同步异常和异步异常。同步异常是由当前正在执行的指令引起或与之相关的异常。同步异常与执行流同步因为它们与当前执行的指令直接相关。例如尝试写入MMU定义的只读位置的指令将触发同步异常。常见的同步异常有Invalid instructions and trap exceptions、Memory accesses内存访问异常是软件层面的问题通常与页表、虚拟内存和访问权限相关注意与SError区别、Exception-generating instructions、Debug exceptions。SVC、HVC、SMC指令分别用于EL0请求EL1操作系统服务、EL1请求EL2虚拟机管理程序服务、普通世界请求EL3安全世界服务。当 PE 在 EL0 上执行时它无法直接调用EL2上的虚拟机管理程序或EL3上的安全监视器因为这只能在EL1及更高版本上实现。EL0处的应用程序必须使用对内核的SVC调用并让内核执行调用更高异常级别的操作。假设已经实现了相应的异常级别则操作系统内核EL1可以执行HVC指令来调用EL2处的管理程序或使用SMC指令调用EL3处的安全监视器。类似地从EL2开始PE可以使用SMC指令来调用EL3安全监视器。如下图所示 异步异常不直接与当前执行的指令相关并且通常是来自处理器外部的系统事件。这可能是软件需要响应的系统事件例如计时器的活动或屏幕的触摸。异步异常也称为中断。常见的异步异常中断有Physical interrupts如UART中断、SErrorSystem Error是内存系统为响应意外事件而生成的异常类型主要与硬件故障或系统层面的严重问题相关通常是由硬件故障引起的比如内存、缓存、外设或总线出错、IRQ and FIQ、Virtual interrupts如vSError、vIRQ、vFIQ, 这些虚拟中断的功能与物理中断相同但它们只能向EL1发送信号。物理和虚拟异步异常都可以被暂时屏蔽这意味着异步异常可以保持挂起状态直到它们被取消屏蔽并且异常被处理这对于处理嵌套异常特别有用。同步异常无法被屏蔽这是因为同步异常是由指令的执行直接引起的因此如果它们随后悬而未决或被忽略则会阻止执行。总结一下从更大的角度来说ARM中异常总的分为同步异常、SError、IRQ和FIQ四类其中后面三个是中断同步异常和SError是没有与之对应的中断号的所有的SGI、SPI、PPI、LPI中断最终都是被处理为IRQ或FIQ可以将IRQ或FIQ理解为中断处理方式将SGI、SPI、PPI、LPI理解为中断分类。 8.当处理器遇到异常时会保存当前处理元件PE的状态和异常返回地址并进入特定模式以处理该异常。当前的处理器状态从PSTATE中获取在ARMv8架构中PSTATE 并不是一个单独的寄存器而是一个处理器状态寄存器的抽象概念PSTATE中的DAIF位用于屏蔽异常事件。当相应的位被设置时不会响应相应异常包括D调试异常、ASError异步异常、IIRQ异步异常和FFIQ异步异常并保存到程序状态寄存器SPSR_ELxx为1、2、3而返回地址会存入异常链接寄存器ELR_ELxx为1、2、3。对于同步异常和SError还会更新异常综合症寄存器ESR_ELxx为1、2、3记录异常的具体原因。对于与地址相关的异常如MMU故障触发异常的虚拟地址会写入故障地址寄存器FAR_ELxx为1、2、3。 9.任何给定异常的异常处理都从称为异常向量的固定内存地址开始当异常发生时处理元件PE分支到向量表中的某个位置。AArch64 中的向量表与许多其他处理器架构不同因为它们包含指令而不是地址。每个条目最多包含32条指令一个指令4字节32位足以执行基本的堆栈和调用特定于异常的处理代码。异常处理与返回如下图所示 10.每种异常类型都有目标异常级别可能是根据异常类型隐式决定的或者由系统寄存器中的配置位定义。同步异常如SVC、HVC和SMC指令根据与其指令相关的规则进行路由。其他异常类型如IRQ、FIQ和SError可以路由到EL2虚拟机管理程序或EL3安全监视器。例如可以配置系统将所有IRQ路由到EL1。每种异常类型IRQ、FIQ和SError的路由配置是独立进行的。SCR_EL3寄存器用于指定哪些异常如IRQ、FIQ和SError会路由到EL3安全监视器HCR_EL2寄存器用于指定哪些异常会路由到EL2虚拟化层这些寄存器允许将不同类型的中断路由到不同的异常级别。SCR_EL3和HCR_EL2中的每一位控制特定类型的中断如IRQ、FIQ、SErrorSCR_EL3的配置优先于HCR_EL2配置。当系统复位时这些路由位的值是UNKNOWN的必须由软件进行初始化配置。 11.路由到较高异常级别的异常无法被较低EL屏蔽。例如如果中断在EL1中被屏蔽并且中断被路由到EL2则EL1屏蔽将不会影响EL2操作。路由到当前异常级别的异常可以被当前级别屏蔽。路由到较低异常级别的异常始终被屏蔽异常将被挂起直到PE更改为等于或低于路由到的异常级别。异常被处理时处理器在特定异常级别的执行状态AArch64或AArch32由更高的异常级别的控制寄存器来决定。如下图 12.每个异常级别都有自己的向量表其基地址由其自己的向量基地址寄存器VBAR_ELxVector Base Address Registerx为1、2、3定义。每种异常类型都有特定的地址偏移这些偏移指向异常处理程序。异常可以分为四大类来自较低异常级别的异常且较低异常级别使用的都是AArch32、来自较低异常级别的异常且较低异常级别至少有一个使用的是AArch64、来自当前异常级别且使用的堆栈指针是SP_EL0和来自当前异常级别且使用的堆栈指针是SP_ELx使用哪个SP由PSTATE.SP位来决定。在ARM架构中当异常被路由到某个异常级别处理时所使用的异常向量表是目标异常级别即接收异常的异常级别对应的向量表而不是原始异常发生时的异常级别的向量表。 13.2021年扩展Armv8.8-A和Armv9.3-A中添加了不可屏蔽中断(NMI)支持。具有超级优先级的中断被归类为NMI即使PSTATE异常掩码通常会阻止它被获取也可以被获取。