[問題] 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