系统调用与标准函数库(下)

        友情提示:本文系接上一篇博文——系统调用与标准函数库(上)

        2. 系统调用与内核

        为了更好地保护了内核,在Linux中,把程序运行空间分为内核空间和用户空间,它们分别运行在不同的级
别上。用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,但在有些情况下,就比如本人最近做的GPON项目中,应用程序经常需要与内核打交道,这个时候用户空间的进程需要获得一定的系统服务,这时,就必须通过系统调用。

        应用程序运行在用户空间,系统调用需要切换到内核空间,应用程序应该以某种方式通知内核需要切换到内核空间。通知内核的机制是靠软件中断实现的:应用程序执行异常指令,引发一个异常,程序进入中断,系统切换到内核态去执行异常处理程序。此处的异常处理程序即系统调用处理程序syscall()。所有的系统调用陷入内核的方式都一样,所以仅仅是陷入内核空间是不够的,必须以某种方式通知内核进入异常的原因。Unix系统通过系统调用号通知内核进入异常的原因,操作系统给每个系统调用分配了一个唯一的编号,这个编号就是系统调用号。用户空间进程执行一个系统调用时,这个系统调用号就被用来指明执行哪个系统调用。系统调用号相当关键,一旦分配就不能再有任何变更,否则编译好的应用程序会崩溃。此外,如果一个系统调用被删除,它所占用的系统调用号也不允许被回收利用。(路径:/usr/include/i386-linux-gnu/asm/unistd_32.h)

                          


        3. 系统调用与库

        库函数由两类函数组成:第一类是不需要调用系统调用的:不需要切换到内核空间即可完成函数全部功能,
并且将结果反馈给应用程序,如strcpy、bzero等字符串操作函数。第二类是需要调用系统调用:需要切换到内核空间,这类函数通过封装系统调用去实现相应功能,如printf、fread等。

        库函数与系统调用的关系:并不是所有的系统调用都被封装成了库函数,系统提供的很多功能都必

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值