RISCV基础开发(二)

gewenbin
gewenbin
gewenbin
188
文章
15
评论
2021年8月1日14:52:59 评论 875

特权架构

处理器在架构上一般都会有几种特权模式,比如x86架构有“ring0~ring3”4种级别,一般操作系统内核和驱动运行在ring0级别,也就是最高级别,而普通的应用程序运行在ring3级别,也就是权限最低的级别;再比如arm架构有7种处理器模式,操作系统一般运行在Supervisor模式,而应用程序运行在User模式。

那么为什么处理器架构在设计时需要设计好几种级别不同的模式呢?原因是为了不同作用的程序考虑的。比如一般操作系统享有最高级别的权限,可以访问系统所有硬件,执行所有特权指令,例如设置MMU页表等,那么设置MMU页表这种操作能让普通的应用程序来操作吗,当然是不行的,所以操作系统和普通应用这两种程序肯定是需要运行在不同级别的权限模式下的,如果普通程序强行去执行特权指令操作,要么没有任何反应要么系统产生异常,这样就从硬件上保证了安全性。

同样的,RISCV架构下有三种特权级别,分别是Machine、Supervisor和User,简称M模式、S模式和U模式。M模式权限最高,在这个级别下的程序可以访问一切硬件和执行所有特权指令;S模式一般用于运行操作系统,可以设置MMU使用虚拟地址;U模式一般是普通应用程序使用,权限最低。

M模式使用物理地址进行访问,不经过MMU,但是有类似arm下cortex-m中的MPU功能;S模式可以通过设置MMU来使用虚拟地址访问内存,所以像Linux这类操作系统都运行在S模式下。那么有人要问了,为啥RISCV架构特权模式设计成这样,直接把M模式和S模式合二为一不行吗?这个得从RISCV架构诞生背景来看了,RISCV架构诞生于2010年左右,这时不管是x86还是arm架构都发展得算是比较成熟了,所以RISCV架构设计时就定位了从微控制器到大型超级计算机都可以使用这个架构。在微控制器上使用的RISCV架构一般只有M模式,或者使用M和U两种模式,类似于cortex-m架构的定位;而在带MMU的芯片上,RISCV架构一般都使用M、S和U三种模式,这样通过“拼积木”的方式就可以让RISCV架构适用于各种场景了。

在arm下的应用程序通过“swi”指令可以将处理器从低特权级别切换到高特权级别,一般像Linux下的系统调用都是通过这种方式来使用的。类似的,在RISCV中,通过“ecall”指令可以从低特权切换到高特权,在U模式下执行就切换到S模式,在S模式下调用就切换到M模式。另外在RISCV中,默认产生中断和异常时,处理器自动切换到M模式处理,可以通过中断托管设置将一些中断和异常直接交给S模式处理。RISCV的架构设计就决定了必须要有程序运行在M模式下,来为S模式提供一些基础的服务,RISCV为此定义了SBI(Supervisor Binary Interface)接口规范,让运行在S模式下的操作系统在不同的RISCV处理器上都可以使用标准的SBI接口来使用相应的功能,这个其实就有点类似于x86下的BIOS概念了,详细的RISCV下中断和异常处理以及SBI规范在后续章节会讲解,这里只需要知道就可以。

gewenbin
  • 本文由 发表于 2021年8月1日14:52:59
  • 转载请务必保留本文链接:http://www.databusworld.cn/10464.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: