[问题] start.s在Nachos下的作用

楼主: laughingman (笑面男)   2018-08-21 20:39:09
开发平台(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组译后得来的(?),这中间的逻辑其实我不是
很懂,有没有修过作业系统的高手可以解释一下,感谢各位拨空看小弟的问题。
作者: soheadsome (师大狗鼻哥)   2018-08-21 21:18:00
基本的CRT你平常写c的main实际上compiler 会自动帮你放这种程式设定你的main为entry point
楼主: laughingman (笑面男)   2018-08-21 23:48:00
我有看到注解写说因为不希望把c library放进来,所以start.s是放自己实作c library(CRT?)的entry point?那如果不管Nachos,我有办法自己写自己的CRT吗?
作者: cole945 (跶跶..)   2018-08-22 01:12:00
上面讲错了, 除了档名叫 start外, 从你贴的code就只是Print syscall wrapper, 跟 CRT 没什么关系

Links booklink

Contact Us: admin [ a t ] ucptt.com