1. 程式人生 > 其它 >Lab2: system calls,

Lab2: system calls,

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函式