计算机理论
计算机组成
输入设备、输出设备、运算器、控制器、存储器
1.输入设备:将编写好的软件代码以及相关的数据输送到计算机中,转换成计算机能够识别、处理和存储的数据形式 键盘、鼠标、手柄、扫描仪、
2.输出设备:将计算机处理好的数据的结果通过输出设备输出到计算机的外部 显示屏、打印机、音响。。
3.存储器:计算机用于存放数据以及指令的部件。也是计算机实现"程序存储控制"的基础 外部存储器、内存、cache、寄存器
4.控制器(CU):计算机的控制中枢,对机器指令进行译码操作,并且按照译码之后的结果进行相关的控制
5.运算器(ALU):算数逻辑运算单元:根据控制器译码之后的指令和数据,进行算数逻辑运算,并且把运算的结果进行输出
编译原理
程序编译步骤:预处理、编译、汇编、链接
程序编译的原理:
CPU能够识别的唯一的语言是机器语言。一个CPU能够识别哪一些机器语言是由CPU的硬件(运算器的类型)决定的。
不同的机器指令代表不同的运算。相同运算在不同的机器上的机器指令不一定一样,不同的机器的机器指令不通用,不可移植。汇编指令就是特定机器指令的标志。汇编指令也是不通用的。我们可以采用不同的编译工具编译程序生成可以被不同架构的机器识别的机器指令文件
指令和指令集
- 机器指令(指令的机器码):由二进制的0和1组成的一条机器码。计算机解析这条机器码可以做相应的运算处理
- 汇编指令:一条汇编指令就是一条机器指令的标志。执行汇编指令也可以让机器进行相关的运算处理
- 指令集:指令的集合
RISC(精简指令集)和CISC(复杂指令集)
RISC(精简指令集)的架构主要应用于嵌入式的设备上
精简指令集是选取了一些比较简单、使用频率比较高的指令组成的指令集
精简指令集的特点:
1.指令的长度和指令的执行周期固定 指令的长度:一条机器码在计算机中占用的空间 指令的周期:CPU执行一条指令花费的时间(时钟周期) 时钟周期:CPU主频率
2.基于精简指令集设计的CPU核心成本、功耗、体积更低,但是实现的功能也相对简单
CISC(复杂指令集) 基于复杂指令集设计的CPU核心更加注重功能的完善性,复杂指令集内核会集合各自各样的指令。
特点:
1.指令的长度和执行周期不固定
2.复杂指令集设计的CPU核心实现的功能更为复杂,但是功耗、成本都会更高
目前几种主流的RISC内核
ARM内核:主流的嵌入式内核,需要得到ARM的授权
RISC-V:正在快速发展,未来会成为主流
MIPS:完全闭源,中国龙芯科技直接买断,完全垄断,在它的基础上还进行了一些拓展
ARM
ARM架构
不同版本的指令集就是不同的架构
ARMV1-ARMV6:已经被淘汰 ARMV7架构:
32位架构,支持32位指令集 ARMV8架构:
64位架构,支持64位指令集,并且向下兼容32位指令 ARMV9架构:
64位架构,支持64位指令集
ARM内核
基于不同的ARM架构设计出来的不同的处理器核心叫做不同的ARM内核
SOC(system on chip)
ARM公司只进行技术授权。将自己的IP授权给各个半导体公司。半导体公司根据ARM的授权,在CPU核心外围设计了一些外围电路和设备,集成在一个芯片上,这个芯片就被成为SOC。
SOC由CPU+外设备+总线组成
MCU(微控制器) MPU(微处理器)
公司 SOC名称 内核 架构
ST STM32MP157A cortex-A7 ARMV7
三星 S5P6818 cortex-A53 ARMV8
海思 麒麟9000 cortex-A77 ARMV8
高通 骁龙888 cortex-x1 ARMV8
ARM的产品分步
Cortex-A系列
Cortex-A系列 的核心是ARM处理器中性能最强的、最完善的处理器。属于高端处理器 在基于Cortex-A处理器为核心的开发板上可以搭载linux/鸿蒙灯标准化操作系统
Cortex-R系列
Cortex-R系列 处理器追求系统的实时性能。对数阶的实时性要求高的场景下使用Cortex-R系列 处理器 汽车、军工
Cortex-M系列
属于ARM处理器中比较低端的芯片处理器,工作主频一般在24M-256MHz之间 Cortex-M系列 处理器一般不跑操作系统,主要执行一些裸机程序 Cortex-M系列 处理器可以搭载一些轻量级的实时系统 FreeRtos
SecurCore系列
用于对安全性能要求比较高的场景
ARM数据约定
A7采用的是32位架构.
Byte 8 bits.
Halfword 16 bits.
Word 32 bits.
Doubleword 64 bits.
32位指令集:一条指令占据存储空间的大小是32位
32位处理器:处理器一条指令最大能进行32位数据的运算
大部分ARM core 提供:
ARM 指令集(32-bit)
Thumb 指令集(16-bit )
Cortex-A处理器
16位和32位Thumb-2指令集
16位和32位ThumbEE指令集
ARM的工作模式
ARM 有7种基本工作模式:
User : 非特权模式,大部分任务执行在这种模式
FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式
IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式
Supervisor :当复位或软中断指令执行时将会进入这种模式
Abort : 当存取异常时将会进入这种模式
Undef : 当执行未定义指令时会进入这种模式
System : 使用和User模式相同寄存器集的特权模式
Cortex-A特有模式: Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式; 也是一种特权模式
HYP:虚拟化模式,当一个硬件上运行两种OS内核时进入这种模式
ARM寄存器组织
计算机内部存储模块介绍
寄存器概念
寄存器是集成在CPU内部的存储组织,CPU访问寄存器数据的时候只需要根据寄存器的编号就可以访问到寄存器的数值。访问寄存器的速度块。但是寄存器存在数量限制,保存的数据量也很少
ARM v7架构下的寄存器组织
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) and r14 (the link register, lr)
相应的 r15 ( the program counter, pc)
相应的CPSR(current program status register, cpsr)
特权模式 (除system模式) 还可以存取:
相应的 spsr (saved program status register)
每一个寄存器大小都是32位
ARMV8架构寄存器组织
ARMV7架构下一些具有特定功能的寄存器
R13寄存器(the stack pointer, sp)
R13寄存器又叫SP(栈指针寄存器),这个寄存器内部保存栈顶的地址 一般在内存中分出一部分内存当作栈来使用,SP寄存器时钟保存栈顶空间的地址 栈一般存放一些临时数据,也可以用于保护现场
r15寄存器(the program counter, pc)
R15寄存器又被称为PC寄存器(程序计数器) 这个寄存器始终保存马上要进行取址的指令的地址,当一条指令执行结束之后PC寄存器的数值会自动向下+4 另外,在特定情况下可以手动修改PC的值进行程序的跳转
R14寄存器(the link register, lr)
R14寄存器又被称为链接寄存器,当程序在实现跳转的时候,LR寄存器中保存当前跳转指令下一条指令的地址。方便 实现程序的返回 程序的跳转实现: PC-》跳转之后指令的地址 程序的返回: PC=LR
CPSR寄存器(current program status register, cpsr)
CPSR:程序状态寄存器
这个寄存器中保存当前程序的运行状态,比如工作模式等信息
SPSR:saved program status register
SPSR寄存器可以用于保存程序某一时刻的状态
比如当发生异常之后,处理器的工作模式要切换到对应的异常模式去处理异常,这样CPSR的数值会发生对应的改变 在处理完异常结束后,我们需要将CPSR的值修改为没有发送异常之前的状态,这个时候就可以将SPSR保存的异常发送之前的状态赋值给CPSR
1. N[31] : 指令的运行结果为负数时,N位被自动置1,否则为0.
eg : 100 - 200
2. Z[30] : 指令的运行结果为零时,Z位被自动置1,否则为0.
100-100
3. C[29] :
加法:加法运算如果产生进位,C位被自动置1,否则为0.
32位指令:低32位向高32位进位 0XFFFFFFFF+1
减法:减法运算如果产生借位,C位被自动清0,否则位1.
32位指令:低32位向高32位借位 1-0XFFFFFFFE
4. V[28] : 符号位发送变化,V位被自动置1,否则清0.
5. I[7] : IRQ中断屏蔽位 I = 0 : 不屏蔽IRQ中断 I = 1 : 屏蔽IRQ中断
6. F[6] : FIQ中断屏蔽位 F = 0 : 不屏蔽FIQ中断 F = 1 : 屏蔽FIQ中断
7. T[5] : 状态位
T = 0 : 表示ARM状态,执行的是ARM指令集
T = 1 : 表示Thumb状态,执行的是Thumb指令集
ARM指令集 : 一条汇编指令编译生成32位的机器码
thumb指令集:一条汇编指令编译生成16位的机器码
ARM指令集的代码的密度低,而thumb指令记得代码密度高。
ARM指令集的功能性要高于Thumb指令集。
8. M[4:0] : 模式位
10000 User mode;
10001 FIQ mode;
10010 IRQ
10011 SVC mode;
10111 Abort mode;
11011 Undfined mode;
11111 System mode;
10110 Monitor mode;
其他没有使用到的值,保留。
ARM的流水线工作
一条指令的执行过程
取址:CPU将PC寄存器中保持的指令地址通过地址总线传输给存储器,存储器将PC对应的指令通过数据总线传输给CPU。CPU将指令保存在IR(指令暂存寄存器)寄存器中
译码:IR寄存器的指令交给译码器,对指令进行译码
执行:译码器对指令译码之后由运算器对译码之后的指令进行运算
ARM三级流水线
当一条指令在被取址是,译码模块和执行模块处于空闲状态,这样这两个模块相当于没有得到充分利用。为了充分,利用资源,ARM引入了流水线工作,增加了指令的处理速度