第一章 Arm 架构概述(2023新)

news2024/12/24 9:26:58

第一章 启发式 Arm 架构解读

第二章 CPU微架构

第三章 系统微架构

第四章 总线微架构

第五章 监控微架构

第六章 安全微架构

第七章 虚拟化微架构

第八章 Armv9-A 架构

第九章 Armv8-M 架构

第十章 Armv8-R 架构

第十一章 Cortex-A715 解读

第十二章 Cortex-X3 解读

第十三章 Neoverse 解读

第十四章  Cortex-M85 解读

第十五章 Cortex-R82 解读

目录

前言

一、架构概述

1.1 冯诺依曼架构

1.2 哈佛架构

1.3 Arm 架构

二、架构图谱

2.1 三驾马车

2.2 六代传承

2.3 最新成员

2.3.1 大师兄 Cortex-A710

2.3.2 二师弟 Cortex-R82

2.3.3 小师妹 Cortex-M85

2.4 架构宗亲

2.4.1 图形处理器单元 GPU

2.4.2 神经网络处理器单元 NPU

三、架构魔法

3.1 派系

3.1.1 Cortex-A 魔法

3.1.2 Cortex-R 魔法

3.1.3 Cortex-M 魔法

3.2 时代

3.3 微魔法

四、架构演练

4.1 大集结

4.2 排兵布阵

4.3 运筹帷幄,决胜千里之外

4.3.1 上传下达-控制台输出

4.3.2  烽火通信-LED 跑马灯

4.3.3  密令签发-加密

4.3.4 粮草先行-启动代码

4.3.5 整装待发-链接脚本

五、总结

参考


前言


  • 提醒:全文10千字,预计阅读时长15分钟;
  • 读者:对 Arm 架构感兴趣的小伙伴;
  • 摘要:本文主要探讨了 Arm 架构的底层逻辑,介绍了Arm 架构的顶层设计;以处理器核心架构为基础,以系统架构为核心,以A系列和M系列架构为典型,对关键系统组件进行的通俗易懂的描述;本文提到的 Arm 架构不包含 GPU、NPU 架构;
b65ef10fac324ee59660050518a14dae.png

图1 Arm 知识结构

  • 关键词 :Arm架构、微架构、Cortex-A、Cortex-R、Cortex-M、Armv7、Armv8、Armv9、ISA、指令集、AMBA总线、Debug、Trustzone、虚拟化、EL-2、S-EL2、EL-1、S-EL1、操作系统、RISC-V;
  • 相关推荐:如果你对结构、架构、系统等概念感兴趣,建议阅读架构与系统 ;
  • 相关推荐:如果你对 Arm 公司感兴趣,建议阅读一文读懂Arm公司;

一、架构概述


1.1 冯诺依曼架构

  • ​冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。
  • 数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。​

1.2 哈佛架构

  • 哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。 简介 与两个存储器相对应的是系统的4条总线:程序和数据的数据总线与地址总线。

1.3 Arm 架构

  • Arm 架构指的是 Arm 处理器的体系结构,包含中央处理单元(CPU)微架构、系统微架构、总线微架构、监控微架构、安全微架构、虚拟化微架构。
    • CPU微架构指令集架构ISA的实现,包括 A32/T32、A64、NEON、VFP 等;
    • 系统架构集包括中断控制器 GIC /系统内存管理器 SMMU /电源管理 PSCA/APCI 等;
    • 总线微架构指的是 AMBA 微架构,包括 AHB、APB、AXI、CHI 等;
    • 监控微架构包括调试 debug, 跟踪 trace ;
    • 安全微架构包括 Trustzone、Realm、Crypto Cell、Crypto Island 等;
    • 虚拟化微架构包括 VMSA、LPAE、EL-2、S-EL2 等。
表1 微架构系统
CPU 微架构实现指令集架构的中央运算单元架构,A、R、M系列架构描述的就是 CPU 架构
系统微架构为了处理器各个组件能够正常运行而存在的系统组件架构
总线微架构将各个架构子系统连接起来的桥梁架构
监控微架构对系统各个架构组件进行调试、跟踪
安全微架构用来实现系统安全的架构集合
虚拟化微架构用来对硬件资源进行虚拟化的架构集合
1960bc48131140d382512892a00ad770.png

图2 Arm 处理器顶层架构

二、架构图谱


2.1 三驾马车

  • Arm 架构根据应用场景不同分为 Cortex-A、Cortex-M、Cortex-R 三个架构家族;
  • Arm A-Profile 架构主要包括用于移动、 PC 端的 Cortex-A 系列处理器、用于云计算和机器学习的高性能 Neoverse 处理器以及和客户合作开发的高效能 Cortex-X 系列处理器,后面两个系列可能形成独立系列;
  • Arm M-Profile 架构主要包括 Armv6 的 M0,Armv7 的 Cortex-M3、 Cortex-M4 ,Armv8 的 Cortex-M23、 Cortex-M33 、 Cortex-M35 、Cortex-M55 、Cortex-M85,用于通用 MCU 、IoT 物联网领域;
  • Arm R-Profile 架构主要包括 Armv7 的Cortex- R4、 Cortex-R5、 Cortex-R7、 Cortex-R8,Armv8 的 Cortex-R52 、Cortex-R82,用于实时控制领域。

每个架构家族演进既有独立性又有关联性。目前 A 系列已经演化到 Armv9 版本、M 系列演化到 Armv8 版本、R系列演化到 Armv8 版本,下面是每个家族代表性处理器的架构。

2.2 六代传承

  • Arm 架构从 Armv4 到 Armv9 已经经历了六个版本;
  • 目前市面活跃的是 Armv7、Armv8、Armv9 三个版本;
  • 各个版本引进/废弃了不同的功能特性,比如 Armv6 的 Trustzone、 Armv7 的虚拟化,Armv8 的向量扩展 SVE、Armv9 的矩阵扩展 SME 等。
2388f4e1e7f8491b988bc03adec5c13c.png

图3 架构版本

2.3 最新成员

2.3.1 大师兄 Cortex-A710

Cortex-A710 是 Cortex-A78 的增强版,Armv9-A 架构的大核架构,使用起来和上一代基本相同,新的微架构能获得更好的性能和更低的功耗;增强版的向量计算扩展架构 SVE2 支持;高级 SIMD&DSP 的 NEON 架构支持;兼容 VFPv3 向量浮点的 FPU 浮点架构。

c226a5ce47574600997ea9bb9cba97d1.png

图4 Cortex-A710 架构图

2.3.2 二师弟 Cortex-R82

Cortex-R82 是 R 系列最新的处理器,采用 Armv8 架构,包含 CoreSgiht MDT、GIC、FPU、TCM、SCU、ACP、AXI-S、AXI-M、LLPP、LLRAM 等微架构。

31901ecce3df20d171122f499b0dd644.png

图5 Cortex-R82 架构图

2.3.3 小师妹 Cortex-M85

M85 是 Armv8.1-M 架构,包括 MPU、Helium、PMU、CP、FPU、TCM、AHB、DSP、ETM、PACBTI、APH 等微架构。

e4db73fe82eb4c9b89bb2eeed5a2a7c6.png

图6 Cortex-M85 架构图

2.4 架构宗亲

本文讲述的 Arm 架构指的是通用处理器架构,并不包含专业处理器。除了通用处理器,Arm 还有图形处理器和神经网络处理器。

2.4.1 图形处理器单元 GPU

f4f5ee8a810d4094b885054cefd72f91.png

图7 Mali GPU 路线图

GPU 架构分为传统的 Mali 架构和最新的 Immortalis 架构两个分支:

  • Mali目前一共四代,分别是 Utgard,Midgard,Bifrost 和 Valhall
  • Immortalis 是新推出的架构,以Immortalis-G715 为代表

更多GPU架构知识,参考 Arm GPUs

2.4.2 神经网络处理器单元 NPU

e071fd03f129442786eb441d2c3bbf88.png

图8 Ethos NPU 家族

Ethos - NPUs 是Arm推出的基于神经网络的机器学习芯片架构,包括 U55、U65、 N78,

更多 NPU 知识,参考 Arm NPUs

三、架构魔法


架构魔法指的是架构特性,比如运算魔法、安全魔法、虚拟化魔法等,而这部分我们将从派系、时代、微魔法多个维度介绍这些神秘的魔法。

3.1 派系

3.1.1 Cortex-A 魔法

魔法8.0(Armv8.0-A)

  • Advance SIMD
    • aSIMD,增强的定长高级单指令多数据
    • 在 Armv8-A 中,与变长的 SVE、SVE2 共同构成了SIMD
    • SVE 主要用在 HPC 中,在 V9 中为标配
  • 密码扩展 (Crypto Extension ,CE)
    • AES加速器:AEAD、AESE
    • SHA加速器:SHA1、SHA256
  • CRC
    • 硬件 CRC 加速

魔法8.1(Armv8.1-A)

  • Atomic memory access instructions (AArch64)
    • 为大型 系统 LSE 设计的存储原子访问扩展,PostgreSQL 已经支持,比如独占加载指令LDXR、独占存储指令STXR
  • Limited Order regions (AArch64)
    • 为大系统LSE设计的内存访问顺序,load-aquire、store-release指令
    • 是乱序时代的DMB、DSB、ISB的升级版
  • Increased Virtual Machine Identifier (VMID) size, and Virtualization Host Extensions (AArch64)
    • 虚拟化中更大的虚拟机 ID
    • 直接将 Host 运行在 EL2 的 VHE 技术
  • Privileged Access Never (PAN) (AArch32 and AArch64)
    • 可以通过 PAN 限制内核对用户空间内存的访问

魔法8.2(Armv8.2-A)

  • Support for 52-bit addresses (AArch64)
    • 52位大物理地址和大虚拟地址的支持,通常面向服务器应用
  • The ability for PEs to share Translation Lookaside Buffer (TLB) entries (AArch32 and AArch64)
    • 多 PE 共享 TLB,即共享页表项
  • FP16 data processing instructions (AArch32 and AArch64)
    • 相对于单精度和双精度,支持半精度
  • Statistical profiling (AArch64)
    • 内置于流水线内部的指令统计工具,比如包延迟、采样指令的重要信息(access/hit/miss,分支预测错误,是否读写互锁)、源于哪一级的存储
  • Reliability Availability Serviceability (RAS) support becomes mandatory (AArch32 and AArch64)
    • 提供保证可靠性、可用性、可服务性的机制,TF-A 已经支持了 RAS 框架
  • 安全扩展 CE
    • SHA2-512、SHA3
    • SM3、SM4

魔法8.3(Armv8.3-A)

  • Pointer authentication (AArch64)
    • 对指令指针、数据指针进行身份认证
    • 目前GCC -msign-return-address 支持返回LR的认证
  • Nested virtualization (AArch64)
    • 允许客户机在 EL1 中运行虚拟机管理程序
    • 增加了 EL1 到 EL2 的访问机制
  • Advanced Single Instruction Multiple Data (SIMD) complex number support (AArch32 and AArch64)
    • aSIMD支持复数运算
  • Improved JavaScript data type conversion support (AArch32 and AArch64)
    • 改进的javascript数据类型转换支持
  • A change to the memory consistency model (AArch64)
    •  在RCsc基础上增加weaker RCpc支持
  • ID mechanism support for larger system-visible caches (AArch32 and AArch64)
    • cache ID寄存器扩容

魔法8.4(Armv8.4-A)

  • Secure virtualization (AArch64)
    • S-EL2支持,可以在安全环境下运行安全虚拟机
  • Nested virtualization enhancements (AArch64)
  • Small translation table support (AArch64)
  • Relaxed alignment restrictions (AArch32 and AArch64)
  • Memory Partitioning and Monitoring (MPAM) (AArch32 and AArch64)
  • Additional crypto support (AArch32 and AArch64)
  • Generic counter scaling (AArch32 and AArch64)
  • Instructions to accelerate SHA

魔法8.5/9.0(Armv8.5-A/Armv9.0-A)

  •  Memory Tagging (AArch64)
  • Branch Target Identification (AArch64)
  • Random Number Generator instructions (AArch64)
  • Cache Clean to Point of Deep Persistence (AArch64)
  • V5A​​​​​

魔法8.6/9.1(Armv8.6-A/Armv9.1-A)

  •  General Matrix Multiply (GEMM) instructions (AArch64)
  • Fine grained traps for virtualization (AArch64)
  • High precision Generic Timer
  • Data Gathering Hint (AArch64)
  • V6-A

魔法8.7/9.2(Armv8.7-A/Armv9.2-A)

  • Enhanced support for PCIe hot plug (AArch64)
  • Atomic 64-byte load and stores to accelerators (AArch64)
  • Wait For Instruction (WFI) and Wait For Event (WFE) with timeout (AArch64)
  • Branch-Record recording (Armv9.2 only)

魔法8.8/9.3(Armv8.8-A/Armv9.3-A)

  • Non-maskable interrupts (AArch64)
  • Instructions to optimize memcpy() and memset() style operations (AArch64)
  • Enhancements to PAC (AArch64)
  • Hinted conditional branches

3.1.2 Cortex-R 魔法

第七代魔法(Armv7-R)

第八代魔法(Armv8-R)

3.1.3 Cortex-M 魔法

第八代魔法(Armv8.0-M)

第八代魔法v1(Armv8.1-M)

  • MVE (M-Profile Vector Extension),Arm Helium
  • LoB/Loop Tail Predication/BF

  • Security

    • Execution permission
    • V8.2-M PAC(Pointer Authentication)
    • V8.2-M BTI(Branch Target Instructions)
    • DIT(Data Independent Timing)
    • UDE(Unprivileged Debug Extension)

3.2 时代

表2 魔法年份
2022A-PROFILE 2022
2021A-PROFILE 2021
2020A-PROFILE 2020
2019-
2018A-PROFILE 2018
2017A-PROFILE 2017
2016A-PROFILE 2016
2015A-PROFILE 2015
2014A-PROFILE 2014

3.3 微魔法

表3 技能表
NEON整数向量运算
VFP浮点向量运算
SVE变长向量扩展运算

查看ID_AA64xxxx系列寄存器识别当前 CPU 实现的架构特性。 

四、架构演练


4.1 大集结

随着时间的推移和需求变化,各个产品家族都演化出了多个成员,其中 Cortex-A 系列处理器从 A5到 A715 共发布了24款,Cortex-M 系列处理器从 M0 到 M85 共发布了11款,Cortex-R 系列处理器从 R4 到 R82 共发布了11款,对于各个处理器之间的差异,可以从下面链接表格中看到。

  • Arm Cortex-A 系列处理器功能对比表
  • Arm Cortex-M 处理器功能对比表
  • ArmCortex-R 处理器功能对比表

4.2 排兵布阵

不同的处理器可处理不同的应用。

在可穿戴方面,主要用 Cortex-A 和 Cortex-M ;存储方面 Cortex-R 和 Cortex-M ;在 ADAS 方面有 Cortex-A 和 Cortex-R ,A用于高性能计算、R用于实时和安全控制;在移动消费市场,Cortex-A、Cortex-R 和 Cortex-M 都有应用,A 来做应用处理器,R 主要是做基带,Cortex-M 可能会用于sensor hub (传感器中枢)的芯片领域。

eb1e225e3db142c1921f65e2e09ace42.png

图7 应用领域

4.3 运筹帷幄,决胜千里之外

4.3.1 上传下达-控制台输出

/*Hello world*/
 
#include <stdio.h>
 
int main()
 
{
 
    printf("Hello World\n");
 
    return 0;
 
}

4.3.2  烽火通信-LED 跑马灯

#include"led.h"

void LED_Init(void)
{
    RCC->APB2ENR|=1<<2;
                  
    RCC->APB2ENR|=1<<5; 
    GPIOA->CRH&=0XFFFFFFF0;
    GPIOA->CRH|=0X00000003;
                          
    GPIOA->ODR|=1<<8;    
    GPIOD->CRL&=0XFFFFF0FF;
    GPIOD->CRL|=0X00000300;   
                           
    GPIOD->ODR|=1<<2;
}

4.3.3  密令签发-加密

void mbedtls_aes_encrypt( mbedtls_aes_context *ctx,
                           const unsigned char input[16],
                           unsigned char output[16] )
 {
     int i;
     uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
 
     RK = ctx->rk;
 
     GET_UINT32_LE( X0, input,  0 ); X0 ^= *RK++;
     GET_UINT32_LE( X1, input,  4 ); X1 ^= *RK++;
     GET_UINT32_LE( X2, input,  8 ); X2 ^= *RK++;
     GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++;
 
     for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- )
     {
         AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 );
         AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 );
     }
 
     AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 );
 
     X0 = *RK++ ^ 
             ( (uint32_t) FSb[ ( Y0       ) & 0xFF ]       ) ^
             ( (uint32_t) FSb[ ( Y1 >>  8 ) & 0xFF ] <<  8 ) ^
             ( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^
             ( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 );
 
     X1 = *RK++ ^ 
             ( (uint32_t) FSb[ ( Y1       ) & 0xFF ]       ) ^
             ( (uint32_t) FSb[ ( Y2 >>  8 ) & 0xFF ] <<  8 ) ^
             ( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^
             ( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 );
 
     X2 = *RK++ ^ 
             ( (uint32_t) FSb[ ( Y2       ) & 0xFF ]       ) ^
             ( (uint32_t) FSb[ ( Y3 >>  8 ) & 0xFF ] <<  8 ) ^
             ( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^
             ( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 );
 
     X3 = *RK++ ^ 
             ( (uint32_t) FSb[ ( Y3       ) & 0xFF ]       ) ^
             ( (uint32_t) FSb[ ( Y0 >>  8 ) & 0xFF ] <<  8 ) ^
             ( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^
             ( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 );
 
     PUT_UINT32_LE( X0, output,  0 );
     PUT_UINT32_LE( X1, output,  4 );
     PUT_UINT32_LE( X2, output,  8 );
     PUT_UINT32_LE( X3, output, 12 );
 }

4.3.4 粮草先行-启动代码

.text
.global _start
_start:

@异常向量表

b reset
nop		
b swi_handler
nop
nop
nop
b irq_hander
nop
reset:
ldr sp,=buf+512*3
@irq模式
mrs r0,cpsr
bic r0,#0x1f
orr r0,#0x12
msr cpsr,r0
ldr sp,=buf+512*2
@user模式
mrs r0,cpsr
bic r0,#0x1f
orr r0,#0x10
msr cpsr,r0
ldr sp,=buf+512

mov r0,#0x11
mov r1,#0x22
SWI	1
add r2,r0,r1
nop
nop

stop:
	nop
    nop
    nop
    B stop

@软中断
swi_handler:
	@入栈保护现场
	stmfd sp!,{r0-r12,lr}
	mov r0,#0x1f
	mov r1,#0x2f
	mov r2,#0x3f
	mov r3,#0x4f
	mov r4,#0x5f
	@出栈 恢复现常,还原模式	spsr->cpsr
	@lc -> pc
	ldmfd sp!,{r0-r12,pc}^
	@mov pc,lr

@中断
irq_hander:
	@入栈保护现场
	stmfd sp!,{r0-r12,lr}

	@中断处理
	@switch(irqnum)

	ldmfd sp!,{r0-r12,pc}^
	
.DATA
buf:
	.space 512*3

.end

4.3.5 整装待发-链接脚本


SECTIONS
{
    . = 0x80000,
    .text.boot :{*(.text.boot)}
    .text : {*(.text)}
    .rodata : {*(.rodata)}
    .data : {*(.data)}
 
    . = ALIGN(0x8);
    bss_begin = .;
    .bss :{*(.bss*)}
    bss_end = .;
 
    . = ALIGN(4096);
    init_pg_dir = .;
     += 4096;
}

五、总结


从过程角度来看,本文以架构概述、架构发展、架构特性、架构演练为主线对 Arm 架构进行了启发式的介绍。从金字塔式知识结构角度来看,本文涉及到了计算机体系结构、Arm 系统架构、微架构、处理器编程模型、应用编程;从系统思维角度来看,本文只是对于读者很可能是浮光掠影,蜻蜓点水,所以后面章节会更加系统化、体系化、深入的讲述 Arm 架构。

参考


  • Arm CPU架构参考手册合集
  • AMBA 总线微架构参考手册合集
  • 系统微架构参考手册合集
  • 指令集微架构参考手册合集
  • 安全微架构参考手册合集
  • 功耗控制系统架构PSCA

术语

图灵机

一个抽象的机器、思想模型;

总线 

计算机各种功能部件之间传送信息的公共通信干线;

Trustzone

通过隔离实现可信域的技术;

Hypervisor

虚拟机监视器,是用来建立与执行虚拟机器的软件、固件或硬件。

分享知识是一种美德,如果你感觉这篇文章写的还不错,请点赞、收藏、分享。

下一章 CPU微架构

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

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

相关文章

图片怎么转成PDF格式?介绍三种转换思路

PDF文件作为一类办公常见格式&#xff0c;很多场合都会使用到。有时我们需要将图片转成PDF格式以方便归纳整理。图片资料怎么转成PDF呢&#xff1f;给大家介绍几个手机和电脑都可以用的方式。希望对你有帮助。方法一、用文件自带的转换功能将图片转成PDF随意打开一个PDF文件后&…

Github每日精选(第94期):免费网页在线情况监控

Upptime Upptime 是开源的正常运行时间监控和状态页面&#xff0c;完全由 GitHub Actions、Issues 和 Pages 提供支持。 Upptime 是 [GitHub Actions] 的一个非常巧妙的用法。您基本上可以根据需要获得免费的可配置正常运行时间监视器。 github 地址在这里。 特点 利用 G…

CTPN的Python实现笔记一

文章目录一、疑难代码讲解1. 文本框左上角标注置信度(1) s str(round(i[-1] * 100, 2)) %(2) cv2.putText() 函数(3) cv2.line()函数2. 文本框进行扩展操作3. 文本框进行NMS操作(1) 非极大值抑制函数def nms(dets, thresh):a. order scores.argsort()[::-1]b. xx1 np.maxim…

[oeasy]python0068_控制序列_清屏_控制输出位置_2J

光标位置 回忆上次内容 上次了解了键盘演化的过程 ESC 从 组合键到 独立按键 ESC 的目的 是进入控制序列配置控制信息 控制信息 \033[y;xH 设置光标位置\033[2J 清屏 这到底怎么控制来着&#xff1f;&#xff1f;&#xff1f;&#x1f914;现在 系统里 这些行为 是谁来实现的…

【机器学习 - 6】:梯度下降法(第一篇)

文章目录梯度下降法的理解图解极值点和最值点梯度下降法的求导运算公式推导梯度下降法的实现梯度下降法的理解 梯度下降法不是一个机器学习算法&#xff0c;既不是在做监督学习&#xff0c;也不是在做非监督学习&#xff0c;是一种基于搜索的最优化方法。 作用&#xff1a;最小…

【2319. 判断矩阵是否是一个 X 矩阵】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 如果一个正方形矩阵满足下述 全部 条件&#xff0c;则称之为一个 X 矩阵 &#xff1a; 矩阵对角线上的所有元素都 不是 0 矩阵中所有其他元素都是 0 给你一个大小为 n x n 的二维整数数组 grid &a…

JVM虚拟机知识总结

什么是虚拟机&#xff1f;从字面意思上来看&#xff0c;顾名思义即使一台虚拟的计算机&#xff0c;用来执行虚拟的计算机指令&#xff0c;从大体上来看&#xff0c;虚拟机一般分为两种。一种是系统虚拟机&#xff0c;另外一种是程序虚拟机。系统虚拟机&#xff1a;代表为VMware…

微信小程序 java中医知识库百科科普

中管理员的主要功能有&#xff1a; 1.管理员输入账户登陆后台 2.个人中心&#xff1a;管理员修改密码和账户信息 3.用户管理&#xff1a;对注册的用户信息进行删除&#xff0c;查询&#xff0c;添加&#xff0c;修改 4.中医知识管理&#xff1a;对中医的知识信息进行添加&#…

什么是地址解析协议 (ARP)?

最近不想更文章了&#xff0c;药吃完了&#xff0c; 本文目录地址解析协议 &#xff08;ARP&#xff09; 含义ARP 是做什么的&#xff0c;它是如何工作的&#xff1f;地址解析协议与 DHCP 和 DNS 的关系是什么&#xff1f;它们有何不同&#xff1f;ARP 有哪些类型&#xff1f;1…

应急救护培训报名-因疫情原因,暂停开班?

应急救护培训报名背景和急救证书区别2023年一定要被培训项目报名渠道状态上海市红十字应急救护培训上海市医疗急救中心公众课程专业课程背景和急救证书区别 关于背景和急救证书区别&#xff0c;请参考&#xff0c;程序员的生命与急救 文章 2023年一定要被培训项目 由于疫情原…

Springboot+vue冷冻仓储进销存管理系统 java

端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 系统分为不同的层次&#xff1a;视图层&#xff08;vue页面&#xff09;&#xff0c;表现层&#xff08;控制器类&#xff09;&#xff0c;业务层&#xff08;接口类&#xff09;和持久层&a…

php宝塔搭建部署实战易优游戏竞技公司网站源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套php开发的易优游戏竞技公司网站源码&#xff0c;感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&#xff…

SpringBoot或SpringCloud集成Nacos

一、创建一个项目首先创建一个空项目&#xff0c;然后引入Nacos的依赖&#xff0c;并选择正确的SpringBoot和Nacos版本&#xff0c;如果版本选择不对的话可能会启动失败&#xff0c;带来很大的问题<!--SpringBoot的版本--><parent><groupId>org.springframew…

详解axios(快速入门)

axios这一篇就够啦~axios1、axios的理解和使用1.1 axios概述1.2 axios特点1.3 axios常用语法1.4 难点语法的理解和使用2、axios源码分析2.1 源码目录结构2.2 源码分析axios 1、axios的理解和使用 1.1 axios概述 前端最流行的ajax请求库 react/vue官方都推荐使用axios 发ajax…

推荐系统与深度学习关联

6.1 推荐系统与深度学习关联 学习目标 目标 无应用 无 6.1.1 深度学习到推荐系统 深度学习发展成功与局限 最近几年深度学习的流行&#xff0c;大家一般认为是从2012年 AlexNet 在图像识别领域的成功作为一个里程碑。AlexNet 提升了整个业界对机器学习的接受程度&#xff1…

如果把小程序业务和研发管理都放到一个平台

伴随着互联网在中国进程的发展&#xff0c;线上研发效能及业务应用软件也不落后于时代进步的脚步&#xff0c;中国软件行业从未停止过持续的创新。 2022年&#xff0c;业务应用开发正在简化&#xff0c;研发效能也在提升&#xff0c;其中不得不提软件在协同促进、研发一体化管…

MyBatis 一级二级缓存【学习记录】

一级缓存 1&#xff09;首先做个测试&#xff0c;创建一个mapper配置文件和mapper接口&#xff0c;我这里用了最简单的查询来演示。 <mapper namespace"cn.elinzhou.mybatisTest.mapper.UserMapper"><select id"findUsers" resultType"cn.…

Linux关于执行文件路径的变量:$PATH

目录 前言 环境变量PATH 问题思考 总结 前言 Linux目录的配置都是依据FHS&#xff0c;FHS的标准文件指出&#xff0c;它们的主要目的是希望让用户可以了解到已安装软件通常放置于哪个目录下。也就是说&#xff0c;FHS的重点在于规范每个特定的目录下应该要放置什么样子的数…

Docker搭建私有仓库

搭建私有仓库 参考地址&#xff1a;搭建私有仓库 安装运行 docker-registry 查看docker存储路径与对应路径下的大小 docker info | grep Dir查看对应路径下的大小 du -sh /var/lib/docker如果大小没有问题的话就可以直接安装了 拉取registry镜像并运行 docker run -d \-…

数据库常用语句练习总结

show databases; 显示数据库 use student; 使用该数据库 3.show full columns from student; 展示数据库所有的字段 show columns from student; 展示数据库添加的字段 alter table student change column Sname Snames char(200); 添加 student表中的字段 alter tabl…