Linux下的系统调用原理

系统调用

在这里插入图片描述

运行库:应用程序和系统调用的中间层,为了兼容性,这样Windows可以用printf、Linux也可以使用printf,而不用知道它的底层逻辑。

代码地址

https://github.com/niu0217/NiuOS

参考资料

  • 《Linux内核完全注释》
  • 《程序员的自我修养—链接、装载与库》

1. 源代码分析

1.1 向中断向量表注册中断处理函数(int 0x80)

在这里插入图片描述
在这里插入图片描述

0x80:系统调用号;

system_call:0x80对应的系统调用函数;

1.2 分析system_call函数

linux-0.11/kernel/system_call.s
在这里插入图片描述

我们观察到:

call sys_call_table(,%eax,4)    # 查系统调用表,根据系统调用号(eax)找到要调用的函数

这里它会去查系统调用表,eax保存的是一个下标,对应具体要调用的系统调用函数,那么sys_call_table到底是什么样子的呢?

1.3 分析sys_call_table函数

linux-0.11/kernel/system_call.s
在这里插入图片描述

从这里我们得到sys_call_table就是一个数组,其中保存的是系统调用函数,eax就是下标。

2. Linux系统中断流程图解

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落后的炫幕あ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值