一、还得从项目介绍开始
PLCT
的实习是项目导向性,所以在开始前,还得介绍一下实习做的项目。主要内容来自于实习项目照片的官方仓库,项目编号:BJ82
,要做的项目名称是:LARVa
PS:虽然官方仓库确实有项目的介绍,不过这一系列文章兼具笔记的功能。所以是希望未来的可能的读者能够读懂的,所以会对项目的背景、任务等等进行补充介绍
1. 项目背景
LARVa
项目主要有两大背景:
LoongArch
架构RISC-V
架构- 模拟器
A. LoongArch
架构
要介绍LoongArch
,就得先介绍一下其他的指令集架构。目前,目前主流的指令集架构和特点分别是:
x86
架构:x86
架构由Intel
开发,具有成熟的生态系统和软件支持。但是,x86
架构是闭源的,不利于自主创新和技术研发。ARM
架构:ARM
架构由ARM
公司开发,主要应用于移动设备(其实就是手机)、嵌入式系统和物联网,具有低功耗、高集成度的特点。但是,ARM
架构也是闭源的,不利于自主创新和技术研发。MIPS
架构:由MIPS
由MIPS
公司开发,主要应用于路由器、数字电视、游戏机等领域,具有高性能、低功耗的特点。同时,MIPS
架构虽然现在开源了,但是过去还是和arm
类似,是需要授权的。Power
架构:Power
架构由IBM
开发,主要用于高性能计算和服务器领域,具有高性能、高可靠性的特点。但是,Power
架构的成本较高,适用于高端市场,一般人接触不到SPARC
架构:SPARC
架构由Oracle
公司开发,主要应用于高性能计算和服务器领域,具有高性能、高可靠性的特点。但是,SPARC
架构的市场份额较小,所以软件啥的不太行,生态系统不如x86
和ARM
架构成熟。
目前流行的指令集,闭源的就不说了,太贵了。而即便是之前授权的、当前开源指令集,也是国外的,这个万一被卡脖子就不太好了。虽然开源授权协议是不牵扯国家政治,但是管理开源项目的开源组织、开源基金会却是被国家管理的。例如:
- 前两天管理
Python
包的PyPI
就收到了US法院传票,要求上交用户(包制作者)的信息。 - 再比如稍后要介绍的
RISC-V
开源基金会的注册地址为了规避掉这个风险,注册地址从US搞到了瑞士。
所以其实说白了,指令集这种底层的东西,不掌握在自己手里,终究是有风险的。与此类似的,还有操作系统、数据库、编译器……
但是话说回来,作为计算机底层中的底层,指令集架构这个玩意出事情,那问题就太大了。而且,对于国产CPU
发展,过去20多年中始终有两个问题无法解决,那就是要走自主之路还是走兼容之路,选择前者就意味着要重新建立一套生态系统,难度极大,选择后者的话可以兼容目前的ARM
或者x86
生态,但核心技术不能掌握在自己手里,不能自主。所以,国内的龙芯公司(Loongson
)就推出了LoongArch
架构。LoongArch
指令集拥有2500多条自主指令,还可以翻译MIPS
、ARM
及x86
指令。相当于
LoongArch
架构的目的有两个:
- 一是因为
LoongArch
架构是国内自主研发的一种处理器架构,所以目的之一就是降低对国外技术的依赖、提高国家信息安全 - 二是
MIPS
架构有一些设计的缺陷,所以作为后来者,LoongArch
架构在处理器的指令集、内存管理、缓存一致性等方面进行了优化和改进
目前,龙芯已经推出了多款基于LoongArch
架构的处理器,应用于服务器、工作站、嵌入式系统等领域。
比较搞笑的是,
MIPS
公司后来放弃了MIPS
指令集架构,转而开发基于后面介绍的RISC-V的
处理器😂。所以说LoongArch
这个,有那么点小尴尬😂
但是计算机领域的新事物,面临的最关键的问题其实就是生态系统问题。x86
和arm
发展了这么多年,基本上什么软件都可以使用,而LoongArch
才出来没几年(相比于x86
和arm
),所以缺少配套的软硬件生态系统。所以其实,我们LARVa
这个项目其实就是为LoongArch
的生态系统中添砖加瓦
B. RISC-V
架构
说到RISC-V
架构,就得介绍介绍他的历史
RISC-V
架构最初是由加州大学伯克利分校的一位教授David Patterson和他的学生Andrew Waterman在2010年提出的。他们认为,当时的处理器架构设计存在着许多限制。
PS:那个时候指令集架构基本都是不开源的
所以他们需要一种更加灵活、开放的架构来推动计算机技术的进步。因此,他们基于精简指令集(RISC
)的思想,设计了一种全新的指令集架构,即RISC-V
。
自2010年以来,RISC-V
架构得到了越来越多的关注和支持。2014年,RISC-V
基金会成立,旨在促进RISC-V
架构的发展和推广。因为RISC-V
是开源的,所以非常火热,甚至干死了老前辈,倒逼MIPS
、SPARC
这类指令集架构开源。
截至目前,RISC-V
已经成为了一种广泛使用的指令集架构,并且在各种应用领域都有着广泛的应用。例如,RISC-V
已经被用于物联网、人工智能、移动设备、服务器等各种领域的处理器设计中。
C. 模拟器
我们上面介绍了
LoongArch
和RISC-V
这两种指令集架构,那么这两者到底有什么关系呢?其实它们的交集就是我们的LARVa
项目,不过在正式介绍LARVa
项目前,需要先介绍一下模拟器。
模拟器
(emulator
)是一种软件或硬件系统,它可以模拟另一个计算机系统的行为。直观的理解,模拟器就是一个能从硬件CPU、磁盘等等设备开始模拟的虚拟机。模拟器最大的好处就是可以在自己的计算机上运行其他计算机系统的软件,而无需实际拥有该系统的硬件。例如模拟器通常会模拟目标系统的处理器、内存、输入输出设备等硬件,以及操作系统和应用软件等软件环境。
这样说比较抽象,举一个例子:
- 我们是穷逼,只有一台
x86
CPU的机器。 - 但是我们工作/学习的需要,我们需要编写运行在
RISC-V
CPU的机器上的程序 - 所以这个时候,我们可以用模拟器在自己的机器上模拟一台有
RISC-V
CPU的计算机 - 这样的话,就可以在自己的自己的机器上去测试未来将运行在
RISC-V
CPU上的程序
模拟器最大的好处就是能从CPU、内存这些开始模拟,所以其实就是完完全全在你电脑上模拟一个包括硬件在内的目标计算机,这就非常非常有用。例如,模拟器常见的应用场景有:
- 开发和测试新的操作系统、应用软件或游戏,因为它可以模拟目标系统的环境,让开发人员进行测试和调试。
- 旧系统的保护和维护,因为它可以让用户在现代计算机上运行旧的软件,而无需拥有旧系统的硬件。
- 模拟器还可以用于教育和学习,因为它可以让学生学习和理解其他计算机系统的工作原理。
2. 项目任务
介绍了模拟器之后,结合我们前面介绍的LoongArch
和RISC-V
的内容,其实我们LARVa
这个项目要干的事情就很清楚了:
开发一个能够运行在
LoongArch
架构上的模拟器,这个模拟器能够模拟RISC-V
CPU。
有了这个模拟器能干嘛呢?我觉得能干的事情之一就是未来我们有钱之后,买一台LoongArch
CPU的计算机,我们就能够使用我们写的模拟器去模拟运行RISC-V
的CPU(误)
严谨的说,我们做的事情其实是为国产的LoongArch
架构的生态系统添砖加瓦,为国产开源事业贡献自己的力量(Hoorayヾ(@^▽^@)ノ)
3. 项目内容
以下介绍Copy自Github的项目官方介绍,加上我的一些心里想法
工作内容:
与mentor协作开发基于
LoongArch
架构的RISC-V
模拟器LARVa
。这个mentor有点难顶TAT,我打电话联系的时候给我说他平时有本职工作,我入职实习之后投入的时间比他还多。。。。估计我得好好肝了
该项目目前使用
Rust
语言开发,需要有一定Rust
基础。由于LoongArch
在Rust
上游支持很新(截至该职位发布时甚至不完整),有很大机率涉及直接向Rust
上游贡献适配代码。咋说呢,
Rust
这东西我一直都是久闻其名,和go
一样都是处于想学没来得及学的叠加态。还得往上游贡献代码,感觉挺有意思,干tnnd!目前路线图上的短期目标包括实现一个不依赖
LoongArch
的解释执行后端,用于校验RISC-V
模拟语义,因此暂时没有LoongArch
知识或硬件也 okay。我:解释执行后端??校验模拟语义????喵喵喵喵???
在
Rust
上游支持开发LoongArch UEFI
应用之前,工作重心会放在实现linux-user
模拟上。否则会开始基于RustSBI
实现完整的RISC-V
系统级模拟。(这也可能通过一定的方式先在Linux
环境模拟,但目前没有这方面想法。)UEFI
、RustSBI
、linux-user
这些东西我都听过,咋整一块我就看不懂了mentor 会和你一同学习制作架构模拟器。
寄中寄
我的评价是:寄(误)。哈哈,开个玩笑。感觉这个项目挺有意思的,感觉最有意思的部分就是向RUST
上游贡献LoongArch
的代码,这个有点牛逼。啥时候我能给Linux
贡献一下LoongArch
的代码,回头和朋友吹牛也能说我是Linux
内核代码贡献者😂
好好肝吧,咱啥都缺,最缺钱,尤其是看到好配置的机器时候,不过最不缺的就是肝,冲!干tnd!
二、个人学习Road Map
这个Road Map和项目开发的Road Map没啥关系,是我目前评估出来的为了做这个项目,我需要学的一些东西。
Rust
语言。咱多少还是学了五六种语言的,这个速成一下问题不大QEMU
源码。得去看看QEMU
源码,了解一下模拟器实现的大概原理,不然还没法写出来自己的模拟器LoongArch
指令集。这个肯定得去看看,不过感觉问题不大,好歹咱还是学过x86、ARM、RISC-V的,差不多就中断啊、IO啊、MMU啊那些老三样UEFI
。之前自己写的操作系统是直接MBR
分区里的loader
,当时偷懒了图开发方便,没学UEFI
。这会多少得学学了RustSBI
。之前自己写的RISC-V
的操作系统,SBI
是自己写的,虽然知道RustSBI
的功能和作用,但是具体还真没用过,得去学学- 其他。
- 后续再添加
- 目前水平有限,只能想到这么多
- 有的东西还不太懂,例如:“依赖
LoongArch
的解释执行后端”这是啥现在都搞不懂,得先学习上面的前置知识。
根据这五个milestone的依赖关系,准备按照下面的顺序学习:
- Branch 1:学习
Rust
语言 - Branch 2:学习
LoongArch
指令集架构 - Branch 3:看
QEMU
源码
PS:三个Branch之间是并行的
最后嘛,希望工钱能多点,或者换成护肝片也不错😂