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

作者: eecheng87 (EEcheng)   2021-01-25 14:20:07
如題,最近需要將 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 上除了存參數還要存其他東西嗎?
感謝各位大大回覆~
作者: mayasky ( )   2021-01-26 18:35:00
記錄在PCB裡..所以你不用自己送進去簡單說KERNEL早知道你PID了,所以你不用送
作者: dces4212 (flawless)   2021-02-02 00:33:00
同學好,討論區常看到你XDhttps://i.imgur.com/y7elrvS.jpghttps://i.imgur.com/VS13bRp.jpg個人之前嘗試做過,結果做的太爛,效能大輸典型syscall QQ應該說async syscall的執行開銷在扣除真正syscall(例如getpid)的開銷後,不該大於~23ns
作者: eecheng87 (EEcheng)   2021-02-02 22:20:00
感謝d大回覆! 現代的syscall成本的確已經很低了QQ

Links booklink

Contact Us: admin [ a t ] ucptt.com