Risc-V学习日记02
Day3
应用程序<---->操作系统:系统调用(system call)
操作系统<---->处理器:指令集架构(ISA)<---->微架构
微架构[X86(AMD,Intel)]
作用:保护硬件被失控的软件应用程序滥用
向应用程序提供简单一致的"抽象接口"来控制复杂的多种外设硬件
ISA (Instruction Set Architecture)"指令集架构"{底层硬件电路面向上层软件程序提供的一层接口规范}
定义了{
基本数据类型BYTE(8bit)/HALFWORD(16bit)/WORD(32bit)/;
寄存器(Register);
指令;
寻址模式;
异常或者中断的处理方式;
...
}
CISC复杂指令集(Complex Instruction Set Computing)
{针对特定的功能实现特定的指令,导致指令数目比较多,但生成的程序长度相对较短。}
RISC精简指令集(Reduced Instruction Set Computing)
{只定义常用指令,对复杂的功能采用常用指令组合实现,这导致指令数目比较精简,但生成的程序长度相对较长。}
//准备面试先
//线上面试寄了
Day4
ISA (处理器) 的宽度指的是CPU中通用寄存器的宽度(二进制的位数),这决定了"寻址范围的大小"、以及"数据运算的能力"。
{
[8]位寄存器寻址范围:[2^8=256];{单片机8051}
[16]位寄存器寻址范围:[2^16=65536];{X86,8086;MSP430单片机}
[32]位寄存器寻址范围:[2^32=4294967296];{终端;个人计算机,服务器}
[64]位寄存器寻址范围:[2^64=18446744073709551616];{主流设备}
}
指令编码:变长或者固定长,X86就是变长,而RISC-V则是固定32位。
知名ISA{
复杂指令集:
X86:Intel
精简指令集:
SPARC:Sun
Power:IBM
ARM:ARM
MIPS:MIPS
RISC-V:
}
//歇了一天
Day5,6
RISC:{
简单;
清晰的分层设计;
模块化;
稳定;
社区化;
}
ISA的命名格式:RV[A][B]
RV:RISC-V的缩写
[A]:{32,64,128}用于标识处理器的字宽,也就是处理器的寄存器的宽度(单位为bit)
[B]:标识该处理器支持的指令集模块集合
例子:RV32IMA,RV64GC
模块化ISA:
由1个基本指令集+多个可选的扩展指令集组成。基础指令集是固定的,永远不会改变
基本整数(Integer)指令集{唯一强制要求实现的基础指令集,其他指令集都是可选的扩展模块}
基本指令集
{
RV32I:32位整数指令集
RV32E:RV32I的子集,用于小型的嵌入式场景[e:embedded嵌入式]
RV64I:64位整数指令集,兼容RV32I
RV128I:128位整数指令集,兼容RV64I和RV32I
}
扩展指令集
RISC-V允许在实现中以可选的形式实现其他标准化和非标准化的指令集扩展
特定组合"IMAFD"被称为"通用(General)" 组合,用英文字母"G"表示
{
M:整数乘法(Multiplication) 与除法指令
A:存储器原子(Automic) 指令集
F:单精度(32bit) 浮点(Float) 指令集
D:双精度(64bit) 浮点(Double) 指令,兼容F
C:压缩(Compressed) 指令集
...
}
例子:
RV32I:最基本的RISC-V实现
RV32IMAC: 32位实现,支持Integer +Multiply + Atomic + Compressed
RV64GC: 64位实现,支持IMAFDC
通用寄存器:
RISC-V的Unprivileged Specification定义了32个通用寄存器以及一个PC{
对RV32I/RV64I/RV128I都一样
如果实现支持F/D扩展则需要额外支持32个浮点(Float Point)寄存器。
RV32E将32个通用寄存器缩减为16个。
}
寄存器的宽度由ISA指定{
RV32的寄存器宽度为32位,
RV64的寄存器宽度为64位,依次
...
}
**HART:
{From the perspective of software running in agiven execution environment, a hart
is a"resource" that autonomously fetches and executes RISC-V instructions within
that execution environment.}
HART= HARdwareThread=硬件线程
指令执行流->HART(而不是处理器)
特权级别( Privileged Level)
RISC-V的Privileged Specification定义了三个特权级别(privilege level){
Level Encoding Name Abbreviation
0 00 User/ Application U
1 01 Supervisor S
2 10 Reserved
3 11 Machine M
}
上电时:RISC-v必须运行在Machine态,此时无虚拟地址,只有物理地址[Machine级别是最高的级别,所有的实现都需要支持。]
通过一定方法:Supervisor保护模式,开启虚拟地址
可选的Debug级别
Control and Status Registers (CSR){
不同的特权级别下时分别对应各自的一套Registers (CSR),用于控制(Control) 控制和获取相应Level下的处理器工作状态。
高级别的特权级别下可以访问低级别的CSR,譬如Machine Level下可以访问Supervisor/User Level的CSR,以此类推;但反之不可以。
RISC-V定义了专门用于操作CSR的指令( [参考1]中定义的"Zicsr"扩展)
RISC-V定义了特定的指令可以用于在不同特权级别之间进行切换( [参考1]中定义的ECALL/EBREAK)。
}
内存管理与保护
物理内存保护{
允许M模式指定U模式可以访问的内存地址。
支持R/W/X,以及Lock{
X-only只能执行(仅放指令在cpu执行)
RWX(既可以读"R"又可以写"W"还能执行"X")
Lock(不能使用)
}
}
MMU实现虚拟内存
虚拟内存保护{
需要支持Supervisor Level
用于实现高级的操作系统特性(Unix/Linux)
多种映射方式Sv32/Sv39/Sv48
}
异常和中断
异常{
CPU发现你的问题,执行异常发生程序[由自己编写]
异常发生程序结束后回到异常发生点继续执行
(给这个错误命令一个改过自新的机会)
{异常的发生反馈很大}
}
中断{
CPU发现你的问题,执行中断发生程序[由自己编写]
异常发生程序结束后回到异常发生点的"下一个命令"继续执行
(不给机会直接跳过)
{中断的发生没有反馈}
}
Risc-V学习日记02
于 2023-07-27 11:22:56 首次发布