[问题] 如何在 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