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

【ARM】v8架构programmer guide(3)_ARMv8的寄存器

目录

4.ARMv8 registers

4.1 AArch64 特殊寄存器

4.1.1 Zero register

4.1.2 Stack pointer (SP)

4.1.3 Program Counter (PC)

4.1.4 Exception Link Register(ELR)

4.1.5 Saved Process Status Register (SPSR)

4.2 Processor state

4.3 System registers

4.3.1 The system control register


4.ARMv8 registers

在ARMv8架构的AArch64执行状态中,提供了31个64位的通用寄存器,这些寄存器在所有异常级别(Exception Levels, EL)上始终可访问。这些寄存器通常被称为X0到X30。

每个AArch64 64bit的寄存器X0-X30也有一个32bit的格式。

在ARMv8架构的AArch64执行状态中,每个64位通用寄存器X0到X30都有一个对应的32位宽的低半部分寄存器,称为W0到W30。以下是关于W寄存器的一些关键点:

  1. W寄存器是X寄存器的低32位:例如,W0是X0的低32位,W1是X1的低32位。

  2. 读取W寄存器:当读取一个W寄存器时,只有对应的X寄存器的低32位被读取,高32位被忽略,并且保持不变。这意味着即使X寄存器的高32位包含数据,读取W寄存器也不会影响它们。

  3. 写入W寄存器:向W寄存器写入数据时,只修改对应X寄存器的低32位,而将高32位设置为零。例如,如果向W0写入0xFFFFFFFF,则X0将变为0x00000000FFFFFFFF,其中高32位被清零,低32位设置为写入的值。

  4. W寄存器的用途:W寄存器可以用于32位的计算和操作,这在与32位操作系统或应用程序交互时特别有用。

  5. 兼容性:这种设计允许AArch64状态的处理器向后兼容32位代码,因为32位的值可以被存储在64位寄存器的低半部分,而不影响高半部分。

  6. 优化:在某些情况下,使用W寄存器可以优化代码,因为它允许32位的操作在不牺牲64位寄存器宽度的情况下进行。

  7. 寄存器对的使用:在AArch64中,寄存器通常成对使用,这意味着在进行某些操作时,可能会同时影响一个寄存器的X部分和W部分。

4.1 AArch64 特殊寄存器

除了31个core寄存器外,也有一些特殊寄存器。

在ARMv8架构的AArch64执行状态中,有一些特殊的寄存器规则和约定需要注意:

  1. 零寄存器(Zero Register):不存在名为X31或W31的寄存器。在许多指令中,数字31代表零寄存器(ZR),它有两种形式:WZR(32位宽的零寄存器)和XZR(64位宽的零寄存器)。

  2. 指令编码:在指令编码中,数字31被用来表示零寄存器,这样编码是为了节省空间和提高效率。

  3. 栈指针(Stack Pointer):在一组受限的指令中,数字31代表栈指针(Stack Pointer, SP)。与零寄存器不同,当指令中使用数字31来引用栈指针时,它指的是实际的栈指针寄存器。

  4. 零寄存器的访问

    • 写入零寄存器的所有操作都会被忽略,因为零寄存器始终为零。
    • 从零寄存器读取的值总是0,无论之前是否有写入操作。
  5. 栈指针的特殊性:栈指针是一个特殊的寄存器,用于指向当前线程的栈顶。在64位模式下,栈指针通常不使用前缀X来表示,即直接使用SP而不是XSP。

  6. 寄存器使用:程序员在使用寄存器时应意识到这些规则,以避免混淆或错误地使用寄存器。

  7. 编码效率:通过使用数字31来表示零寄存器和栈指针,指令编码更加紧凑,这有助于提高指令解码的效率。

  8. 兼容性和向后兼容性:这种设计保持了与旧版ARM架构的兼容性,同时也为AArch64状态提供了新的功能和优化。

在ARMv8架构中,当在AArch64执行状态时,异常返回状态由每个异常级别(Exception Level, EL)的专用寄存器保存:

  1. 异常链接寄存器(Exception Link Register, ELR)

    • 这个寄存器用于保存异常处理程序的返回地址。当处理器响应异常并跳转到异常处理程序时,它会将异常发生时的程序计数器(PC)保存到相应的ELR。
    • 当异常处理完成,处理器使用异常返回(Exception Return, ERET)指令从ELR恢复执行,返回到异常发生前的代码位置。
  2. 保存的处理器状态寄存器(Saved Processor State Register, SPSR)

    • SPSR用于保存异常发生时的某些处理器状态信息。这包括程序状态寄存器(Program Status Register, PSR)的某些字段,如条件标志、中断使能位等。
    • 每个异常级别都有自己的SPSR,例如SPSR_EL1、SPSR_EL2和SPSR_EL3,它们分别保存在该异常级别上发生异常时的处理器状态。
  3. 专用栈指针(Stack Pointer, SP)

    • 虽然每个异常级别都有一个专用的栈指针,但它们不用于保存异常返回状态。栈指针用于管理该异常级别的栈,而异常返回地址和状态由ELR和SPSR保存。
  4. 异常处理流程

    • 当异常发生时,处理器将当前的程序计数器和其他状态信息保存到ELR和SPSR中,然后跳转到对应的异常处理程序。
    • 异常处理程序执行完毕后,处理器使用ERET指令从ELR恢复程序计数器,并从SPSR恢复其他状态信息,然后继续执行。
  5. 设计目的

    • 这种设计允许处理器在不同异常级别之间进行清晰的异常处理和返回,同时保持异常发生时的上下文不变。
  6. 异常级别的栈

    • 每个异常级别的栈用于存储该级别上的上下文信息,如寄存器内容,但在异常返回时,不通过栈来恢复程序计数器和状态信息。

4.1.1 Zero register

零寄存器(Zero Register)在ARMv8架构的AArch64执行状态中扮演着特殊的角色,以下是它的一些特性和使用方式:

  1. 读取始终为零:当零寄存器(通常表示为WZR或XZR)被用作源寄存器时,它总是提供零值作为操作数。

  2. 写入被忽略:当零寄存器被用作目的寄存器时,对它的写入操作会被忽略,即不会影响寄存器的值,它始终保持为零。

  3. 广泛使用:零寄存器可以在大多数指令中使用,特别是在需要一个零常数的算术或逻辑操作中,使用零寄存器可以提高编码效率和性能。

  4. 限制使用:尽管零寄存器在很多指令中可用,但并非所有指令都支持使用零寄存器。例如,某些特定的比较或移动指令可能不允许使用零寄存器。

  5. 优化代码:零寄存器的使用可以简化代码并减少指令大小,因为它避免了使用立即数零,特别是在条件执行的指令中。

  6. 寄存器别名:在AArch64中,零寄存器没有特定的寄存器编号,它通常被用作X0或W0寄存器的别名,但始终返回零。

  7. 与其他寄存器的区别:与普通的通用寄存器不同,零寄存器不保存任何状态,它仅作为一个特殊的寄存器,用于提供零或丢弃结果。

  8. 汇编编程中的考虑:在编写汇编代码时,程序员需要了解哪些指令支持零寄存器,以确保代码的正确性和效率。

4.1.2 Stack pointer (SP)

在ARMv8架构中,栈指针的使用在一定程度上与异常级别分离。默认情况下,触发异常时会为目标异常级别选择栈指针,例如,触发到EL1的异常会选择SP_EL1。每个异常级别都有自己的栈指针:SP_EL0、SP_EL1、SP_EL2和SP_EL3。

当处理器处于AArch64状态且不在EL0时,可以使用以下任一栈指针:

  • 与该异常级别(SP_ELn)相关联的专用64位栈指针。
  • 与EL0相关联的栈指针(SP_EL0)。

EL0只能访问SP_EL0。

"t"后缀表示选择了SP_EL0栈指针。"h"后缀表示选择了SP_ELn栈指针。 大多数指令不能引用SP。然而,某些形式的算术指令,例如,ADD指令,可以读取和写入当前栈指针,以调整函数中的栈指针。例如:

4.1.3 Program Counter (PC)

ARMv7指令集的一个特点是使用R15作为程序计数器(Program Counter, PC),它也被用作通用寄存器。PC使得一些巧妙的编程技巧成为可能,但也为编译器和复杂流水线的设计带来了复杂性。在ARMv8中移除对PC的直接访问使得返回预测变得更容易,并且简化了应用程序二进制接口(Application Binary Interface, ABI)的规范。PC永远不能作为一个命名寄存器被访问。它在某些指令中的使用是隐式的,比如PC相对的加载和地址生成。PC不能被指定为数据处理指令或加载指令的目的寄存器。

4.1.4 Exception Link Register(ELR)

  用于储存异常返回地址。

4.1.5 Saved Process Status Register (SPSR)

在触发异常时,处理器状态被存储在相应的保存程序状态寄存器(Saved Program Status Register, SPSR)中,这与ARMv7中的当前程序状态寄存器(Current Program Status Register, CPSR)类似。SPSR保存了触发异常前的PSTATE值,并在执行异常返回时用于恢复PSTATE的值。

在ARMv8中,写入的SPSR(Saved Program Status Register)取决于触发异常的异常级别(Exception Level, EL)。具体如下:

  • 如果异常是在EL1触发的,则使用SPSR_EL1。
  • 如果异常是在EL2触发的,则使用SPSR_EL2。
  • 如果异常是在EL3触发的,则使用SPSR_EL3。

当处理器触发异常时,它会将当前的PSTATE寄存器的值保存到对应的SPSR中。这个PSTATE值随后可以在执行异常返回操作时用来恢复处理器状态。每个异常级别都有自己的SPSR,以便在不同级别处理异常时保存和恢复状态。这种设计允许处理器在不同异常级别之间进行有效的状态管理和切换。

注意:与某个异常级别(Exception Level, EL)相关联的寄存器对ELR_ELn(Exception Link Register)和SPSR_ELn(Saved Program Status Register)在较低异常级别执行期间保留其状态。

4.2 Processor state

AArch64没有与ARMv7的当前程序状态寄存器(Current Program Status Register, CPSR)直接等价的寄存器。在AArch64中,传统CPSR的组件被提供为可以独立访问的字段。这些字段统称为处理器状态(Processor State, PSTATE)。AArch64的处理器状态或PSTATE字段具有以下定义:

  1. 条件标志(Condition Flags):类似于ARMv7的N(负数)、Z(零)、C(进位)、V(溢出)标志,这些标志基于上一次算术操作的结果。

  2. 控制位(Control Bits):包括模式(M)、中断使能位(I、F)、当前程序状态信息等,用于控制处理器的行为和状态。

  3. 状态位(State Bits):例如,是否处于异常级别、是否使能中断等。

  4. 异常级别(Exception Level, EL):指示当前执行的异常级别。

  5. 安全状态(Security State, SS):指示当前是处于安全状态还是非安全状态。

  6. 执行状态(Execution State, ES):指示是处于AArch64还是AArch32执行状态。

  7. 栈指针(Stack Pointer, SP):指示当前使用的栈指针,例如SP_EL0或SP_EL1。

  8. 程序计数器(Program Counter, PC):指向当前正在执行的指令的地址。

  9. 其他位:可能包括用于特定系统操作或模式的其他控制和状态位。

PSTATE字段的设计允许更细粒度的控制和访问,提高了AArch64在不同执行环境和上下文中的灵活性和效率。开发者可以根据需要独立地访问和修改这些状态字段,而不是作为一个整体的CPSR来处理。这种设计也简化了对处理器状态的管理和异常处理的实现。

在AArch64中,您可以通过执行ERET(Exception Return)指令来从异常返回,这会导致SPSR_ELn的内容被复制到PSTATE。这一操作会恢复算术逻辑单元(ALU)的标志位(N、Z、C、V)、执行状态、异常级别,并使处理器跳转到相应的地址。从这里开始,处理器会继续从ELR_ELn中的地址执行。

PSTATE中的{N, Z, C, V}字段可以在EL0(用户模式)下访问。所有其他的PSTATE字段可以在EL1或更高级别上执行,在EL0下是未定义(UNDEFINED)的。

4.3 System registers

在AArch64中,系统配置通过系统寄存器进行控制,并通过MSR(Move to System Register)和MRS(Move from System Register)指令来访问。这与ARMv7-A不同,在ARMv7-A中,这些寄存器通常是通过协处理器15(CP15)操作来访问的。寄存器的名称告诉您它可以从哪个最低的异常级别访问。

例如:

  • TTBR0_EL1可以从EL1、EL2和EL3访问。
  • TTBR0_EL2可以从EL2和EL3访问。

带有_ELn后缀的寄存器在某些或所有级别上都有单独的、银行化的副本,尽管通常不在EL0。很少有系统寄存器可以从EL0访问,尽管Cache Type Register(CTR_EL0)就是这样一个可以从EL0访问的例子。

访问系统寄存器的代码采用以下形式:

assembly

; 将值移至系统寄存器 MSR <system_register>, <register>

; 从系统寄存器移出值 MRS <register>, <system_register>

这里,<system_register>是系统寄存器的名称,<register>是通用寄存器的名称,用于存储要写入系统寄存器的值或从系统寄存器读取的值。

这种设计允许更细粒度的控制和更清晰的指令集,同时也简化了对系统寄存器的访问方式。通过MSR和MRS指令,开发者可以在不同的异常级别上安全地配置和查询系统状态。

表格显示了具有每个寄存器独立副本的异常级别。例如,辅助控制寄存器(Auxiliary Control Registers, ACTLRs)分别存在于ACTLR_EL1、ACTLR_EL2和ACTLR_EL3,每个都对应不同的异常级别。

4.3.1 The system control register

系统控制寄存器(System Control Register, SCTLR)是一个控制标准内存、系统设施,并为核心中实现的功能提供状态信息的寄存器。以下是SCTLLR的一些关键特性:

  1. 内存管理控制:SCTLR包含多个位字段,用于控制内存系统的各个方面,例如缓存的使能、页表的配置等。

  2. 系统特性控制:它还控制一些系统特性,如中断向量的位置、系统访问权限等。

  3. 状态信息提供:SCTLR可以指示当前的系统状态,如是否处于安全模式或非安全模式。

  4. 核心功能配置:SCTLR允许配置核心的某些功能,如分支预测、流水线行为等。

  5. 异常级别影响:SCTLR的某些位可能受到当前异常级别(Exception Level, EL)的影响,不同级别上的行为可能会有所不同。

  6. 系统稳定性:通过合理配置SCTLR,可以提高系统的稳定性和性能。

  7. 系统设计者和开发者使用:系统设计者和软件开发者需要了解SCTLR的配置,以确保系统按照预期运行。

相关文章:

【ARM】v8架构programmer guide(3)_ARMv8的寄存器

目录 4.ARMv8 registers 4.1 AArch64 特殊寄存器 4.1.1 Zero register 4.1.2 Stack pointer &#xff08;SP) 4.1.3 Program Counter &#xff08;PC) 4.1.4 Exception Link Register(ELR) 4.1.5 Saved Process Status Register &#xff08;SPSR&#xff09; 4.2 Proc…...

SpringIOC整合dbUtil做的增删改查以及转账业务的实现

目录 一、xml方式实现 1.介绍lombok插件 2.功能 3.步骤 3.1 idea安装插件(只做一次) 3.2 添加坐标 3.3 编写注解 4.核心类 4.1 QueryRunner 4.2 query() 查询 4.3 update() 增删改 5.配置文件applicationContext.xml 6.junit测试 6.1使用步骤 6.1.1 坐标 6.1.2…...

【Nacos无压力源码领读】(二) 集成 LoadBanlancer 与 OpenFeign

上一篇文章中, 详细介绍了 Nacos 注册中心的原理, 相信看完后, 大家应该完全掌握了 Nacos 客户端是如何自动进行服务注册的, 以及 Nacos 客户端是如何订阅服务实例信息的, 以及 Nacos 服务器是如何处理客户端的注册和订阅请求的; 本文承上启下, 在订阅服务实例的基础上, 介绍如…...

CP AUTOSAR标准之DefaultErrorTracer(AUTOSAR_SWS_DefaultErrorTracer)(更新中……)

1 简介和功能概述 本规范描述了默认错误跟踪器的API。基础软件中检测到的所有开发和运行时错误都会报告给此模块。API参数允许跟踪错误来源和类型: 检测到错误的模块检测到错误的函数错误类型此模块API背后的功能不在本规范的范围内。软件开发人员和软件集成商应根据其特定应用…...

SpringMVC (发送请求——>参数传递—— >响应数据)

设置请求访问路径 RequestMapper&#xff1a;将请求访问路径和我们业务层的方法联系起来 ResponseBody&#xff1a;将我们业务层方法的返回值转化为json&#xff0c;xml或其他格式的数据返回给页面 两种请求 get请求 post请求 测试案例 RequestMapping("/getNameAndAge&…...

认识Modbus RTU与Modbus TCP

&#xff08;选自成都纵横智控-Modbus RTU与Modbus TCP协议区别详解 &#xff09; Modbus RTU 和 Modbus TCP 是两种常用的工业通信协议&#xff0c;用于连接电子设备&#xff0c;但它们在多方面有所不同。以下是它们的详细比较&#xff1a; Modbus RTU 协议类型&#xff1a; …...

如何在 Kubernetes 中使用 ClickHouse 和 JuiceFS

ClickHouse 结合 JuiceFS 一直是一个热门的组合&#xff0c;社区中有多篇实践案例。今天的文章来自美国公司 Altinity&#xff0c;一家提供 ClickHouse 商业服务的企业&#xff0c;作者是 Vitaliy Zakaznikov&#xff0c;他尝试了这个组合并公开了过程中使用的代码。原文有两篇…...

云计算任务调度优化matlab仿真,对比蚁群优化和蛙跳优化

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 ACO蚁群优化 4.2 蛙跳优化 5.完整程序 1.程序功能描述 云计算任务调度优化,优化目标位任务消耗时间&#xff0c;调度后的经济效益以及设备功耗&#xff0c;对比蚁群优化算法和蛙跳优化…...

基于双PI+EKF扩展卡尔曼滤波的PMSM速度控制simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 PMSM数学模型 4.2 双PI控制器设计 4.3 扩展卡尔曼滤波器(EKF) 4.4 控制系统实现 5.完整工程文件 1.课题概述 基于双PIEKF扩展卡尔曼滤波的PMSM速度控制simulink建模与仿真。对比基于双PI的扩展卡…...

医疗器械注册资源宝库数屿医械官方平台!

医学影像设备市场作为医疗器械领域的佼佼者&#xff0c;技术门槛高且规模庞大&#xff0c;2021年全球规模达458亿美元&#xff0c;预计2022年逼近500亿美元&#xff0c;增长动力源自技术革新与临床需求攀升。中国市场亦不甘落后&#xff0c;受政策驱动与市场需求双重提振&#…...

Django如何移除数据库字段?

关键步骤&#xff1a; 第一步&#xff1a;python manage.py makemigrations 你的项目名称第二步&#xff1a; python manage.py migrate (.venv) PS D:\python_workpace\django_xitong_shezhi\pythonProject\myproject> python manage.py makemigrations myproject Migra…...

阶段项目——拼图小游戏

Java学习笔记&#xff08;新手纯小白向&#xff09; 第一章 JAVA基础概念 第二章 JAVA安装和环境配置 第三章 IntelliJ IDEA安装 第四章 运算符 第五章 运算符联系 第六章 判断与循环 第七章 判断与循环练习 第八章 循环高级综合 第九章 数组介绍及其内存图 第十章 数…...

基于本地消息表实现分布式事务(最终一致性)

前言 传统单体架构下&#xff0c;所有的功能模块都在一个应用下&#xff0c;所有的代码和业务逻辑都在同一个应用下实现&#xff0c;所以保证数据的一致性就很简单&#xff0c;保证相关操作都在同一个本地事务下就可以了。 但是在微服务架构下&#xff0c;将一个应用拆分成了…...

大数据mapper书写范式hdfs

文章目录 1. 大数据mapper书写范式hdfs 1. 大数据mapper书写范式hdfs import json import sysdef read_input(input_stream):for line in input_stream:yield line.rstrip(\n)def load_json_data(json_line):try:data json.loads(json_line)unique_id data.get(id)combined_…...

ubuntu将软件放到任务栏

右键点击这个 pycharm 方法1&#xff1a; 方法2&#xff1a; sudo nano /usr/share/applications/PyCharm.desktop 编辑这个 [Desktop Entry] NamePyCharm CommentPyCharm Integrated Development Environment Exec/path/to/PyCharm.sh Icon/path/to/PyCharm.svg Terminalf…...

Spring Boot 参数校验 Validation 使用

概述 当我们想提供可靠的 API 接口&#xff0c;对参数的校验&#xff0c;以保证最终数据入库的正确性&#xff0c;是必不可少的活。前、后端校验都是保证参数的准确性的手段之一&#xff0c;前端校验并不安全&#xff0c;任何人都可以通过接口来调用我们的服务&#xff0c;就算…...

基于el-table的表格点选和框选功能

开篇 本篇文章旨在实现一个基于el-table的表格点选和框选功能&#xff0c;除此之外&#xff0c;还支持多种模式的切换、自定义勾选日期等。且&#xff0c;该表格后续可能还会持续优化&#xff01; 功能介绍 表格点选和框选功能&#xff08;没有点击ctrl键的情况下&#xff09;…...

LabVIEW压电陶瓷阻抗测试系统

开发了一种基于LabVIEW软件与PXI模块化仪器的压电陶瓷阻抗测试系统。该系统能在高电压工作条件下测量压电陶瓷的阻抗特性&#xff0c;包括阻抗模值与阻抗角的频率特性&#xff0c;为压电陶瓷的进一步分析与应用提供了重要参考。 项目背景 现有的阻抗测试仪大多只能在低电压条件…...

电销机器人能大幅度提升效率

1、安全稳定性能好 营销机器人的稳定性非常强&#xff0c;在使用性能方面会有更好的优势&#xff0c;而且用的过程中也可以不断的这些模块更新和功能升级&#xff0c;所以会不断的满足大家更多的使用要求&#xff0c;在操作使用的时候非常简单和方便&#xff0c;直接就可以给客…...

虚拟机能访问网页但ping不通百度

最近遇到了奇怪的问题&#xff0c;虚拟机能访问网页&#xff0c;但ping不通百度&#xff0c;记录一下问题的排查过程。 能访问网页&#xff0c;说明DNS、TCP和HTTP没有问题&#xff0c;ping不通&#xff0c;说明ICMP应该出了问题。 首先通过traceroute追踪报文的转发过程&…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...