从头开发一个RISC-V的操作系统(二)RISC-V 指令集架构介绍

文章目录

目标:通过这一个系列课程的学习,开发出一个简易的在RISC-V指令集架构上运行的操作系统。

前提

这个系列的大部分文章和知识来自于:[完结] 循序渐进,学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春,以及相关的github地址

在这个过程中,这个系列相当于是我的学习笔记,做个记录。

ISA的基本介绍

ISA是什么

指令集架构(ISA)是底层硬件电路向上层软件程序提供的一层接口规范。这样就为上层软件提供了一层抽象,让使用者不用操心具体的电路结构。

CISC vs RISC

复杂指令集(CISC):它针对特定的功能实现特定的指令,导致指令数目多,但生成的程序长度较短。

精简指令集(RISC):只定义常用指令,对复杂的功能采用常用指令组合进行实现。导致指令数目比较精简,但是生成的程序长度较长。'

ISA的宽度

这块需要重点理解。

ISA(处理器)的宽度指的是CPU中通用寄存器 的宽度(bit数),这决定了寻址范围的大小,以及数据运算的能力。

举个例子:32位的CPU,它的通用寄存器的宽度为32bit。如果我们给内存中的每一个空间进行编号,那么我们最多可以有多少个编号呢?(也就是最多可以找到多个地址呢?)

答案应该是 2 32 2^{32} 232个编号。假如通用寄存器的宽度位2bit,最多可以有 2 2 = 4 2^2=4 22=4个编号,00,01,10,11。这里也就可以回答为什么32位的CPU的内存空间最大是4GB,因为CPU最多可以寻址的内存单元数量为2的32次方,即4,294,967,296个单元,同时由于内存寻址是以字节为单位的,因此32位寻址架构可以寻址的最大内存量为4GB(4,294,967,296字节)。

注:ISA的宽度和指令编码长度无关。

RISC-V指令集

RISC-V 代表这Berkeley所研发的第五代精简指令集,该项目2010年始于加州大学伯克利分校。

RISC-V ISA的命名规范

ISA的命名格式:RV[###][abc...xyz]

其中:RV用于表示RISC-V体系结构的前缀,即RISC-V的缩写;[xxx] {32,64,128},处理器的通用寄存器的宽度;[abc..xyz]标识该处理器支持的指令集模块集合。

模块化的ISA

RISC-V的ISA是模块的ISA,模块化ISA的概念是:由1个基本整数指令集+多个可选的扩展指令集组成。基础指令集是固定的,永远不会变。

通用寄存器

RISC-V的非特权规格书(Unprivileged Specification)定义了32个通用寄存器以及一个PC寄存器(无法访问),寄存器的宽度由ISA指令,RV32的寄存器宽度为32bit,RV64的寄存器宽度为64bit。

Hart

HART = Hardware Thread()

这个属于是RISC-V中自己建立的,我的理解就是我们所说的CPU中核的概念,一个CPU有几个核对应到RISC-V中就是有几个Hart。

特权级别

RISC-V的特权规格书(Privileged Specification)定义了三个特权级别。这个可以理解为CPU的三种状态。我们知道Linux操作系统中有用户态和内核态。当我们的程序运行在用户态时,对应的就是进入User态,当运行在内核态,对应的就是进入Supervisor态。如果这里不太理解,可参考视频中的P4节。

Machine(机器态)级别是最高的,所有的实现都需要支持。

不同特权级别下分别对应各自的一套Registers(CSR),用于控制和获取相应Level下的处理器工作状态。高级别的特权级别下可以访问低级别的CSR,例如Machine可以访问Supervisor/User的CSR,但反之不可以。RISC-V定义了专门用于操作CSR的指令,同时也定义了特定的指令用于在不同级别中进行切换。

内存管理与保护

物理内存保护

虚拟内存:启用虚拟内存需要支持Supervisor Level。物理内存和虚拟内存之间的映射实际上是通过硬件实现的,我们称之为MMU(内存管理单元)

异常和中断

异常(Exception),当遇到异常指令时,CPU会执行一段异常处理程序。处理完毕后,它会再次执行这条异常指令,然后继续向下执行。主动触发

中断(Interrupt),当遇到中断时,CPU会执行中断程序,处理完毕后,它会从中断指令的下一条指令开始执行。被动触发

相关推荐
ChipCamp5 天前
ChipCamp探索系列 -- 1. Soft-Core RISC-V on FPGA
fpga开发·verilog·risc-v
ChipCamp8 天前
Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)
开发语言·青少年编程·fpga开发·scala·dsp开发·risc-v·chisel
思尔芯S2C10 天前
Cost-Effective and Scalable: A Smarter Choice for RISC-V Development
fpga开发·risc-v·soc设计·prototyping
ChipCamp12 天前
Chisel芯片开发入门系列 -- 14. CPU芯片开发和解释4(Load/Store指令再探)
arm开发·青少年编程·fpga开发·scala·dsp开发·risc-v·chisel
芝士爱沙拉15 天前
智能落地扇方案:青稞RISC-V电机 MCU一览
单片机·嵌入式硬件·risc-v·电机驱动
OpenAnolis小助手20 天前
RISC-V基金会Datacenter SIG月会圆满举办,探讨RAS、PMU性能分析实践和经验
开源·龙蜥社区·risc-v·datacenter sig·龙蜥社区risc-v sig
月光技术杂谈22 天前
《RISC-V 导论:设计与实践》开源课件(附下载链接)
开源·risc-v·课件
月光技术杂谈22 天前
上海RISC-V峰会-香山开源RISC-V CPU随想随记
verilog·risc-v·chisel·vhdl·香山·开源cpu·xiangshan
随风ada1 个月前
Windows、macOS、liunx下使用qemu搭建riscv64/linux
linux·windows·ubuntu·macos·golang·qemu·risc-v
openKylin1 个月前
填补空白!openKylin率先完成RISC-V商业打印驱动全适配
risc-v