使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

 王宣 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

第一部分:回顾

       系统调用的意义:

                           操作系统为用户态进程与硬件设备进行交互提供了一组接口--------系统调用

                                       1.把用户从底层的硬件编程中解放出来

                                       2.极大的提高了系统的安全性

                                       3.使用户程序具有可移植行

         API和系统接口

                应用编程接口(即API)和系统调用不同

                              1.API只是一个函数定义

                              2.系统调用通过软中断向内核发出一个明确的请求

                    Libc库定义的一些API引用了封装例程(wrapper routine,唯一目的就是发布系统调用)

                              1.一般每个系统调用对应一个封装例程

                              2.库再用这些封装例程定义出给用户的API

                   关于返回值

                              1.大部分封装例程会返回一个整数,其中值的含义依赖于相应的系统调用

                              2.大多数情况下,-1表示内核不能满足进程的请求

                              3.Libc中定义的errno变量包含特定的出错码

                    需要注意的地方:并不是每个API都对应一个特定的系统调用,有可能直接提供用户态的服务

                                            一个单独的API也可能调用几个系统调用,而且不同的API也可能调用同一个系统调用

第二部分: API,system_call和sys_xyz

            回顾中已经说明了,API中封装了系统调用;system_call则是运行于内核态,从名字上也能大概猜出来,它是

            所有系统调用在内核态的入口点,而sys_xyz则是执行具体的系统调用操作,完成系统调用请求

            

          上图中的xyz()在用户态,int 0x80触发系统调用,然后进入system_call,然后通过sys_xyz()执行具体的调用操作

第三部分:实验部分

这里采用的是fork(),首先是c语言的格式


这里是汇编形式



结果,就截了一幅图


第四部分:总结

每次课程都有不少的收获,也要感觉老师的通俗讲解,希望自己能坚持下去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值