Linux system call的来龙去脉浅析

本文深入探讨Linux系统调用的过程,从应用程序调用C库函数fork()开始,逐步解析如何通过库函数、inline汇编直至最终执行SWI指令进入内核模式。在内核中,系统调用号被用来调用对应的sys_XXX函数,例如sys_clone,从而实现进程的创建。通过对glibc源码和ARM汇编的分析,揭示了系统调用的底层机制。
摘要由CSDN通过智能技术生成

Linux system call的来龙去脉
Application通常都是调用一个C library中一个library库函数,该库函数最后又会通ARM的swi assemble instruction。SWI Instruction执行后,ARM进入Supervisor Mode,之后Linux Kernel会进行一系列的处理,最后调用我们在Linux Kernel中看到那些sys_XXX system call function。我们大多数工程师都知道如何调用库函数,但对后面发生的一切却并清楚。

C Lib入口
首先我们的入手点是:我们要创建一个process:int pid = fork()。fork() GCC libc 中一个函数,我们不妨看看fork在gcc libc中的实现:(glibc-2.7\nptl\sysdeps\unix\sysv\linux\fork.c)
pid_t
__libc_fork (void)
{
  。。。。。。。(此处我们不关注,省略,详见glibc-2.7\nptl\sysdeps\unix\sysv\linux\fork.c)
#ifdef ARCH_FORK
  pid = ARCH_FORK ();
#else
# error "ARCH_FORK must be defined so that the CLONE_SETTID flag is used"
  pid = INLINE_SYSCALL (fork, 0);
#endif
。。。。。。(此处我们不关注,省略)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值