
计算机
文章平均质量分 95
源码头
稀有源码资源提供者
展开
-
用户故事|我是怎样学习Verilog的?
在学习课程的时候,“以问题为导向”这个原则对我很有帮助。这里最重要的是明确自己的目的,通过不断给自己提出问题,使自己专注,提高效率。专栏每节课的内容信息密度都很高,硬着头皮从头看到尾,很容易让自己信息“过载”了。我个人会对一篇内容进行分块学习,先借助思维导图/重点回顾了解整节课的结构/重点,知道主线是什么,了解大体框架,再选自己最有兴趣的部分上手,或者自己给自己提几个问题,带着问题细读课程。只有当你自己感兴趣、有问题,想不明白又特别好奇的时候,才会充分调动自己的大脑去思考,拼尽全力去尝试解决问题。原创 2023-03-05 08:16:47 · 323 阅读 · 0 评论 -
41|内功心法(二):内核和后端通用的设计思想有哪些?
你好,我是LMOS。上节课,我们学习了并行化、异步化、调度思想这三种内功心法,无论是内核设计还是后端场景里,你总能找到这些“心法”的影子。看完以后是不是感觉有点意犹未尽?这节课,我再给你分享三种设计思想,分别是池化、分层和缓存。无论是操作系统内核,还是后端当中,这三种设计思想也是通用的。这两节课属于偏抽象的架构思想,因此建议你学完之后结合自己的具体工作实践进一步理解、消化。好,让我们进入正题。原创 2023-03-05 08:15:29 · 167 阅读 · 0 评论 -
40|内功心法(一):内核和后端通用的设计思想有哪些?
今天我带你了解了三种内核和后端通用的设计思想。我也举了不少例子,方便你了解这些思想,如何用在后端应用层和内核软件里。其实,今天的课程内容属于偏抽象的架构思想,目的是帮你拓宽思路,把学过的知识融会贯通。因此建议你学习完了之后,再结合你自己的兴趣自行拓展延伸。如果你领会到了这思想的本质,不妨试试应用在技术实践上,相信会让你的开发工作更得心应手。原创 2023-03-05 08:13:56 · 188 阅读 · 0 评论 -
39|源码解读:V8执行JS代码的全过程
这节课我们先通过编译源码的方式搭建了 V8 的环境,又通过 V8 项目中的 hello_world 项目一步步学习了 V8 执行 JS代码的过程,最后,我们又从宏观角度了解了 V8 执行 JS 代码的全过程。这节课的要点,你可以结合后面的导图看一下。在这个过程中,我们通过 V8 项目的关键代码和数据结构深入的了解了 V8 这个项目。在学习一个开源巨石项目的过程中,我们要掌握一定的学习方式,切不可以在初学习的阶段就过度自底而上地纠结于各种代码细节。原创 2023-03-05 08:10:35 · 2287 阅读 · 2 评论 -
38|浏览器原理(二):浏览器进程通信与网络渲染详解
你好,我是LMOS。通过前面的学习,你应该对浏览器内的进程和线程已经有了一个大概的印象,也知道了为了避免一些问题,现代浏览器采用了多进程架构。这节课,我们首先要说的是Chrome中的进程通信。这么多的进程,它们之间是如何进行IPC通信的呢?要知道,如果IPC通信设计得不合理,就会引发非常多的问题。原创 2023-03-05 08:10:40 · 1285 阅读 · 0 评论 -
37|浏览器原理(一):浏览器为什么要用多进程模型?
你好,我是 LMOS。前面我们学过了很多基础理论,你可能已经迫不及待,想把这些知识运用到应用层开发里了。所以从这应用篇开始,我们会学以致用,分析一些开发工作中的实际问题,挑战几个典型的综合应用场景。这节课我会从浏览器开始讲起,浏览器是目前使用范围最广、使用人数最多的终端应用程序之一。作为互联网中最重要的端口,浏览器伴随着互联网的高速发展,发展也是日新月异。通过接下来的两节课,我希望带你看看巨型软件应用优秀的架构设计,同时也带你了解一下平时用到的浏览器里,有哪些技术原理比较关键。原创 2023-03-05 08:07:33 · 630 阅读 · 0 评论 -
36|Linux文件系统(二):Linux如何存放文件?
你好,我是LMOS。通过上节课的学习,我们已经对Ext3文件系统的结构非常了解了。这种了解究竟正确与否,还是需要通过写代码来验证。这节课我会带你读取Ext3文件系统中的文件,帮你加深对Ext3的理解。我假定你已经学会了怎么建立一个虚拟硬盘并将其格式化为Ext3文件系统。如果记不清了,请回到复习一下。课程的配套代码,你需要从下载。原创 2023-03-05 08:07:38 · 519 阅读 · 0 评论 -
35|Linux文件系统(一):Linux如何存放文件?
你好,我是LMOS。上一节课,我们一起了解了什么是文件和文件系统。接下来的两节课,我们继续深入学习Linux上的一个具体的文件系统——Ext3,搞清楚了文件究竟是如何存放的。这节课我会带你建立一个虚拟硬盘,并在上面建立一个文件系统。对照代码实例,相信你会对Ext3的结构有一个更深入的认识。课程配套代码,你可以从下载。话不多说,我们开始吧。原创 2023-03-05 08:05:59 · 1065 阅读 · 0 评论 -
34|文件仓库:初识文件与文件系统
在日常生活中,我们提到的文件通常是指公文、信件,而计算机中的文件与日常见到的文件载体不同,是以计算机硬盘为载体、存储在计算机上的信息集合。这些信息集合的呈现形式非常多样,可以是文本文档、图片、音乐、视频、应用程序等。文件通常由文件名进行标识和索引。只说个概念的话,你很难对文件是什么有更深的理解,所以下面我们写代码建立一个文件感受一下。int main()// 打开并建立文件,所有用户可读写if(fd < 0)printf("建立文件失败\n");return -1;// 关闭文件。原创 2023-03-04 09:55:11 · 172 阅读 · 0 评论 -
33|lotop与lostat命令:聊聊命令背后的故事与工作原理
你好,我是LMOS。前面的课程里,我们学习了IO Cache、IO调度和IO管理的相关知识,但怎样度量和检测一个应用使用IO的情况呢?我们今天就来聊聊这个问题。这节课我想带你认识两大监控IO操作的神器——iostat与iotop,让你掌握安装、使用它们的方法以及它们的工作原理。在Linux系统上,iostat和iotop这两个IO数据工具非常常用。它们都是性能分析领域中不可缺少的工具性软件,也经常被Linux网络服务器运维人员,用于分析某些服务器的IO类性能与故障。原创 2023-03-04 09:53:08 · 1032 阅读 · 0 评论 -
32|IO管理:Linux如何管理多个外设?
你好,我是LMOS。在上一节课中,我们通过对IO Cache的学习,知道了IO Cache缓存了IO设备的数据,这些数据经过IO 调度器送给块层,进而发送给IO设备。今天我们再往下一层探索,以Linux为例,看看Linux是如何管理多个IO外设的。我们先从例子出发,了解一下设备在Linux中的与众不同,然后看看设备分类及接口,分析一下应用开发人员应该如何使用它们,最后我会带你一起实现一个设备加深理解。这节课的配套代码,你可以从下载。话不多说,我们开始吧。原创 2023-03-04 09:50:42 · 433 阅读 · 0 评论 -
31|外设通信:IOCache与IO调度
你好,我是LMOS。从这节课开始,我们进入IO相关基础知识的学习,想要开发高性能的应用程序,这些基础知识必不可少。前面的课程里,我们已经对进程和内存有了一定了解。进程在运行时刻和CPU是紧密相关的,抽象出进程就是为了提高CPU的利用率。因此,我们关注进程和内存,等同于关注CPU和RAM。一个计算机系统,无论是PC,还是手机,除了有CPU和RAM,还有各种外设,如键鼠、硬盘、显卡、以太网卡、声卡等各种USB扩展设备。这些设备独立在CPU和内存之外,统称为外设。原创 2023-03-04 09:50:32 · 467 阅读 · 0 评论 -
30|应用间通信(二):详解Linux进程IPC
你好,我是LMOS。上节课,我们学习了信号和管道这两种通信方法,这节课我们接着看看消息队列和共享内存这两种通信方式。在大型商业系统中,通常会把功能拆分成几大模块,模块以应用形式存在,就需要消息队列和内存共享来使模块之间进行通信和协作,这就是利用通信机制将应用解耦。这节课的配套代码,你可以从下载。话不多说,我们正式开讲吧!原创 2023-03-04 09:47:06 · 233 阅读 · 0 评论 -
29|应用间通信(一):详解Linux进程IPC
你好,我是LMOS。通过前面的学习,我们对进程有了一定的认知,进程之间是独立的、隔离的,这种安排,使得应用程序之间绝对不可以互相“侵犯”各自的领地。但是,应用程序之间有时需要互相通信,互相协作,才能完成相关的功能。这就不得不由操作系统介入,实现一种通信机制。在这种通信机制的监管之下,让应用程序之间实现通信。Linux实现了诸如管道、信号、消息队列、共享内存,这就是Linux进程IPC。我们用两节课的时间,分别讨论这些通信机制。这节课,我们先学习管道和信号。课程的配套代码,你可以从下载。原创 2023-03-04 09:47:05 · 207 阅读 · 0 评论 -
28|进程调度:应用为什么能并行执行?
什么是进程呢?进程这个概念可以追溯到上世纪60年代初,是麻省理工学院的MULTICS操作系统下提出并引入的。概念是对事物本质的抽象,那么进程到底是对何种事物本质的抽象呢?想要解决这个问题,需要我们综合多个视角来理解进程,才能得出一个全面、客观的判断。下面我们从应用程序、资源管理和代码实现这三个角度分别来探讨。原创 2023-03-04 09:44:59 · 449 阅读 · 0 评论 -
27|应用内存管理:Linux的应用与内存管理
你好,我是LMOS。前面几节课我们学了不少内存相关的基础知识,今天我们来研究一下应用程序的内存管理。应用程序想要使用内存,必须得先找操作系统申请,我们有必要先了解一下Linux内核怎么来管理内存,这样再去分析应用程序的内存管理细节的时候,思路才更顺畅。之后,我还选择了现在最流行的Golang语言作为参考,带你梳理内存管理中各式各样的数据结构,为你揭秘Golang为什么能够实现高效、自动化地管理内存。这节课的配套代码,你可以从这里下载。让我们进入正题吧!原创 2023-03-04 09:42:26 · 191 阅读 · 0 评论 -
26|延迟分配:提高内存利用率的三种机制
你好,我是LMOS。通过前面的学习,我相信你已经感觉到了物理内存资源的宝贵。为了尽可能有效利用它,操作系统在内存管理上花了很多心思,之前学过的虚拟内存、虚实结合的故事也佐证了这一点。为了提高内存利用率,还有一些巧妙的机制等待我们探索。今天我就跟你聊聊其中的三种“玩法”,分别是写时复制、请求调页和mmap系统调用。这节课的代码,你可以从这里下载。原创 2023-03-04 09:36:49 · 418 阅读 · 1 评论 -
25|堆&栈:堆与栈的区别和应用
你好,我是LMOS。在上一课中,我们讲了虚拟内存和物理内存,明白了虚拟内存是一个假想的地址空间,想要真正工作运行起来,就必须要经过MMU把虚拟地址转换成物理地址,寻址索引到真正的DRAM。今天,我们继续深入到应用程序的虚拟内存地址空间中,弄清楚一个常规应用程序的虚拟内存地址空间中都有哪些东西。首先,我们看看里面的整体布局,然后看看里面的堆与栈,最后我还会重点带你了解一下堆与栈的区别和应用场景。课程的配套代码你可以从下载。原创 2023-03-04 09:36:06 · 385 阅读 · 0 评论 -
24|虚实结合:虚拟内存和物理内存
你好,我是LMOS。上一课中学习了内存地址空间,我们搞清楚了内存地址与地址空间的本质。今天我们开始学习虚拟内存与物理内存。其实虚拟内存也好,物理内存也罢,我们从储存并索引数据的角度来看,内存的重要组成部分就两个:一个是地址,另一个就是储存字节单元,即能存放8个二进制位的容器。把两者合起来,我们可以将内存理解为能索引到具体储存字节单元的地址集合。这节课我会带你解决以下三个问题:1.虚拟内存的本质是什么?2.物理内存是什么,它的结构长什么样?原创 2023-03-03 23:20:37 · 339 阅读 · 0 评论 -
23|内存地址空间:程序中地址的三种产生方式
明白了CPU访问内存的方式,也知道了内存地址如何产生,我们再理解内存地址空间也不是难事儿了。所谓内存地址空间,本质就是内存地址位宽下地址编码的合集。内存的相关知识才刚刚开始,内存知识相对有点挑战,但跟着我的步伐,你也可以搞懂里面的门道。这节课最后我捎带讲了讲虚拟内存地址空间,更多虚拟内存的故事,且听我下节课分解。原创 2023-03-03 23:19:50 · 1382 阅读 · 0 评论 -
22|RISC-V指令精讲(七):访存指令实现与调试
你好,我是LMOS。上节课我们说了RISC-V是加载储存体系结构的典型,只有加载指令和储存指令才有资格访问内存。计算机运算完成的结果,一开始会放在寄存器中,但最终归宿还是内存,此时就需要存储指令发挥作用了。这节课我们就来看看RISC-V提供的存储指令,一共有三条,分别是储存字节指令、储存双字节指令和储存字指令。课程的代码你可以从下载。话不多说,咱们进入正题。原创 2023-03-03 23:16:34 · 5422 阅读 · 0 评论 -
21|RISC-V指令精讲(六):加载指令实现与调试
你好,我是LMOS。之前我们已经学过了RISC-V中的算术指令、逻辑指令、原子指令。这些指令主要的操作对象是寄存器,即对寄存器中的数据进行加工,这是RISC体系的重要特性。但你是否想过寄存器中的数据从哪里来呢?答案是从内存中来,经过存储指令加载到寄存器当中。RISC-V是一个典型的加载储存体系结构,这种体系类型的CPU,只有加载与储存指令可以访问内存,运算指令不能访问内存。这节课我们就来学习一下RISC-V的加载指令。顾名思义,加载指令就是从一个地址指向的内存单元中,加载数据到一个寄存器中。原创 2023-03-03 23:14:18 · 5842 阅读 · 0 评论 -
20|RISC-V指令精讲(五):原子指令实现与调试
你好,我是LMOS。通过前面的课程,我们学过了RISC-V的各种跳转指令以及这些指令的各种变形,并且了解了它们的机器编码。今天,我们开始学习RISC-V下的原子指令,原子指令是RISC-V的指令扩展,命名为 ‘A’。这个扩展指令中包含两部分,分别是LR/SC指令和AMO指令。我们先搞明白为什么需要原子指令,什么情况用得上它们。再分别学习和对比LR/SC指令与AMO指令,另外,我还会让你知道这些指令各自的使用场景是什么。课程代码你可以从下载。话不多说,让我们直接开始吧。原创 2023-03-03 23:12:50 · 7346 阅读 · 2 评论 -
19|RISC-V指令精讲(四):跳转指令实现与调试
你好,我是LMOS。前面我们学习了无条件跳转指令,但是在一些代码实现里,我们必须根据条件的判断状态进行跳转。比如高级语言中的if-else 语句,这是一个典型程序流程控制语句,它能根据条件状态执行不同的代码。这种语句落到指令集层,就需要有根据条件状态进行跳转的指令来支持,这类指令我们称为有条件跳转指令。这节课,我们就来学习这些有条件跳转指令。在RISC-V指令集中,一共有6条有条件跳转指令,分别是beq、bne、blt、bltu、bge、bgeu。这节课的配套代码,你可以从下载。原创 2023-03-03 23:10:34 · 22310 阅读 · 1 评论 -
17|RISC-V指令精讲(二):算术指令实现与调试
你好,我是LMOS。上节课,我们学习了算术指令中的加减指令和比较指令。不过一个CPU只能实现这两类指令还不够。如果你学过C语言,应该对“、&、|、!”这些运算符并不陌生,这些运算符都需要CPU提供逻辑和移位指令才可以实现。今天我们就继续学习逻辑指令(and、or、xor)和移位指令 (sll、srl、sra)。代码你可以从下载。话不多说,我们开始吧。原创 2023-03-03 23:02:57 · 2798 阅读 · 0 评论 -
16|RISC-V指令精讲(一):算术指令实现与调试
你好,我是LMOS。通过前面的学习,我们已经了解了在C语言编译器的“视角”下,C语言的各种表达式是如何转换成各种机器汇编指令的。从这节课开始,我会带你进一步深入学习各种汇编指令的细节。只要你耐心跟我学完这节课,对RISC-V的各种指令,你就能了如指掌了。这里我们将从RV32I的算术指令开始,先学习加减指令(add、sub),接着了解一下数值比较指令(slt)。这些指令都有两个版本,一个是立即数版本,一个是寄存器的版本。话不多说,我们开始吧。课程配套代码从下载。原创 2023-03-03 13:31:45 · 3912 阅读 · 0 评论 -
15|C与汇编:揭秘C语言编译器的“搬砖”日常
这些对应关系,我们通过对二进制文件的分析已经再清楚不过了。原创 2023-03-02 08:38:42 · 626 阅读 · 0 评论 -
14|走进C语言:高级语言怎样抽象执行逻辑?
声明和定义也可以同时出现。现在我来总结一下,其实编译的其中一个过程,就是用某种编程语言的文法来检查所写语言(代码)是否正确。你可以这么理解,语言的文法就是对这种语言的最高抽象,所以我们可以说。原创 2023-03-02 08:37:16 · 496 阅读 · 1 评论 -
13|小试牛刀:跑通RISC-V平台的HelloWorld程序
你好,我是LMOS。在上一课中,我们一起约定了主环境,安装了编译工具和依赖库,构建了交叉编译RISC-V工具链。今天我们继续构建RISC-V版的模拟器QEMU(代码你可以从下载),让它成为“定制款”,更匹配我们的学习需要。为此,我们需要设置好主环境的环境变量,安装好VSCode及其插件,这样才能实现编辑、编译、运行、调试RISC-V程序的一体化、自动化。话不多说,我们开始吧。原创 2023-03-02 08:36:49 · 2216 阅读 · 3 评论 -
12|QEMU:支持RISC-V的QEMU如何构建?
因此,我们需要用宿主机编译器A,编译出一个编译器B,这个编译器B是本地平台上的可执行程序。说得再具体点,你可以把编译器B看作是。原创 2023-03-02 08:34:31 · 2320 阅读 · 1 评论 -
11|手写CPU(六):如何让我们的CPU跑起来?
你好,我是LMOS。通过前面几节课的学习,我们已经完成了MiniCPU五级流水线的模块设计,现在距离实现一个完整的MiniCPU也就一步之遥。还差哪些工作没完成呢?还记得我们在第六节课设计的MiniCPU架构图吗?回想一下,我们已经设计完成的五级流水线,都包含下图的哪些模块?上图的CPU核心模块,也就是CPU Core包含的模块的设计,这些我们已经在前面几节课里完成了。原创 2023-03-02 08:32:57 · 833 阅读 · 0 评论 -
10|手写CPU(五):CPU流水线的写回模块如何实现?
你好,我是LMOS。今天我们一起来完成迷你CPU的最后一个部分——写回相关模块的设计(课程代码在简单回顾一下,上节课我们完成了CPU流水线的访存相关模块的设计。在设计访存模块之前,我们发现流水线中存在数据冒险的问题。为了解决这个问题,我们设计了数据前递模块。但是我们采用的数据前递模块,只局限于解决算术操作和数据传输中的冒险问题。在CPU流水线中还可能存在结构冒险和控制冒险的问题,我们在进行流水线规划时,已经合理地避免了结构冒险。但是,控制冒险还可能出现,下面我们就来探讨一下流水线的控制冒险问题。原创 2023-03-02 08:31:08 · 938 阅读 · 0 评论 -
09|手写CPU(四):如何实现CPU流水线的访存阶段?
你好,我是LMOS。先简单回顾一下上一节课,我们设计了MiniCPU流水线的执行相关模块。其中包括执行控制模块、通用寄存器模块,以及可以进行加减法运算、大小比较、移位操作的ALU模块。指令执行之后就到了流水线的下一级——访存。这节课我们就重点聊聊怎么设计实现访存的相关模块。在你的设想里,访存模块必要的组成部分有哪些呢?如果你的第一反应是访存控制模块,我只能说你只答对了一部分。访存控制模块虽然是流水线的主线,但你可能忽略了流水线中的数据相关性问题。原创 2023-03-02 08:29:25 · 1346 阅读 · 0 评论 -
08|手写CPU(三):如何实现指令执行模块?
回顾前面我们已经设计完成的CPU流水线步骤:1.取指模块根据程序计数器(PC)寻址到指令所在的存储单元,并从中取出指令。2.译码模块对取出的指令进行翻译,得到功能码、立即数、寄存器索引等字段,然后根据某些字段读取一个或两个通用寄存器的值。经过流水线的这两个步骤之后,下一步就需要把这些指令信息发送给执行单元去执行相关操作。根据译码之后的指令信息,我们可以把指令分为三类,分别是算术逻辑指令、分支跳转指令、存储器访问指令。上节课。原创 2023-03-02 08:26:06 · 888 阅读 · 0 评论 -
07|手写CPU(二):如何实现指令译码模块?
你好,我是LMOS。上节课,我们了解了什么是CPU的流水线,并决定采用经典的五级流水线来设计我们的MiniCPU,之后梳理了我们将要设计的MiniCPU架构长什么样,最后完成了流水线的第一步——取指。取指阶段把存储器里的指令读出以后,就会传递给后续的译码模块进行处理。那之后指令是如何译码的呢?这就要说到流水线的第二步——译码(代码从下载)。原创 2023-03-02 08:24:03 · 2385 阅读 · 0 评论 -
06|手写CPU(一):迷你CPU架构设计与取指令实现
说到流水线,你是否会马上想到我们打工人的工厂流水线?没错,高大上的CPU流水线其实和我们打工人的流水线是一样的。假如我们在冰墩墩工厂上班,生产流水线分为五个步骤,如下图所示:在冰墩墩生产线上需要至少五个工人,各自负责模具制作、模具清洗、模具抛光、硅胶塑形和融入图案这五个环节中的一个。最简单的方法自然是:同一时刻只有一个冰墩墩在制作。但是冬奥会的热度让市场上的冰墩墩供应不足,为了早日实现“人手一墩”的目标,有什么提升生产效率的办法呢?原创 2023-03-01 17:38:36 · 1703 阅读 · 0 评论 -
05|指令架构:RISC-V在CPU设计上到底有哪些优势?
在第一节课我们讲历史的时候,曾经提到过,CPU既是程序指令的执行者,又被程序中相关的指令所驱动。不过,我并没有具体说明什么是指令。其实指令就是我们交代CPU要执行的操作。那到底什么是指令集呢?我给你打个比方:假如你有一条狗,经过一段时间的训练,它能“听懂”了你对它说一些话。当你对它说“坐下”,它就乖乖地坐在地上;当你对它说“汪汪叫”;它就汪汪汪地叫起来,当你对它说“躺下”,它马上就会躺下来……这里你说的“坐下”、“汪汪叫”、“躺下”这些命令,就相当于计算机世界里的指令。原创 2023-03-01 17:37:51 · 2183 阅读 · 0 评论 -
04|硬件语言筑基(二)-代码是怎么生成具体电路的?
今天我们一起了解了怎么把Verilog代码变为具体的电路。为了实现代码编写、验证和仿真的“一站式”体验。我还向你推荐了几个开源软件。我们来回顾一下这节课的重点。首先,我们用Verilog编写了一个类似CPU内部的ALU模块,该模块实现了加、减、与、或、非等基本运算功能。针对上面的ALU模块,我们还设计了一个用于产生运算指令和数据的TestBench,并且把ALU的运算结果打印出来。利用这个TestBench,可以验证ALU模块的功能是否正确。原创 2023-03-01 17:34:27 · 2795 阅读 · 0 评论 -
03|硬件语言筑基(一):从硬件语言开启手写CPU之旅
今天是芯片模块的第一节课,我们先了解了芯片的内部电路结构。一个芯片的内部电路往往分为数字电路模块和模拟电路模块。对于数字电路模块,可以使用Verilog硬件描述语句进行设计。尽管Verilog这样的硬件语言你可能不大熟悉,但只要抓住本质,再结合代码例子建立知识脉络,学起来就能事半功倍。要想熟悉硬件语言,我们最关键的就是做好思路转换。硬件语言跟高级编程语言本质的不同就是,使用Verilog的时候,必须理解每条语句实质上对应的什么电路,并且要从电路的角度。原创 2023-03-01 17:31:23 · 591 阅读 · 0 评论 -
02|RISC特性与发展:RISC-V凭什么成为“半导体行业的Linux”?
你好,我是LMOS。上节课,我带你见证了两种计算机指令集的设计结构——CISC与RISC。而今天我们的“主角”就是RISC中的一个代表性特例,它就是RISC-V。作为未来芯片指令集的主流,RISC-V是今后芯片设计的最佳方案,甚至可以说它就是硬件行业里的Linux。为什么这么说呢?这节课,我会从RISC-V发展历史、原理与技术特性几个方面入手,带你弄明白为什么RISC-V在半导体行业中发展得如此迅猛。原创 2023-03-01 17:31:20 · 864 阅读 · 0 评论