张建帮 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
关于linux系统调用的具体流程,这一篇文章其实讲得比较清楚:链接在这里 。但是它只叙述了整体的过程,没有深入下去,因此这里我们将以
getpid()
系统调用为例,分析其中具体的函数调用的实现。这里我们放上之前文章的系统调用过程的图片:
库函数中的
getpid()
调用int $0x80
指令后,系统就从用户态切换到内核态,并跳转到了0x80
中断向量号所对应的中断向量服务程序system_call
,该服务程序的代码位置是/linux-3.18.6/arch/x86/kernel/entry_32.S
文件中的 490 行处的ENTRY(system_call)