开发平台(Platform): (Ex: Win10, Linux, ...)
Ubuntu14.04 32bit
问题(Question):
小弟我虽然不是资工系毕业的,但对作业系统有点兴趣,所以在清大开放式课程找到一门
周志远教授开的作业系统,里面的作业是用Nachos(我使用的是用c++写的)。有一个作业
是要自己加system call,网络上其实都找得到教学,但小弟的疑问是:
看起来中断发生的handler是写在-/code/userprog/exception.cc里的ExceptionHandler
这支function中的SyscallException的switch里。所以只要再多加一个case就可以处理
新的system call,实作部分就写在该写的地方就好。但问题来了,其实还要在
-/code/test/start.s里多加类似底下的程式码,
.globl Print
.ent Print
Print:
addiu $2, $0, SC_Print
syscall
j $31
.end Print
这段看起来是MIPS的组语,我也了解意思,不过system call不是已经用c++实作了吗?
加这段组语的意思是什么呢?
我有看一下-/code/test里的makefile,看起来其他的test file都会用到start.o,而
这个start.o就是由MIPS组译器将start.s组译后得来的(?),这中间的逻辑其实我不是
很懂,有没有修过作业系统的高手可以解释一下,感谢各位拨空看小弟的问题。