Linux内核分析(五)系统调用过程解析

禹晓博+ 原创作品转载请注明出处 + 欢迎加入《Linux内核分析》MOOC网易云课堂学习

一、系统调用流程分析

        系统调用系统调用就是用户空间应用程序和内核提供的服务之间的一个接口。由于服务是在内核中提供的,因此无法执行直接调用;相反,我们必须使用一个进程来跨越用户空间与内核之间的界限,这实际上就是系统调用的过程。我们首先来开一个系统调用流程的示意图。


        Linux中的系统调用的实现会根据不同的架构而有所变化,而且即使在某种给定的体系结构上也会有所不同,我们看到上述是一个简单的系统调用的例子。每一个个系统调用都是通过一个单一的入口点多路传入内核的。eax 寄存器用来标识应当调用的某个系统调用,这在 C 库中做了指定(来自用户空间应用程序的每个调用)。当加载了系统的 C 库调用索引和参数时,就会调用一个软件中断(0x80 中断),它将执行 system_call 函数(通过中断处理程序),这个函数会按照 eax 内容中的标识处理所有的系统调用。在经过几个简单测试之后,使用 system_call_table 和 eax 中包含的索引来执行真正的系统调用了。从系统调用中返回后,最终执行 syscall_exit,并调用 resume_userspace 返回用户空间。然后继续在 C 库中执行,它将返回到用户应用程序中。

        上一篇文章实际上我们经讲过了关于system_call_table相关的内容了,我们实际上可以简单的理解为一个跳转列表一样的东西,那么系统是如何通过这些列表来找到具体的服务程序的呢?这里面实际上非常类似于中断处理的过程,因为系统调用过程的本身就是引发一次中断的过程。这里面有一个非常好的词就是trap。实际上这是一次主动引起的异常(大体上可以这么理解)。那么在分析之前我们首先先看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值