[問題] 如何在 kernel 使用 system call table

看板LinuxDev作者 (EEcheng)時間3年前 (2021/01/25 14:20), 3年前編輯推噓3(307)
留言10則, 3人參與, 最新討論串1/1
如題,最近需要將 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

01/26 18:35, 3年前 , 1F
記錄在PCB裡..所以你不用自己送進去
01/26 18:35, 1F

01/26 18:36, 3年前 , 2F
簡單說KERNEL早知道你PID了,所以你不用送
01/26 18:36, 2F

02/02 00:33, , 3F
同學好,討論區常看到你XD
02/02 00:33, 3F

02/02 00:37, , 4F

02/02 00:37, , 5F

02/02 00:39, , 6F
個人之前嘗試做過,結果做的太爛,效能大輸典型syscal
02/02 00:39, 6F

02/02 00:39, , 7F
l QQ
02/02 00:39, 7F

02/02 00:50, , 8F
應該說async syscall的執行開銷在扣除真正syscall(例如
02/02 00:50, 8F

02/02 00:51, , 9F
getpid)的開銷後,不該大於~23ns
02/02 00:51, 9F

02/02 22:20, , 10F
感謝d大回覆! 現代的syscall成本的確已經很低了QQ
02/02 22:20, 10F
文章代碼(AID): #1W3cCP4x (LinuxDev)
文章代碼(AID): #1W3cCP4x (LinuxDev)