嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容

一百二十三、计算机相关理论

123.1 计算机的组成

  • 目前的计算机都还是 冯·诺依曼体系 ,也就是由:输入、输出、运算器、存储器、控制器,这个五个部分构成。
  • 输入:Input,常见的输入设备,比如鼠标,键盘啥的
  • 输出:Output,常见的输出设备,比如音响(喇叭),显示器啥的
  • 运算器:ALU(Arithmetic Logical Unit),可以进行算术运算和逻辑运算,就是用来计算的
  • 存储器:用来存放数据的东西,存储器的体系为金字塔型,越往下读写速率越慢,存储空间越大,每 bit 价格越便宜,从上往下依次是
    • 最上面是 register(寄存器),
    • 然后是 L1cache、L2cache、L3cache(一般是三级cache,有些体系的计算机可能会用两级cache,早期的计算机有些是没有cache,有些是一级cache)、
    • main memory(主存,也被称为内存,就是内存条的那个内存)、
    • Auxiliary storage(辅存,一般是外接的存储器,比如硬盘,之前还有磁盘、磁带、光盘啥的)
  • 控制器:CU(Control Unit),其实就是个有限状态机,会根据每条指令的二进制代码,以及里面的状态码去分支执行不同的操作,这些都是逻辑门进行控制的。所以并没有啥译码功能,也就是根据传过来的不同指令去开不同的通道执行不同的功能罢了

嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第1张图片

123.2 程序编译的过程

  • 预处理,编译,汇编,链接
    预处理:将程序中所有以#开头的内容展开到当前文件中 gcc -E 1.c -o 1.i
    编译:检查语法错误,生成汇编程序 gcc -S 1.i -o 1.s
    汇编:将汇编程序编译为二进制程序 gcc -c 1.s -o 1.o
    链接:将程序中用到的一些库链接到程序中,生成二进制可执行文件 gcc 1.o -o a.out
    
  • 为啥需要编译:
    • CPU只能识别二级制的0和1,但其实它0和1都不识别,只能识别高电位和低电位,因此具象为0和1。
    • 想让CPU按照我们写的高级语言代码执行,那就需要将高级语言逐步转化为机器码,因此需要先生成汇编文件,然后根据汇编文件生成对应的二进制文件。
    • 而不同体系的CPU的汇编代码也怎么一致,因为里面CPU的架构不一样。
      嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第2张图片

123.3 指令与指令集

  • 指令有机器指令和汇编指令之分,不同体系的CPU之间它们的风格和内容也不一样。
    • 机器指令:由二进制0和1组成的代码,计算机可以通过0/1转换为的高电位低电位进行识别执行;RISC风格指令为定长的,CISC风格指令是变长的。
    • 汇编指令:由机器指令进行符号化抽象的结果。机器码的0和1不方便人的记忆与操作,故符号化一下方便人的使用。
  • 指令集:指令的集合,指令集中一般需要包含 运算类指令、程序流控制类指令、存储器访问类指令 这三种。

123.4 RISC(Reduced Instruction-Set Computer 精简指令集)和CISC(Complex Instruction Set Computer 复杂指令集)

123.4.1 RISC

  • 简介:RISC的指令系统相对简单,它只要求硬件执行很有限且最常用的那部分指令,大部分复杂的操作则使用成熟的编译技术,由简单指令合成。目前在中高档服务器中普遍采用这一指令系统的CPU,特别是高档服务器全都采用RISC指令系统的CPU。
    精简指令集是选取了一些比较简单、使用频率比较高的指令组成的指令集。
  • 特点:
    1. 指令定长:即每条机器指令所占的 bit 长度固定。
    2. 执行周期固定:一般是按照流水线的模式执行指令。比如 MIPS 的 五级流水线模型 为IF、ID、EX、MEM、WB,分别是 取指令、译码、执行、访问存储器、写回。有些指令可能不会执行某些周期,但是也要经过这一周期,就跟小学生排队打菜一样,一荤 一素 一米 一汤 一水果,这五个中某些可以不要,但是都要从前往后经过这些窗口。
    3. 基于精简指令集设计的CPU核心成本、功耗、体积更低,但是实现的功能也相对简单。

123.4.2 CISC

  • 简介:在CISC微处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。顺序执行的优点是控制简单,但计算机各部分的利用率不高,执行速度慢。其实它是英特尔生产的x86系列(也就是IA-32架构)CPU及其兼容CPU,如AMD、VIA的。即使是现在新起的X86-64(也被称为AMD64)都是属于CISC的范畴。
    CISC早期的计算机部件比较昂贵,主频低,运算速度慢。为了提高运算速度,人们不得不将越来越多的复杂指令加入到指令系统中,以提高计算机的处理效率,这就逐步形成复杂指令集计算机体系。
  • 特点:
    • 指令长度不固定:比如说 x86 架构,最短的指令NOP,只有一个 byte,而最长的指令却足有 15byte。
    • 执行周期不固定:每条指令中的各个操作也是按顺序串行执行的,因为最长的指令所需要的周期比较长,最短的比较短,所以就没有让二者看齐,不然会造成最长的指令没有执行完足够的功能,或者最短的指令浪费太久的时间。
    • 复杂指令集设计的CPU核心实现的功能更为复杂,但是功耗、成本都会更高。

123.5 流水线模型

  • 此处以MIPS的五级流水线为例
    嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第3张图片 嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第4张图片
    嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第5张图片
  • 忽略第一个图里面说的单周期数据通路,多周期数据通路是在上面再接几根线,保证数据的读写不会错乱,就先不上图了

一百二十四、ARM相关内容

  • ARM的流水线更抽象,直接整合为三个阶段:取指令,译码,执行。执行里面包括了访问存储器和写回。。。只能说,挺无奈

124.1 ARM 发展史

直接上链接:ARM发展史

124.2 ARM架构

  • 不同版本的指令集就是不同的架构
ARMV1-ARMV6:已经被淘汰
ARMV7架构:32位架构,支持32位指令集
ARMV8架构:64位架构,支持64位指令集,并且向下兼容32位指令
ARMV9架构:64位架构,支持64位指令集

124.3 ARM内核

  • 基于不同的ARM架构设计出来的不同的处理器核心叫做不同的ARM内核
arm7/arm9/arm11
cortex-A7			ARMV7
cortex-A53			ARMV8
cortex-A55			ARMV8
cortex-A77			ARMV8
cortex-A78			ARMV8
cortex-x1			ARMV8
cortex-A710			ARMV9
cortex-A510			ARMV9

124.4 SOC(system on chip 片上系统)

  • ARM公司只进行技术授权。将自己的IP授权给各个半导体公司。半导体公司根据ARM的授权,在CPU核心外围设计了一些外围电路和设备,集成在一个芯片上,这个芯片就被成为SOC。
  • SOC = CPU + 外设 + 总线
公司			SOC名称				内核			架构
ST				STM32MP157A			cortex-A7		ARMV7
三星			S5P6818				cortex-A53		ARMV8
海思			麒麟9000			cortex-A77		ARMV8
高通			骁龙888				cortex-x1		ARMV8

124.5 ARM的产品分步

124.5.1 Cortex-A系列

  • Cortex-A 系列的核心是 ARM 处理器中性能最强的、最完善的处理器。属于高端处理器
  • 在基于 Cortex-A 处理器为核心的开发板上可以搭载 linux / 鸿蒙 等标准化操作系统
    嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第6张图片

124.5.2 Cortex-R系列

  • Cortex-R 系列处理器追求系统的实时性能。对数阶的实时性要求高的场景下使用 Cortex-R 系列处理器汽车、军工
    嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第7张图片

124.5.3 Cortex-M系列

  • 属于 ARM 处理器中比较低端的芯片处理器,工作主频一般在 24M-256MHz 之间
  • Cortex-M 系列处理器一般不跑操作系统,主要执行一些裸机程序
  • Cortex-M 系列处理器可以搭载一些轻量级的实时系统 FreeRtos
    嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第8张图片

124.5.4 SecurCore系列

  • 用于对安全性能要求比较高的场景
    嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第9张图片

124.6 ARM数据约定

  • 一些数据大小的表述
ARM 约定:
Byte			8 bits.
Halfword		16 bits.
Word			32 bits.
Doubleword		64 bits.
  • 大部分ARM core 提供:
    ARM 指令集(32-bit)
    Thumb 指令集(16-bit )
  • Cortex-A处理器
    16位和32位Thumb-2指令集
    16位和32位ThumbEE指令集

124.7 ARM的工作模式

  • ARM 有7种基本工作模式:
User	:	非特权模式,大部分任务执行在这种模式

FIQ		:	当一个高优先级(fast) 中断产生时将会进入这种模式
IRQ		:	当一个低优先级(normal) 中断产生时将会进入这种模式
Supervisor	:	当复位或软中断指令执行时将会进入这种模式
Abort	:	当存取异常时将会进入这种模式
Undef	:	当执行未定义指令时会进入这种模式

System	:	使用和User模式相同寄存器集的特权模式

嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第10张图片

  • Cortex-A特有模式:
    Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式;也是一种特权模式。

HYP:虚拟化模式,当一个硬件上运行两种OS内核时进入这种模式。

124.8 存储器

124.8.1 存储器的金字塔模型

越往下读写速率越慢,存储空间越大,每 bit 价格越便宜,从上往下依次是,

  • 最上面是 register(寄存器),
  • 然后是 L1cache、L2cache、L3cache(一般是三级cache,有些体系的计算机可能会用两级cache,早期的计算机有些是没有cache,有些是一级cache)、
  • main memory(主存,也被称为内存,就是内存条的那个内存)、
  • Auxiliary storage(辅存,一般是外接的存储器,比如硬盘,之前还有磁盘、磁带、光盘啥的)

124.8.2 ARM v7架构下的寄存器组织

嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第11张图片

  • ARM 有37个32-Bits长的寄存器:
    1 个用作PC( program counter)
    1个用作CPSR(current program status register)
    5个用作SPSR(saved program status registers)
    30 个通用寄存器
    
  • Cortex体系结构下有40个32-Bits长的寄存器:
  • Cortex-A多出3个寄存器
    Monitor 模式  r13_mon ,  r14_mon,  spsr_mon
    
  • 当前处理器的模式决定着哪组寄存器可操作.
    • 任何模式都可以存取:
      对应的R0-R12子集
      对应的 R13 (the stack pointer, SP)、r14 (the link register, LR)、 R15 ( the program counter, PC)
      对应的CPSR(current program status register, CPSR)
      
    • 特权模式 (除system模式) 还可以存取:
      对应的 SPSR (saved program status register)
      

124.8.3 ARMV8架构寄存器组织

嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第12张图片

124.8.4 ARMV7架构下一些具有特定功能的寄存器

  • R13寄存器(the stack pointer, SP)

    R13 寄存器又叫 SP(栈指针寄存器),这个寄存器内部保存栈顶的地址
    一般在内存中分出一部分内存当作栈来使用,SP寄存器时钟保存栈顶空间的地址
    栈一般存放一些临时数据,也可以用于保护现场
    
  • R14寄存器(the link register, LR)

    R14寄存器又被称为链接寄存器,当程序在实现跳转的时候,LR寄存器中保存当前跳转指令下一条指令的地址。
    方便实现程序的返回
    
    程序的跳转实现:
        PC->跳转之后指令的地址
    程序的返回:
        PC=LR
    
  • r15寄存器(the program counter, PC)

    R15 寄存器又被称为 PC 寄存器(程序计数器,或者指令指针)
    这个寄存器始终保存马上要进行取址的指令的地址,当一条指令执行快结束之后PC寄存器的数值会自动向下+4
    另外,在特定情况下可以手动修改PC的值进行程序的跳转
    
  • CPSR寄存器(current program status register, CPSR)

    CPSR:程序状态寄存器
    这个寄存器中保存当前程序的运行状态,比如工作模式等信息
    

    嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容_第13张图片

  • SPSR寄存器(saved program status register)

    SPSR寄存器可以用于保存程序某一时刻的状态
    比如当发生异常之后,处理器的工作模式要切换到对应的异常模式去处理异常,
    这样CPSR的数值会发生对应的改变
    在处理完异常结束后,我们需要将CPSR的值修改为没有发送异常之前的状态,
    这个时候就可以将SPSR保存的异常发送之前的状态赋值给CPSR
    

你可能感兴趣的:(ARM,arm开发)