作者laughingman (笑面男)
看板C_and_CPP
标题[问题] start.s在Nachos下的作用
时间Tue Aug 21 20:39:09 2018
开发平台(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组译後得来的(?),这中间的逻辑其实我不是
很懂,有没有修过作业系统的高手可以解释一下,感谢各位拨空看小弟的问题。
--
一个人一直以来孤独地生活最大的坏处在於:
当你忆起过去时,无法肯定的说出自己的过往,
记忆已遭到窜改、扭曲,以符合现在的需求(我们也可以说这是好处)。
你就像一个警探在询问犯人,唯一的线索就是犯人的证词,
你无法确定他说的是不是实话,也无从考证,
因为没有目击者!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.248.59.250
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1534855187.A.0F2.html
1F:推 soheadsome: 基本的CRT 08/21 21:18
2F:→ soheadsome: 你平常写c的main实际上compiler 会自动帮你放这种程式 08/21 21:20
3F:→ soheadsome: 设定你的main为entry point 08/21 21:20
4F:→ laughingman: 我有看到注解写说因为不希望把c library放进来,所以 08/21 23:48
5F:→ laughingman: start.s是放自己实作c library(CRT?)的entry point? 08/21 23:49
6F:→ laughingman: 那如果不管Nachos,我有办法自己写自己的CRT吗? 08/21 23:50
7F:→ cole945: 上面讲错了, 除了档名叫 start外, 从你贴的code就只是 08/22 01:12
8F:→ cole945: Print syscall wrapper, 跟 CRT 没什麽关系 08/22 01:13