【RISC-V操作系统】从零开始写一个操作系统(二)RISC-V ISA介绍与学习

 先给出一个参考资料:risc-v中文手册

到这依然没有开始实践操作,而是来了解学习RISCV的ISA。

一.什么是ISA

指令集架构(instruction set architecture):是底层硬件电路面向上层应用程序提供的一层接口规范。

定义了什么

  1. 基本数据类型(byte,halfword,word)
  2. 寄存器
  3. 指令
  4.  寻址模式
  5. 异常或者中断的处理方式
  6. 等等。。

也就是操作系统和底层硬件之间的东西。是一种规范。这里的底层硬件可能指的是微架构。比如有一个指令集架构叫做x86,那么除了intel还有amd在做x86这一套指令集。两个硬件结构不同,但是都实现的一种微架构。理解为:微架构就是对这个指令集的实现。

1.为什么要ISA

分层,开发操作系统就不需要关注底层硬件电路结构了。

和指令集架构相关的一些概念

cisc(complex instruction set computing):复杂指令集。针对特定功能设计指令,导致指令较长,但生成程序较短。

risc(reduced instruction set computing):精简指令集。只设计常用指令,复杂功能由其组合而成,导致指令较短,但是生成的程序会较长。

趋势:正在相互融合。

2.ISA的宽度

指的是cpu中通用寄存器的宽度(二进制的位数)。注意isa的宽度(cpu宽度)和指令编码长度无关。比如risc-v不管是64位还是32位,指令编码宽度都是32位。

常见ISA:x86,sparc,power,arm,mips,risc-v。除了x86都是risc架构。

二.RISC-V的历史

来自于一所大学,用于科研教学时的架构选择时,因为ip原因和比较复杂不适合教学。于是他们自己着手开发的一个指令集架构,最后得到我们的第五代:也就是risc-v。开源的原因就是因为不在一家公司的手里,为了管理,后来还成立了一个基金会。

risc-v到底是什么?

  • 一款高质量,免许可证,开放的risc ISA。
  • 一套由非盈利的RISC-V基金会维护的标准。
  • 适用于所有类型的计算系统。从微控制器到超级计算机。
  • RISC-V不是一家公司,也不是一个或一款cpu实现。(是一个标准) 

risc-V发展现状

这是一款新兴的指令集架构,中国对于芯片这些也很重视,对于这些卡脖子的技术。值得一提的是,基金会也搬到中立国了。

三.risc-v的特点

  1. 简单
  2. 清晰的分层设计(特权级别)
  3. 模块化
  4. 稳定
  5. 社区化

可以在官方网站下载到risc-v标准文件。特权指令和非特权指令。

1.ISA命名格式

RV[###][abc...xyz]

RV:即risc-v的缩写。

###:32位,64位,处理器字宽。

abc...xyz:标识该处理器支持的指令集模块集合。

例如:RV32IMA,RV64GC。

2.增量的ISA

在增添新扩展的同时,还要支持旧拓展。如x86架构的指令集到现在还支持很老的处理器。导致了学习成本和开发成本很高。所以模块化的ISA是很有必要的。也就是抛弃完全增量。

那么基础就是基础整数指令集(字母I),这就是risc-v所要求必须实现的模块。

RV32I:32位基础整数指令集。

RV32E:前者的子集。主要用于嵌入式场景。(这里的字母E指的是embedded)

RV64I:64位基础整数指令集,兼容32位。

RV128I:64位基础整数指令集,兼容32,64位。

M:整数乘除法 multiplication

A:存储器原子指令集 atomic

F:单精度浮点指令。(32bitfloat)

D:双精度浮点指令。(64bitdouble)

C:压缩指令集(compressed)(指令长度压缩)

。。。等等

IMAFD被称为G(general)

3.通用寄存器的概念

非特权文档(unprivileged specification)定义了32个通用寄存器以及一个PC(程序计数器)。如果实现浮点单/双精度的扩展则要额外多32个浮点寄存器。对于RV32E,embedded,则是将寄存器缩少到16个。寄存器的宽度由ISA指定,RV32I为32位,RV64I为64位。

每个寄存器都有特定用途与别名。由risc-v application binary interface(ABI)定义。PC在risc-v指令集架构不暴露出来。

4.HART=HARdware Thread

硬件线程的概念。cpu如果只有一个cu,那就只有一个指令执行流,但是如果有两个,就可以跑两个指令执行流。(类似intel说的超线程)这也是现代cpu的可能的一个发展方向和趋势。为了不引起混淆,我们把这个指令执行流抽象为HART(硬件线程)。

抽象的,一种资源化的,可以自主取指,运行指令的一个虚拟的处理器。

5.特权级别

用户态U和内核态S的概念,还有一个机器态M。

实模式和保护模式的概念。实模式的时候,虚拟地址是不起效的,全都是物理地址。在修改了一个cpu之后,MMU(内存管理单元)就被打开,进入保护模式。

刚刚上电相当于机器态,不开虚拟地址,类似实模式。然后进入supervisor(内核态)态,实际上就是保护模式,user态就是类似linux用户模式。其实起到的是分层保护的作用。debug级别就是专门调试cpu,普通编程用不上。

提供不同的模式,支持虚拟地址与否,是一个cpu架构的特点。

对于不同的级别下有不同的一套寄存器(csr),不同的模式下是不能互相访问的。高级别可以访问低级别的寄存器。(csr:Control and status registers)

CSR指令就是操作CSR的指令。(Zicsr扩展)这里我也不算特别了解,所以只是解释一下概念,具体作用暂时没有涉及。

risc-v也定义了用来操作特权级别的指令。(ECALL,Ebreak)

系统调用就是应用在用户态怎么调用到内核态的东西。

6.内存管理与保护

物理内存保护(PMP,physical memory protection)和虚拟内存(virtual memory)

首先,物理内存保护较为低级的一种管理方式,而虚拟内存就比较高级。

物理内存支持R/W/X,以及lock。(读写执行以及保护锁)允许M模式指定U模式可以访问的内存地址。

虚拟内存就需要cpu支持supervisor level,通常用于实现高级的操作系统特性。有多种映射方式sv32、sv39、sv48。(多线程,MMU和虚拟内存之间的关联,同学们可以去了解。)

7.异常和中断

异常是特殊的中断。中断是操作系统的一个运行机制。异常是运行中出现了异常,导致无法继续访问(比如出现了非法访问)。这时候cpu停掉指令流,跳到一段异常处理程序(一般是自己写的。)处理完之后会再次执行这条指令。

而中断则是正常的,执行到这条指令,出现中断,会让cpu转到一个中断处理程序,但是处理完之后就不会再回到刚刚那条指令,而是继续向下。

也就是异常会给你一个机会去挽救你的程序(异常处理)再去执行刚刚出错的指令,而中断是你程序发生一些需要等待或者其他需要中断的操作的任务,联系外设等,处理完之后就会到下一条指令

risc-v的特点和一些知识就讲到这里,希望对大家有所帮助。

下一节讲编译和链接。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值