操作系统MIT6.S081:P4->RISC-V calling conventions and stack frames

本系列文章为MIT6.S081的学习笔记,包含了参考手册、课程、实验三部分的内容,前面的系列文章链接如下
操作系统MIT6.S081:[xv6参考手册第1章]->操作系统接口
操作系统MIT6.S081:P1->Introduction and examples
操作系统MIT6.S081:Lab1->Unix utilities
操作系统MIT6.S081:[xv6参考手册第2章]->操作系统组织结构
操作系统MIT6.S081:P2->OS organization and system calls
操作系统MIT6.S081:Lab2->System calls
操作系统MIT6.S081:[xv6参考手册第3章]->页表
操作系统MIT6.S081:P3->Page tables
操作系统MIT6.S081:Lab3->Page tables


一、C程序到汇编程序的转换

课程内容

今天的课程的主要内容如下所示。对于页表来说这些内容不太重要,但是对于后续的traps实验来说,这些内容至关重要,因为在该实验中将会频繁用到trapframe(xv6中用来实现trap的一个内存page,lecture 6有详细内容)和栈。
①回顾syscall lab
②C到汇编的转换过程
③RISC-V与X86
④寄存器
⑤栈+调用约定(calling convention)
⑥结构体在内存中的布局

C语言到汇编程序的转换

通常来说,C语言程序会有一个main函数,假设在这个函数中打印了一些东西然后退出了。
在这里插入图片描述
处理器并不能理解C语言,处理器能够理解的是汇编语言。或者更具体的说,处理器能够理解的是二进制编码后的汇编代码。
RISC-V处理器
处理器的厂家非常多,本课程主要讨论RISC-V处理器,如下图所示(一家基于RISC-V处理器的厂商SiFive主板上的RISC-V处理器)。
在这里插入图片描述
ISA
当我们说到一个RISC-V处理器时,意味着这个处理器能够理解RISC-V的指令集。所以任何一个处理器都有一个关联的ISA(Instruction Sets Architecture),ISA就是处理器能够理解的指令集。每一条指令都有一个对应的二进制编码或者一个操作码Opcode。当处理器运行时,如果看见了这些编码,处理器就知道该做什么样的操作。上图中的处理器正好能理解RISC-V汇编语言。
.o文件
汇编由C代码编译而来。所以通常来说,要让C语言能够运行在你的处理器上,我们首先要写出C程序,之后这个C程序需要被编译成汇编代码。这个过程中有一些链接和其他的步骤,但是因为这门课不是一个编译器的课程,所以我们忽略这些步骤。之后汇编语言会被翻译成二进制文件,也就是.obj或者.o文件。如果你在运行make qemu后注意过实验目录中的内容,你会看到一些.o文件散落在各处,这些就是处理器能够理解的目标文件。
.asm文件
你们可以在目录中看到一些.asm文件。虽然你还没有写任何汇编程序,但是如果你回想syscall、usys.pl文件被编译城usys.S,.S就是汇编文件,所以你肯定已经得到了一些RISC-V汇编。
汇编语言特点
----汇编语言看起来比C语言的结构化程度要低得多,在汇编语言中你只能看到一行行的指令,比如add,mult等。
----汇编语言中没有很好的控制流程,没有循环语句(注,但是有基于lable的跳转)。
----虽然有函数但是与C语言函数不太一样,汇编语言中的函数是以标签label的形式存在而不是真正的函数定义。
----汇编语言是一门非常底层的语言,许多其他语言(如C++)都会编译成汇编语言。运行任何编译型语言之前都需要先生成相同的汇编语言。
以上就是让计算机能够理解我们的C代码的基本流程。


二、RISC-V vs x86

汇编语言

汇编语言有很多种(因为不同的处理器指令集不一样,而汇编语言中都是一条条指令,所以不同处理器对应的汇编语言必然不一样)。如果你使用RISC-V处理器,你不太能将Linux运行在上面。相应的,大多数现代计算机都运行在x86和x86-64处理器上,通常你们的个人电脑上运行的处理器是x86,Intel和AMD的CPU都实现了x86。x86拥有一套不同的指令集,看起来与RISC-V非常相似。
RISC-V vs x86
RISC-V中的RISC是精简指令集(Reduced Instruction Set Computer)。
x86通常被称为CISC,复杂指令集(Complex Instruction Set Computer)。
关键的区别:
指令的数量
创造RISC-V的一个非常大的初衷就是因为Intel手册中指令数量太多了。
----x86-64指令介绍由3个文档组成,并且新的指令以每个月3条的速度在增加。因为x86-64是在1970年代发布的,所以现在有多于15000条指令。
----RISC-V指令介绍由两个文档组成。这两个文档包含了RISC-V的指令集的所有信息,分别是240页和135页,相比x86的指令集文档要小得多的多。这是有关RISC-V比较好的一个方面。所以在RISC-V中,我们有更少的指令数量。
指令复杂度
----在x86-64中,很多指令都做了不止一件事情,它们会执行一系列复杂的操作并返回结果。
----RISC-V的指令趋向于完成更简单的工作,相应的也消耗更少的CPU执行时间。
这其实是设计人员的在底层设计时的权衡,并没有一些非常确定的原因说RISC比CISC更好,它们各自有各自的使用场景。
开源程度
相比x86来说,RISC是市场上唯一的一款开源指令集,这意味着任何人都可以为RISC-V开发主板。RISC-V来自于UC-Berkly的一个研究项目,之后被大量的公司选中并做了支持。
应用广泛度
在你们的日常生活中,你们可能已经在完全不知情的情况下使用了精简指令集。比如说ARM也是一个精简指令集,高通的Snapdragon(骁龙)处理器就是基于ARM。如果你使用一个Android手机,那么大概率你的手机运行在精简指令集上。如果你使用IOS,苹果公司也实现某种版本的ARM处理器,这些处理器运行在iPad、iPhone和大多数苹果移动设备上(甚至包括Mac)。苹果公司也在尝试向ARM做迁移(如刚刚发布的Macbook)。所以精简指令集出现在各种各样的地方。如果你想在现实世界中找到RISC-V处理器,除了QEMU,你可以在一些嵌入式设备中找到。所以RISC-V也是有应用的,当然它可能没有x86那么广泛。
向后兼容性
在最近几年,由于Intel的指令集是在是太大了,精简指令集的使用越来越多。Intel的指令集之所以这么大,是因为Intel对于向后兼容非常看重。Intel并没有下线任何指令,所以一个现代的Intel处理器还可以运行三四十年前的指令。而RISC-V提出的更晚,所以不存在历史包袱的问题。
指令分类
如果查看RISC-V的文档,可以发现RISC-V的特殊之处在于:它区分了Base Integer Instruction Set 和Standard Extension Instruction Set。
----Base Integer Instruction Set包含了所有的常用指令,比如add、mult等。
----除此之外,处理器还可以选择性的支持Standard Extension Instruction Set。例如,一个处理器可以选择支持单精度浮点型支持,就可以包含相应的扩展指令集。这种模式使得RISC-V更容易支持向后兼容,每一个RISC-V处理器可以声明支持了哪些扩展指令集,然后编译器可以根据支持的指令集来编译代码。

问答

学生提问:如果x86有15000条指令,那几乎不能有效地使用它们,为什么需要这么多?
Frans教授:我们需要许多指令来实现向后兼容,向后兼容是否重要因人而异。另一方面,我认为这里许多指令都是用来完成一些特殊的操作。我从来没有见过一个Intel的汇编代码使用了所有的15000个指令。大多数这些指令都是为了向后兼容和特定场景的需求创建。
学生提问:看起来使用x86而不是RISC-V的唯一优势就是能得到性能的提升,但是这里的性能是以巨大的成本、复杂度和潜在的安全性为代价的。我的问题是为什么我们还在使用x86,而不是使用RISC-V处理器?
Frans教授:我并没有一个很好的答案来回答。现在整个世界都运行在x86上,如果你突然将处理器转变成RISC-V,那么你就会失去很多重要的软件支持。同时,Intel在它的处理器里面做了一些有意思的事情。例如安全相关的enclave,这是Intel最近加到处理器中来提升安全性的功能。此外,Intel还实现了一些非常具体的指令,这些指令可以非常高效的进行一些特定的运算。所以Intel有非常多的指令,通常来说对于一个场景都会有一个完美的指令,它的执行效率要高于RISC-V中的同等指令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知初与修一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值