作者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://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1611555609.A.13B.html
※ 编辑: eecheng87 (218.164.114.251 台湾), 01/25/2021 16:21:24
1F:→ mayasky: 记录在PCB里..所以你不用自己送进去 01/26 18:35
2F:→ mayasky: 简单说KERNEL早知道你PID了,所以你不用送 01/26 18:36
3F:推 dces4212: 同学好,讨论区常看到你XD 02/02 00:33
6F:→ dces4212: 个人之前尝试做过,结果做的太烂,效能大输典型syscal 02/02 00:39
7F:→ dces4212: l QQ 02/02 00:39
8F:推 dces4212: 应该说async syscall的执行开销在扣除真正syscall(例如 02/02 00:50
9F:→ dces4212: getpid)的开销後,不该大於~23ns 02/02 00:51
10F:→ eecheng87: 感谢d大回覆! 现代的syscall成本的确已经很低了QQ 02/02 22:20