控制流语句翻译方案
大致上分为两种 一种是教科书上的在布尔表达式中处理跳转,另一种是不在布尔表达式中(在布尔表达式所处的结构中)处理
在布尔表达式处理中又介绍了两种做法,一种是类似java字节码(?),没有跳转符号,直接使用地址,另一种是使用符号
为了实现使用符号的,在布尔表达式内部处理的,控制流语句翻译,需要在父节点中设计和摆放符号,传递给子节点。
如果是使用地址的,那么需要在子节点中挖坑,并向父节点传递欠填的坑的集合,在有足够信息的父节点处填坑。(backpatch)
读写文件
已有常规做法是通过系统调用read,write
可能更好的做法是通过内存映射文件,直接将虚拟地址对应到文件内容,少了很多系统调用的开销
riscv中ecall做了三件事情
- 切换模式
- 保存pc到sepc
- 跳转到stvec所指向的指令 xv6中跳转到trampoline 其余的事情都没有做,提供了设计灵活性