看板 LinuxDev 關於我們 聯絡資訊
如題,最近需要將 system call 拆成兩部分做(user space 紀錄 system call number 和參數,kernel 根據記錄的資料執行),目前的做法是在 kernel 中取得 system call t able 的地址,然後根據 user space 提供的 system call number 來呼叫 table 中的 f unction。 以上方法的確可以呼叫到指定的系統呼叫,我的問題是,假如我要呼叫 getpid(void), 從 kernel 只能知道這是 39 號系統呼叫並執行對應的 function,的確會回傳一個數字 ,但明顯不是 user program 的。(我觀察實作,似乎需要 current 這個變數,但我在呼 叫 system call table 上的函數要怎麼告知? 或者是準備呼叫前切換 task 成原本的 us er task ,畢竟 getpid 不用參數) 我看到大部分的 system call flow 從 user->kerenl 做的事就只有存 system call num ber 和 parameter 而已,然後就直接 call table 上對應的 function 了。這之間是不 是少了一些神麼? 我的 pt_reg 上除了存參數還要存其他東西嗎? 感謝各位大大回覆~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.114.251 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1611555609.A.13B.html ※ 編輯: eecheng87 (218.164.114.251 臺灣), 01/25/2021 16:21:24
mayasky: 記錄在PCB裡..所以你不用自己送進去 01/26 18:35
mayasky: 簡單說KERNEL早知道你PID了,所以你不用送 01/26 18:36
dces4212: 同學好,討論區常看到你XD 02/02 00:33
dces4212: https://i.imgur.com/y7elrvS.jpg 02/02 00:37
dces4212: https://i.imgur.com/VS13bRp.jpg 02/02 00:37
dces4212: 個人之前嘗試做過,結果做的太爛,效能大輸典型syscal 02/02 00:39
dces4212: l QQ 02/02 00:39
dces4212: 應該說async syscall的執行開銷在扣除真正syscall(例如 02/02 00:50
dces4212: getpid)的開銷後,不該大於~23ns 02/02 00:51
eecheng87: 感謝d大回覆! 現代的syscall成本的確已經很低了QQ 02/02 22:20