《Linux内核分析》(五)——Linux系统调用的执行过程

本文详细分析了Linux内核源码中系统调用的执行过程,从system_call函数出发,阐述了系统调用如何通过软中断int 0x80进入内核态,保存现场,查找并执行相应服务例程,最后返回用户态的过程。通过简化entry_32.S的代码,展示了系统调用处理程序的主要步骤,并介绍了如何在实践中添加新的系统调用。
摘要由CSDN通过智能技术生成

作者:Sandy 原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
实验环境:c+Linux64位 (32位系统可能结果会不同)
依照学术诚信条款,我保证此回答为本人原创,所有回答中引用的外部材料已经做了出处标记。


一,系统调用的内核源码

1,内核中关于系统调用的源码。
上一周的课程分析了系统调用的整体流程,本文主要是从Linux内核源码的层次来分析系统调用的执行;本文使用到的内核的源码都能够在这里查看Linux内核源码;其中系统调用分派表(dispatch table)位于文件\arch\x86\syscalls\syscall_32.tbl,该文件标志了内核的系统调用的系统调用号;而系统调用的内核源码则位于/linux-3.18.6/arch/x86/kernel/entry_32.S,该文件的内核源码是系统调用执行的主要代码,也是本文分析的重点。

2,系统调用在内核中的调用方式。
在之前的分析Linux内核启动的课程中,在\init\main.c 的start_kernel中有这样的调用:

trap_init()

当时分析过这一模块主要是对系统调用进行初始化,该函数的位置:/arch/x86/kernel/traps.c,其中有如下代码:


#ifdef CONFIG_X86_32
    set_system_trap_gate(SYSCALL_VECTOR, &system_call);
    set_bit(SYSCALL_VECTOR,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值