操作系统|ARM和X86的区别,存储,指令集

news2025/2/11 5:52:12

文章目录

      • 主频
      • 寄存器
        • 寄存器在硬件中的体现是什么
        • 寄存器的基本特性
        • 硬件实现
        • 寄存器类型
      • 内存和寄存器的区别
      • 内存(Memory)和磁盘(Disk)
      • 指令的执行
        • ARM Cortex-M3与Thumb-2指令集
        • Thumb-2 与流水线
        • 虚拟地址指令的执行
      • 多核CPU
        • 芯片间的通信机制
        • ISA指令集

主频

主频,即CPU的时钟频率(Clock Speed),是指每秒钟内CPU能够执行的基本操作次数,通常以赫兹(Hz)为单位表示,现代处理器的主频则常用吉赫兹(GHz)来衡量。例如,一个标称3 GHz的CPU意味着它每秒可以执行30亿次基本操作。
基本操作”指的是CPU在一个时钟周期内能够执行的最基本的任务或步骤:

  1. 算术逻辑单元(ALU)操作
    加法/减法:对两个寄存器中的值进行加法或减法运算。
    逻辑运算:如与(AND)、或(OR)、异或(XOR)等逻辑运算。
    移位操作:将寄存器中的值左移或右移若干位。
  2. 数据传输
    加载(Load)和存储(Store):从内存中加载数据到寄存器,或将寄存器中的数据存储回内存。
    寄存器间的数据移动:将一个寄存器的内容复制到另一个寄存器。
  3. 控制流操作
    分支预测和跳转:决定程序的执行路径,例如根据条件判断是否跳转到特定的地址继续执行。
    调用子程序和返回:保存当前执行点并跳转到子程序开始处执行,完成后返回原位置继续执行。
  4. 状态管理
    设置标志位:更新状态寄存器中的标志位,如零标志、进位标志、溢出标志等,用于后续条件判断。
  5. 微指令执行
    现代CPU通常会将复杂的高级指令分解成一系列微指令(Micro-operations, Micro-ops 或 μops),每个微指令代表一个非常基础的操作。 例如,一条复杂的乘法指令可能被分解为多个加法和移位操作来实现。
  6. 时钟周期内的活动
    在一个时钟周期内,CPU可能会完成一个或多个这样的基本操作,具体取决于CPU的设计和架构。例如:
    在简单的RISC(精简指令集计算机)架构中,每条指令通常在一个时钟周期内完成。
    而在CISC(复杂指令集计算机)架构中,一条指令可能需要多个时钟周期才能完成,因为它可能包含多个基本操作

主频在计算机性能中起着关键作用,主要体现在以下几个方面:

  1. 执行速度 主频直接影响了CPU执行指令的速度。理论上,较高的主频意味着CPU可以在单位时间内完成更多的指令周期,从而加快程序的执行速度。不过,实际性能还受到其他因素的影响,如指令集架构、流水线设计、缓存大小等。
  2. 响应时间 对于需要快速响应的应用场景(如实时系统、游戏或高性能计算),更高的主频可以减少延迟,提供更快的响应速度。这意味着用户界面更加流畅,或者计算任务能够更迅速地得到处理结果。
  3. 多任务处理能力 在多任务环境下,高主频有助于提高系统的并发处理能力。虽然现代CPU通过多核技术也能显著提升多任务处理效率,但单个核心的高主频仍然对整体性能有积极贡献,特别是在某些无法有效并行化的任务上。
  4. 能效比 尽管提高主频可以增强CPU的计算能力,但这也会导致功耗增加和热量产生增多。因此,在设计CPU时需要权衡性能与能耗之间的关系。近年来,随着节能技术和工艺制程的进步,制造商致力于在保持或提升性能的同时降低功耗。
    注意事项 并非越高越好:虽然高主频带来了性能上的优势,但它并不是决定CPU性能的唯一因素。架构优化、缓存层次结构、内存带宽等因素同样重要。
    散热问题:高频运行会产生更多热量,这对散热系统提出了更高要求。如果散热不良可能导致过热降频甚至硬件损坏。
    应用适配性:不同类型的软件对主频的需求不同。一些高度依赖CPU频率的应用(如视频编码/解码、科学计算等)会从高主频中受益更多;而对于I/O密集型任务,主频的影响相对较小。

在这里插入图片描述

同一O(N²)算法在STM32与PC上的性能差异可达上百倍,主要源于以下因素的综合作用:
1.主频差距:PC主频3GHz(每秒3×10⁹周期),STM32主频100MHz(1×10⁸周期),理论速度差距为30倍。但实际差异因其他因素被放大。
2.每指令周期数(CPI)差异

  • PC处理器(如x86)采用超标量、乱序执行等技术,单周期可执行多条指令(高IPC),复杂操作可能仅需1个周期。
  • STM32(Cortex-M)架构简单,部分操作需多周期。例如,内存访问或分支可能耗费更多周期,导致平均CPI较高。
    假设PC的CPI为1,STM32为4,仅此因素即可放大4倍延迟。

CPI是指平均每条指令所需的时钟周期数。不同的指令可能需要不同数量的时钟周期来完成。例如,简单的算术运算可能只需要1个或几个时钟周期,而复杂的浮点运算或者内存访问可能需要更多的时钟周期。
因此,如果一个CPU的CPI平均为4,则意味着平均每条指令需要4个时钟周期来完成。在这种情况下,一个3 GHz的CPU理论上每秒可以执行约7.5亿条指令(即30亿除以4)。

3.内存子系统差异:PC拥有多级缓存和高速DDR内存,减少内存延迟;STM32缓存小或缺失,依赖低速Flash/SRAM,频繁访问数据时延迟显著增加。
4.编译器优化差异:PC编译器(如GCC/Clang)支持高级优化(循环展开、SIMD指令),显著提升指令效率;STM32编译器优化能力有限,代码可能更冗余。

寄存器

寄存器在硬件中的体现是什么

寄存器是CPU内部的一种高速存储位置,用于临时存放数据、地址或控制信息。它们是CPU架构中非常关键的部分,直接影响到处理器的性能和效率。以下是关于寄存器在硬件中的具体体现及其作用的详细说明:

寄存器的基本特性
  • 速度极快:寄存器位于CPU内部,访问速度远高于任何其他形式的存储器(如缓存、RAM等)。这是因为它们直接集成在CPU芯片内,并且使用了与CPU相同的制造工艺。
  • 容量较小:由于成本和技术限制,寄存器的数量相对较少,通常只有几十个到几百个。每个寄存器的大小一般为32位或64位,取决于CPU架构(例如x86-64架构支持64位寄存器)。
  • 专用性:一些寄存器有专门用途,比如程序计数器(PC)、堆栈指针(SP)、状态寄存器等;而另一些则是通用寄存器,可用于各种目的,如存储操作数、中间结果等。
硬件实现

从硬件角度来看,寄存器是由触发器(Flip-Flops)或其他类型的存储元件组成的。这些元件能够保持一位二进制值的状态。多个这样的单元组合在一起形成一个完整的寄存器,可以存储多位的数据。

触发器:最基本的形式是D型触发器,它可以在时钟信号的上升沿或下降沿捕获输入值,并将其保存下来直到下一个时钟周期。
多路复用器(MUX):为了允许寄存器之间进行数据传输以及选择特定的操作数,CPU内部会使用多路复用器来控制数据流向哪个寄存器。
解码器:用于选择具体的寄存器进行读写操作。例如,在一条指令需要访问某个特定寄存器时,解码器会根据指令中的字段确定目标寄存器。

寄存器类型

不同的CPU架构可能有不同的寄存器集合,但常见的包括:

  • 通用寄存器(General-Purpose Registers, GPRs):用于存储临时数据或地址。例如,在x86架构中有EAX/AX/RAX(累加器)、EBX/BX/RBX、ECX/CX/RCX等。
  • 专用寄存器
    • 程序计数器(Program Counter, PC):保存下一条要执行指令的地址。
    • 指令寄存器(InstructionRegister, IR):保存当前正在执行的指令。 堆栈指针(Stack Pointer, SP):指向当前堆栈顶部的位置。
    • 基址寄存器(Base Register):用于支持分段内存模型中的地址转换。
    • 状态寄存器(StatusRegister):包含条件标志位(如零标志、符号标志、溢出标志等),用于控制流决策。

在实际的计算过程中,寄存器扮演着至关重要的角色。例如,在执行一条简单的加法指令ADD R1, R2时,CPU会从寄存器R1和R2中读取数值,通过ALU(算术逻辑单元)执行加法运算,然后将结果存回其中一个寄存器。整个过程几乎完全依赖于寄存器的快速存取能力,以确保指令能够高效地被执行。

内存和寄存器的区别

内存(Memory)和寄存器(Registers)都是计算机系统中用于存储数据的关键组件,但它们在功能、速度、容量和使用场景上有着显著的区别。以下是内存和寄存器的主要区别:

  1. 位置与集成度
    寄存器:位于CPU内部,是CPU的一部分。由于它们直接集成在处理器芯片内,因此访问速度极快。
    内存:通常指的是主存储器(RAM),它位于CPU外部,通过主板上的总线与CPU连接。虽然现代内存技术已经非常先进,但相比寄存器,其访问速度仍然较慢。
  2. 容量
    寄存器:数量有限,通常只有几十个到几百个,每个寄存器的大小通常是32位或64位(取决于处理器架构)。这限制了寄存器能够同时存储的数据量。
    内存:容量大得多,可以从几GB到数百GB不等,具体取决于系统配置。内存可以存储大量的程序代码和数据。
  3. 速度
    寄存器:访问速度最快,因为它们是最接近CPU运算单元的存储资源。一个时钟周期内就可以完成读写操作。
    内存:访问速度比寄存器慢很多,尽管现代DRAM(动态随机存取存储器)技术不断进步,但与寄存器相比仍有显著差距。内存访问可能需要多个CPU时钟周期才能完成。
  4. 成本
    寄存器:由于其高集成度和高速度要求,制造成本较高。
    内存:相对较低的成本,使得它可以提供较大的存储空间。
  5. 用途
    寄存器:存储当前正在处理的数据或地址。暂存计算结果。作为CPU指令执行过程中的临时存储区。包含特殊用途的寄存器如程序计数器(PC)、堆栈指针(SP)、状态寄存器等。
    内存:存储正在运行的程序代码及其相关数据。提供操作系统和应用程序所需的大量存储空间。支持虚拟内存机制,允许系统将部分内存内容交换到磁盘上以扩展可用内存。
  6. 生命周期
    寄存器:数据仅在CPU执行特定指令期间有效。一旦指令执行完毕,除非显式保存,否则寄存器中的数据可能会被覆盖。
    内存:数据可以在程序运行期间持久存在,直到程序主动修改或释放这些数据。
  7. 组织方式
    寄存器:由触发器或其他类型的高速存储元件构成,每个寄存器独立工作,可以直接通过寄存器名称进行访问。
    内存:由大规模集成电路组成,采用层次化结构(如SRAM缓存、DRAM主存)。内存中的数据按照地址进行组织,必须通过地址总线指定要访问的具体位置。

内存(Memory)和磁盘(Disk)

内存(Memory)和磁盘(Disk)是计算机系统中两种不同类型的存储设备,它们在功能、速度、用途等方面有显著的区别。下面详细说明这两者的区别:

内存(RAM - Random Access Memory)

  1. 类型:内存通常指的是主存储器,即RAM(随机存取存储器)。它是一种易失性存储器,意味着当计算机关闭时,存储在其中的数据会丢失。
  2. 速度:内存的访问速度非常快,远高于磁盘的访问速度。现代计算机中的DDR4内存可以达到每秒几十GB的带宽。
  3. 用途:内存用于暂时存放当前正在使用的程序代码和数据,以便CPU快速访问。操作系统和应用程序在运行时需要将必要的指令和数据加载到内存中。
  4. 容量:相对较小,从几GB到数百GB不等,具体取决于计算机配置和需求。

磁盘(Disk)

  1. 类型:磁盘通常指硬盘驱动器(HDD)或固态硬盘(SSD),是一种非易失性存储器,即使计算机断电后,数据仍然保存在其上。
  2. 速度:
    HDD:机械硬盘依赖旋转的磁盘和移动的读写头进行数据存取,速度较慢,典型传输速率在100MB/s左右。
    SSD:固态硬盘使用闪存技术,没有机械部件,因此比HDD快得多,典型的SATA SSD传输速率可达500MB/s以上,而NVMe
    SSD则可达到数GB/s。
  3. 用途:磁盘用于长期存储数据,包括操作系统文件、应用程序、用户数据等。当计算机启动时,操作系统和初始程序会从磁盘加载到内存中运行。
  4. 容量:相对较大,可以从几百GB到数十TB不等,适合存储大量数据。

指令的执行

ARM Cortex-M3与Thumb-2指令集

ARM Cortex-M3:这是一个针对嵌入式系统设计的处理器内核,它专注于提供高效能、低功耗以及低成本的解决方案。Cortex-M3广泛应用于各种微控制器中,包括STM32系列中的多个型号。
Thumb-2指令集:

  • 混合模式:Thumb-2是一种结合了16位和32位指令的指令集架构,旨在提高代码密度的同时保持或提升性能。
  • 向后兼容性:Thumb-2指令集完全向后兼容原始的Thumb指令集,这意味着为仅支持Thumb指令集的旧版ARM处理器编写的代码可以在支持Thumb-2的处理器上运行,无需修改。
  • 效率:通过允许编译器根据需要选择最合适的指令长度(16位或32位),Thumb-2能够优化程序的执行效率和存储空间利用。

假设我们有一段简单的 C 语言代码片段:

int add(int a, int b) {
    return a + b;
}

当这段代码被编译成 Thumb-2 指令时,可能会生成如下形式的汇编代码:

add:
    push    {r7}          ; 保存 r7 寄存器
    mov     r7, sp        ; 设置栈帧指针
    ldr     r3, [r7, #8]  ; 加载参数 'a' 到 r3
    ldr     r2, [r7, #12] ; 加载参数 'b' 到 r2
    adds    r0, r3, r2    ; 执行加法并将结果存入 r0
    pop     {r7}          ; 恢复 r7 寄存器
    bx      lr            ; 返回调用者
Thumb-2 与流水线

ARM Cortex-M 系列处理器,包括使用 Thumb-2 指令集的 STM32F103C8,确实采用了流水线架构来优化性能。例如:
Cortex-M3 使用的是三级流水线:
取指:从指令存储器中获取指令。
解码:解码指令并读取操作数。
执行:执行指令并将结果写回寄存器或内存。

虚拟地址指令的执行

假设我们要执行一条加载操作,将一个值从内存加载到寄存器中。这条指令可能会涉及到虚拟地址到物理地址的转换。

MOV RAX, [0x12345678]  ; 假设这是我们的虚拟地址

当这条指令被执行时,CPU会进行以下步骤:
取指:从程序计数器(PC)指向的内存地址取出指令。
解码:识别出这是一个加载操作,并确定需要访问的虚拟地址 0x12345678。
地址转换:MMU介入,按照前面描述的过程将虚拟地址 0x12345678 转换为物理地址 0x000F0078。
访存:根据转换后的物理地址从内存中读取数据。
写回:将读取的数据写回到目标寄存器(如RAX)。

多核CPU

8核处理器不等于8个芯片
一个标称“8核”的笔记本电脑处理器并不意味着它有8个独立的AMD芯片。实际上,这指的是处理器内部包含8个物理核心(或逻辑核心,如果考虑超线程技术)。这些核心集成在单个硅片(即CPU芯片)上,共享某些资源,如缓存、内存控制器和I/O接口。

核心与芯片的关系
多核处理器:现代处理器通常是一个物理芯片上集成了多个处理核心。例如,AMD Ryzen系列处理器可以拥有4核、6核、8核甚至更多核心。
每个核心:每个核心都可以独立执行指令,但它们共享一些资源(如L3缓存、内存控制器等),并且通过片上总线或互连网络进行通信。

芯片间的通信机制

在一个多核处理器内部,各核心之间需要高效的通信机制来协调工作。以下是几种常见的通信方式:
1.共享缓存:
多数现代处理器设计中,多个核心共享最后一级缓存(通常是L3缓存)。这种设计允许一个核心写入的数据能够迅速被其他核心读取,减少了访问主存的延迟。
2.片上互连网络(On-Chip Interconnect):
AMD在其Zen架构中采用了Infinity Fabric作为其片上互连技术。Infinity Fabric是一种高速、低延迟的互联方案,用于连接处理器的不同部分(包括核心、缓存、内存控制器等),确保数据可以在这些组件间快速传输。
3.一致性协议:
为了维护多个核心看到的一致性视图,处理器实现了缓存一致性协议(如MESI协议)。这些协议保证了当一个核心修改了某个缓存行时,其他核心能够及时得知这一变化,避免数据不一致的问题。
4.NUMA架构(对于多插槽系统):
在服务器级别,可能会遇到非统一内存访问(NUMA)架构,其中每个处理器插槽有自己的本地内存。在这种情况下,跨插槽的核心间通信会涉及更复杂的内存访问模式,因为访问远程节点的内存比访问本地内存要慢。

ISA指令集

x86架构的指令集

AMD的处理器,例如Ryzen系列,采用了高度优化的流水线设计来提升性能:

  • 多级流水线:现代AMD处理器使用了多级流水线结构,允许同时处理多条指令的不同阶段。
  • 分支预测:为了减少因条件跳转导致的流水线停滞,AMD处理器内置了先进的分支预测单元,尝试预测程序流的方向,并提前加载可能用到的指令。
  • 乱序执行(Out-of-order execution):允许处理器动态调整指令的执行顺序以最大化资源利用率。
  • 超标量设计(Superscalar architecture):单个处理器核心能够在每个时钟周期内并发执行多条指令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2296160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mp4视频播放机无法播放视频-批量修改视频分辨率(帧宽、帧高)

背景 家人有一台夏新多功能 视频播放器(夏新多功能 视频播放器),用来播放广场舞。下载了一些广场舞视频, 只有部分视频可以播放,其他视频均无法播放,判断应该不是帧速率和数据速率的限制, 分析可能是播放器不支持帧高度大于720的视频。由于视频文件较多,需要借助视频编…

【浏览器多开】Google Chrome 谷歌浏览器分身术

谷歌浏览器分身术(多开): 复制已有谷歌浏览器图标—>右键–>属性的目标栏中,添加 --user-data-dir自定义文件夹路径 参数。 例如: C:\MySpace\02Installed\Chrome\Chrome-bin\99.0.4844.51\chrome.exe –user-d…

《LeetCode Hot100》 Day01

Day01 轮转数组 思路: (1) 使用O(1) 空间复杂度解决,就需要原地解决,不能创建新的数组。 (2) 先整体反转数组,再反转前k个数,再反转剩下的数。即可完整本题。 &…

【图片合并转换PDF】如何将每个文件夹下的图片转化成PDF并合并成一个文件?下面基于C++的方式教你实现

医院在为患者进行诊断和治疗过程中,会产生大量的医学影像图片,如 X 光片、CT 扫描图、MRI 图像等。这些图片通常会按照检查时间或者检查项目存放在不同的文件夹中。为了方便医生查阅和患者病历的长期保存,需要将每个患者文件夹下的图片合并成…

uniapp实现人脸识别(不使用三方插件)

uniapp实现人脸识别 内容简介功能实现上传身份证进行人脸比对 遇到的问题 内容简介 1.拍摄/相册将身份证照片上传到接口进行图片解析 2.使用live-pusher组件拍摄人脸照片,上传接口与身份证人脸进行比对 功能实现 上传身份证 先看下效果 点击按钮调用chooseImage…

2025全新JSP简约博客平台-免费开源

前言 最近收到不少同学期末作业的需求,都还是JSP的老技术,介于现在很多网上可以找到的JSP现有项目,要么就是很老好几年前的,要么就是搞了一通不仅乱码还各自报错失败的,总之就是资源有限,于是我花了一星期…

计算机视觉语义分割——Attention U-Net(Learning Where to Look for the Pancreas)

计算机视觉语义分割——Attention U-Net(Learning Where to Look for the Pancreas) 文章目录 计算机视觉语义分割——Attention U-Net(Learning Where to Look for the Pancreas)摘要Abstract一、Attention U-Net1. 基本思想2. Attention Gate模块3. 软注意力与硬注意力4. 实验…

基于SpringBoot的“4S店车辆管理系统”的设计与实现(源码+数据库+文档+PPT)_2025-02-10

基于SpringBoot的“4S店车辆管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统登录界面图 管理员功能界…

ESP-IDF学习记录(6)

这篇不知道起什么标题,因为已经卡滞很久了,从年前到现在,但也没停止探索 1.烧录 用的小型加热台,这步对我来说最难,自己没有焊接过QFN32的封装 总结一下目前遇到的问题: 1)5V供电选成了12V转…

【机器学习与数据挖掘实战】案例13:基于BP神经网络模型的家用热水器用户行为分析与事件识别

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数…

Windows 植物大战僵尸杂交版

植物大战僵尸杂交版 链接:https://pan.xunlei.com/s/VOIjttp8EzfL9fXO6S6ekvZYA1?pwdw8cm# 作者: B站UP主 潜艇伟伟迷

【学习笔记】计算机网络(三)

第3章 数据链路层 文章目录 第3章 数据链路层3.1数据链路层的几个共同问题3.1.1 数据链路和帧3.1.2 三个基本功能3.1.3 其他功能 - 滑动窗口机制 3.2 点对点协议PPP(Point-to-Point Protocol)3.2.1 PPP 协议的特点3.2.2 PPP协议的帧格式3.2.3 PPP 协议的工作状态 3.3 使用广播信…

Blazor-<select>

今天我们来说说<select>标签的用法&#xff0c;我们还是从一个示例代码开始 page "/demoPage" rendermode InteractiveAuto inject ILogger<InjectPage> logger; <h3>demoPage</h3> <select multiple>foreach (var item in list){<…

Best practice-ThreadLocal高并发场景的最佳实践

关于ThreadLocal基础信息 引用一段来自ThreadLocal源码中的doc注释来说明其特性&#xff1a; This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has …

【鸿蒙HarmonyOS Next实战开发】多媒体视频播放-GSYVideoPlayer

简介 GSYVideoPlayer是一个视频播放器库&#xff0c;支持切换内核播放器&#xff08;IJKPlayer、avplayer&#xff09;&#xff0c;并且支持视频截图能力、 视频生成gif能力、边播边缓存能力、视频全屏能力等多种能力。 效果展示&#xff1a; 下载安装 ohpm install ohos/gs…

IDEA中常见问题汇总

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

基于蜘蛛蜂优化算法的无人机集群三维路径规划Matlab实现

代码下载&#xff1a;私信博主回复基于蜘蛛蜂优化算法的无人机集群三维路径规划Matlab实现 《基于蜘蛛蜂优化算法的无人机集群三维路径规划》 摘要 本研究针对无人机集群三维路径规划问题&#xff0c;提出了一种基于蜘蛛蜂优化算法的解决方案。以5个无人机构成的集群为研究对…

Deepseek系列从v3到R易背面经版

deepseek v3 base要点 MTP : Multi-Token Prediction 训练时&#xff1a; 1. 把前一个block中input tokens经过embedding layer和transformer block的输出&#xff0c;进入output head之前的内容记为h&#xff0c;与下一个block的input tokens经过embedding layer输出的内容都…

Maven入门核心知识点总结

Maven 1. POM&#xff08;Project Object Model&#xff09;2. 坐标&#xff08;Coordinates&#xff09;3. 依赖管理&#xff08;Dependency Management&#xff09;4. 常用五个生命周期&#xff08;Life Circle&#xff09;5. Maven 仓库&#xff08;Maven Repository&#x…

Blocked aria-hidden on an element because its descendant retained focus.

在使用el-popover和el-radio-group实现弹窗选择数据后调用el-popover的doClose()方法时一直报错&#xff01; 经过分析发现el-popover及el-radio__original有aria-hidden属性&#xff0c;具体aria-hidden属性应用自行搜索了解。既然是这个玩意引起的&#xff0c;则在显示时将a…