CPU中包含了控制部件和运算部件,即中央处理器。1971 年,Intel 将运算器和控制器集成在一个芯片上,称为 4004 微处理器,这标志着 CPU 的诞生。到了 1978 年,开发的 8086 处理器奠定了 X86 指令集架构。此后,8086 系列处理器被广泛应用于个人计算机以及高性能服务器中。

CPU的工作流程分为以下五个阶段:取指、指令译码、执行指令、访存读取数据和结果回写

指令和数据统一存储在内存中,数据与指令需要从统一的存储空间中存取,经由共同的总线传输,无法并行读取数据和指令。这就是大名鼎鼎的冯诺依曼体系结构。

CPU运行程序会循环执行上述五个阶段,它既是程序指令的执行者,有被程序中相关的指令所驱动,最后实现了相关的计算功能。这些功能再组合成相应算法,然后由多种算法共同实现功能强大的软件。

CPU的工作离不开指令,指令集架构就显的尤其重要。有CISC(复杂指令集)和RISC(精简指令集)

CISC

CPU 的指令集越丰富、每个指令完成的功能越多,为该 CPU 编写程序就越容易,因为每一项简单或复杂的任务都有一条对应的指令,不需要软件开发人员写大量的指令。这就是复杂指令集计算机体系结构——CISC。

CISC 的典型代表就是 x86 体系架构,x86 CPU 中包含大量复杂指令集,比如串操作指令、循环控制指令、进程任务切换指令等,还有一些数据传输指令和数据运算指令,它们包含了丰富的内存寻址操作。

CISC 的优势在于,用少量的指令就能实现非常多的功能,程序自身大小也会下降,减少内存空间的占用。但凡事有利就有弊,这些复杂指令集,包含的指令数量多而且功能复杂。

RISC

20 世纪 80 年代,编译器技术的发展,导致各种高级编程语言盛行。这些高级语言编译器生成的低级代码,比程序员手写的低级代码高效得多,使用的也是常用的几十条指令。 最终导致人们开始向 CISC 的反方向思考,由此产生了** RISC——精简指令集计算机体系结构。**

正如它的名字一样,RISC 设计方案非常简约,通常有 20 多条指令的简化指令集。每条指令长度固定,由专用的加载和储存指令用于访问内存,减少了内存寻址方式,大多数运算指令只能访问操作寄存器。

而 CPU 中配有大量的寄存器,这些指令选取的都是工程中使用频率最高的指令。由于指令长度一致,功能单一,操作依赖于寄存器,这些特性使得 CPU 指令预取、分支预测、指令流水线等部件的效能大大发挥,几乎一个时钟周期能执行多条指令。

RISC 的代表产品是 ARM 和 RISC-V。

用 RISC-V 来命名该指令集架构,有两层意思:RISC-V 中的“V”,一方面代表第 5 代 RISC;另一方面,“V”取“ Variation”之意,代表变化。

RISC-V是什么

RISC-V 是一套开放许可证书、免费的、由基金会维护的、一个整数运算指令集外加多个扩展指令集的 CPU 架构规范

指令集命名方式

RISC-V 规范中有相关定义说明,以 RV 为前缀,然后是位宽,最后是代表指令集的字母集合,具体形式如下:

RV[###][abc……xyz]

用表格为你说明一下这个格式,如下所示:



举个例子,比如:RV64IMAC,就表示 64 位的 RISC-V,支持整数指令、乘除法指令、原子指令和压缩指令。

指令集模块

指令集是一款 CPU 架构的主要组成部分,是 CPU 和上层软件交互的核心,也是 CPU 主要功能的体现。

RISC-V 规范只定义了 CPU 需要包含基础整形操作指令,如整型的储存、加载、加减、逻辑、移位、分支等。其它的指令称为可选指令或者用户扩展指令,比如乘、除、取模、单精度浮点、双精度浮点、压缩、原子指令等,这些都是扩展指令。扩展指令需要芯片工程师结合功能需求自定义

所以 RISC-V 采用的是模块化的指令集,易于扩展、组装。它适应于不同的应用场景,可以降低 CPU 的实现成本。

下图展示的是 RISC-V 指令集的各个组成部分:

RISC-V寄存器

指令的操作数是来源于寄存器,精简指令集架构的 CPU,都会提供大量的寄存器,RISC-V 当然也不例外。RISC-V 的规范定义了 32 个通用寄存器以及一个 PC 寄存器,这对于 RV32I、RV64I、RV128I 指令集都是一样的,只是寄存器位宽不一样。

如果实现支持 F/D 扩展指令集的 CPU,则需要额外支持 32 个浮点寄存器。而如果实现只支持 RV32E 指令集的嵌入式 CPU,则可以将 32 个通用寄存器缩减为 16 个通用寄存器。

不常用的 32 个浮点寄存器并没有列在这张表里。表中的 ABI 名称,即应用程序二进制接口,你可以理解为寄存器别名,高级语言在生成汇编语言的时候会用到它们。

比如 C 语言处理函数调用时,用哪些寄存器传递参数、返回值,调用者应该保护哪些寄存器,用什么寄存器管理栈帧等等。

定义好ABI标准,就能在语言间相互调用函数了,比如C语言函数调用汇编语言函数。

RISC-V 特权级

不同的特权级能访问的系统资源不同,高特权级能访问低特权级的资源,反之则不行RISC-V 的规范文档定义了四个特权级别(privilege level),特权等级由高到低排列,如下表所示

一个 RISC-V 硬件线程(hart),相当于一个 CPU 内的独立的可执行核心,在任一时刻,只能运行在某一个特权级上,这个特权级由 CSR(控制和状态寄存器)指定和配置

具体分级如下:

  • 1.机器特权级(M):RISC-V 中 hart 可以执行的最高权限模式。在 M 模式下运行的 hart,对内存、I/O 和一些必要的底层功能(启动和系统配置)有着完全的控制权。因此,它是唯一一个所有标准 RISC-V CPU 都必须实现的权限级。实际上,普通的 RISC-V 微控制器仅支持机器特权级。

    1. 虚拟机监视特权级(H):为了支持虚拟机监视器而定义的特权级。
    1. 管理员特权级(S):主要用于支持现代操作系统,如 Linux、FreeBSD 和 Windows。
    1. 用户应用特权级(U):用于运行应用程序,同样也适用于嵌入式系统。

特权级的作用:

有了特权级的存在,就给指令加上了权力,从而去控制用指令编写的程序。应用程序只能干应用程序该干的事情,不能越权操作。操作系统则拥有更高的权力,能对系统的资源进行管理。

RISC-V 因何流行:其优势:一是 RISC-V 完全开放,二是 RISC-V 指令简单,三是 RISC-V 实行模块化设计,易于扩展。

为什么说 RISC-V 很简单?RISC-V 提供了一个非常强大且开放的精简指令集架构,只有 32 个通用寄存器、40 多条常用指令、4 个特权级。如果需要其它功能,则要进行指令集的扩展,单核心的规范文档才不到 300 页,一个人在一周之内就能搞清楚。

RISC-V 的模块化设计。RISC-V 虽然简单,但这并不意味着功能的缺失。通过模块化的设计,就能实现对各种功能组件的剪裁和扩展。

正是因为 RISC-V 开放、简单和模块化这三大特点,硬件工程师和软件工程师才能站在巨人的肩膀上开发,自由地调用和组装功能模块,快速去实现特定业务场景下的芯片需求

RISC介绍的更多相关文章

  1. Linux基础介绍【第一篇】

    Linux简介 什么是操作系统? 操作系统,英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心 ...

  2. RISC指令集的五个周期

    RISC指令集的五个周期 RISC(reduced instruction set computer,精简指令集计算机)简称为精简指令集.RISC把执行指令的精力主要放在了经常使用的指令上面.本文主要 ...

  3. 网络存储技术介绍(1) ( based on zt)

    最近由于某同学微信发了一些网络存储的文章,开始感兴趣,稍微收集了一些 一.  网络存储技术 http://ask.zol.com.cn/q/187044.html  (yxr:很老的技术介绍吧) 网络 ...

  4. 微控制器(MCU)架构介绍

    微控制器(MicroController)又可简称MCU或μC,也有人称为单芯片微控制器(Single Chip Microcontroller),将ROM.RAM.CPU.I/O集合在同一个芯片中, ...

  5. Dalvik虚拟机简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是 ...

  6. 那些年的那些事CISC和RISC发展中的纠缠

    本文来自http://www.cnbeta.com/articles/224544.htm ARM.ARM.ARM,没错ARM仿佛一夜之间就火了,平板.手机等领域随处可见它的影子,甚至已经有人预言未来 ...

  7. 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简单介绍

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版).今天是第四篇.我尽量每周四篇 1.4 MIPS32指令集架构简单介绍 本书设计的处理器遵循MIPS32 Release 1架构,所以 ...

  8. ARM过程调用标准---APCS简单介绍

    介绍 APCS,ARM 过程调用标准(ARM Procedure Call Standard),提供了紧凑的编写例程的一种机制,定义的例程能够与其它例程交织在一起.最显著的一点是对这些例程来自哪里没有 ...

  9. JAVA 文件编译执行与虚拟机(JVM)简单介绍

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...

  10. ARM平台的虚拟化介绍

    本篇博文主要介绍虚拟化的基本思想以及在arm平台如何做虚拟化,arm提供的硬件feature等等. 虚拟化技术简介 虚拟化技术 虚拟化是一个概念,单从这个概念的角度来看,只要是用某一种物品去模拟另一种 ...

随机推荐

  1. 天线的OTA测试

    有源测试 (即OTA测试) 把使用综测仪的测试叫做有源测试(Active).使用有源测试的测试速度比较无源相对要慢,但是因为手机是一个复杂材料体,往往无源测试对发射性能的模拟是可信的,但是对于接收性能 ...

  2. 全面详解C语言使用cJSON解析JSON字符[转载]

    cJSON对象的实现采用了树形结构,每个对象是树的一个节点,每个节点由cJSON这个结构体组成,对象中的元素也由cJSON这个结构体组成.同一层的对象和元素是双向链表结构,由next和prev指针链接 ...

  3. 学习vue ,环境搭建(VS code、node.js、cnpm、vue-cli)创建项目 并引入element

    安装 1.Visual studio code(VS code) 往期博客:https://www.cnblogs.com/technicist/p/12677052.html 2.Node.js与c ...

  4. typora编辑数学公式

    最后,需要补充两点: 1.如果要导出为docx,需要安装pandoc https://github.com/jgm/pandoc/releases/tag/3.6.3 2.如果要自己写代码,比如输入\ ...

  5. linux下的nginx重启命令常见以下3种:

    systemctl restart nginx service nginx restart /usr/sbin/nginx -s reload

  6. 使用project制定项目计划可以分为六个步骤

    使用project制定项目计划可以分为六个步骤,如下图(1): 图(1)-project制定项目计划步骤 下面我们就以project2010为例,按上图所示步骤对如何制定项目计划进行详细说明: 一.创 ...

  7. 解决 Docker 日志文件太大的问题

    Docker 在不重建容器的情况下,日志文件默认会一直追加,时间一长会逐渐占满服务器的硬盘的空间,内存消耗也会一直增加,本篇来了解一些控制日志文件的方法. 清理单个文件 运行时控制 全局配置 Dock ...

  8. 使用df命令

    1.使用df命令,查看整体的磁盘使用情况 df命令是用来查看硬盘的挂载点,以及对应的硬盘容量信息.包括硬盘的总大小,已经使用的大小,剩余大小.以及使用的空间占有的百分比等. 最常用的命令格式就是: 1 ...

  9. Delphi Inputbox 输入时显示‘*’号

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  10. CSAPP学习笔记——chapter9 虚拟内存

    CSAPP学习笔记--chapter9 虚拟内存 虚拟内存提供三个重要的功能.第一,它在主存中自动缓存最近使用的存放磁盘上的虚拟地址空间的内容.虚拟内存缓存中的块叫做页.对磁盘上页的引用会触发缺页,缺 ...