作者eecheng87 (EEcheng)
看板LinuxDev
標題[問題] 如何在 kernel 使用 system call table
時間Mon Jan 25 14:20:07 2021
如題,最近需要將 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: 個人之前嘗試做過,結果做的太爛,效能大輸典型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