【发布时间】:2020-04-04 04:59:49
【问题描述】:
我对系统调用(高级)工作流程的理解是:
- 用户调用 libc 包装器
- 包装器将系统调用号和参数放在正确的位置、寄存器或堆栈中
- wrapper 执行 syscall 或 int 0x80 指令
- 内核中断处理程序调用 sys_xxx() 服务例程
如果是这样,那么内核源代码中应该有一堆 sys_xxx() 函数。例如,对于read(),在内核 2.6 代码中,我找到了sys_read。但是,在内核 5.4 代码中,我没有找到这样的服务例程代码,我发现的唯一 sys_read 就像是 libc 包装器的替代品。所以我很困惑..
一个相关的问题 - 内核将实现放在 sys_xxx() 中的原因是内核空间也可以调用这些函数,对吗?
【问题讨论】:
-
man 2 syscalls 可能感兴趣。
标签: c linux-kernel system-calls