Lab2: system calls,
阿新 • • 發佈:2022-03-30
https://pdos.csail.mit.edu/6.S081/2020/labs/syscall.html
這個lab主要為xv6新增新的系統呼叫
xv6中的系統呼叫的實現
對於initcode.S,最後需要執行exec系統呼叫
用來裝載可執行程式,可以看到使用者程式碼將exec系統呼叫
的引數int exec(char *path, char **argv)
分別放入a0與a1暫存器,把系統呼叫號放入a7暫存器,系統呼叫號用來匹配系統呼叫函式表,如果系統呼叫號是合法的,那麼執行對應的系統呼叫,如果不合法,那就將代表錯誤的返回值-1放到a0暫存器中,如果系統呼叫號合法,那麼就會去執行對應實現系統呼叫的核心函式,並將實現系統呼叫的核心函式的返回值放入a0中,暫存器內容設定好之後,呼叫ecall指令(ecall是一個硬體指令),這個指令會
- 將user mode改為supervisor mode
- ecall將程式計數器的值儲存在了SEPC暫存器。
-
STVEC是一個核心暫存器,其中存有
trampoline page
的最開始的地址,但是核心暫存器只有在supervisor mode下才能讀寫,由於ecall將程式碼從user mode改為了supervisr mode,ecall便可以使pc指向trampoline page
的最開始,trampoline page
中的
接下來會執行uservec函式