如題,最近需要將 system call 拆成兩部分做(user space 紀錄 system call number 和參數,kernel 根據記錄的資料執行),目前的做法是在 kernel 中取得 system call table 的地址,然後根據 user space 提供的 system call number 來呼叫 table 中的 function。
以上方法的確可以呼叫到指定的系統呼叫,我的問題是,假如我要呼叫 getpid(void),從 kernel 只能知道這是 39 號系統呼叫並執行對應的 function,的確會回傳一個數字,但明顯不是 user program 的。(我觀察實作,似乎需要 current 這個變數,但我在呼叫 system call table 上的函數要怎麼告知? 或者是準備呼叫前切換 task 成原本的 user task ,畢竟 getpid 不用參數)
我看到大部分的 system call flow 從 user->kerenl 做的事就只有存 system call number 和 parameter 而已,然後就直接 call table 上對應的 function 了。這之間是不是少了一些神麼? 我的 pt_reg 上除了存參數還要存其他東西嗎?