库函数与系统调用的联系与区别
2016-01-06 22:30
246 查看
一. 概念
系统调用(英语:system
call),指运行在用户空间的应用程序向操作系统内核请求某些服务的调用过程。 系统调用提供了用户程序与操作系统之间的接口。一般来说,系统调用都在内核态执行。由于系统调用不考虑平台差异性,由内核直接提供,因而移植性较差(几乎无移植性)。
库函数(library function),是由用户或组织自己开发的,具有一定功能的函数集合,一般具有较好平台移植性,通过库文件(静态库或动态库)向程序员提供功能性调用。程序员无需关心平台差异,由库来屏蔽平台差异性。
二,区别
调用※函数库调用 VS 系统
三. 联系
一般而言,跟内核功能与操作系统特性紧密相关的服务,由系统调用提供;
具有共通特性的功能一般需要较好的平台移植性,故而由库函数提供。
库函数与系统调用在功能上相互补充,如进程间通信资源的管理,进程控制等功能与平台特性和内核息息相关,必须由系统调用来实现。
文件 I/O操作等各平台都具有的共通功能一般采用库函数,也便于跨平台移植。
某些情况下,库函数与系统调用也有交集,
如 库函数中的I/O操作的内部实现依然需要调用系统的I/O方能实现。
系统调用(英语:system
call),指运行在用户空间的应用程序向操作系统内核请求某些服务的调用过程。 系统调用提供了用户程序与操作系统之间的接口。一般来说,系统调用都在内核态执行。由于系统调用不考虑平台差异性,由内核直接提供,因而移植性较差(几乎无移植性)。
库函数(library function),是由用户或组织自己开发的,具有一定功能的函数集合,一般具有较好平台移植性,通过库文件(静态库或动态库)向程序员提供功能性调用。程序员无需关心平台差异,由库来屏蔽平台差异性。
二,区别
调用※函数库调用 VS 系统
函数库调用 | 系统调用 |
平台移植性好 | 依赖于内核,不保证移植性 |
调用函数库中的一段程序(或函数) | 调用系统内核的服务 |
一个普通功能函数的调用 | 是操作系统的一个入口点 |
在用户空间执行 | 在内核空间执行 |
它的运行时间属于“用户时间” | 它的运行时间属于“系统”时间 |
属于过程调用,调用开销较小 | 在用户空间和内核上下文环境间切换,开销较大 |
库函数数量较多 | UNIX中大约有90个系统调用,较少 |
典型的C函数库调用:printf scanf malloc | 典型的系统调用:fork open write |
一般而言,跟内核功能与操作系统特性紧密相关的服务,由系统调用提供;
具有共通特性的功能一般需要较好的平台移植性,故而由库函数提供。
库函数与系统调用在功能上相互补充,如进程间通信资源的管理,进程控制等功能与平台特性和内核息息相关,必须由系统调用来实现。
文件 I/O操作等各平台都具有的共通功能一般采用库函数,也便于跨平台移植。
某些情况下,库函数与系统调用也有交集,
如 库函数中的I/O操作的内部实现依然需要调用系统的I/O方能实现。
相关文章推荐
- Storm Grouping机制详解(包含两篇参考资料)
- makefile--模式规则(七)
- 【学习笔记】HBuilder状态栏隐藏显示及颜色
- iOS__ 手势识别总结
- memcache共享session
- C++ 覆盖和隐藏
- Qt 学习 之 二进制文件读写
- 结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法
- 国密杂凑算法SM3
- 第二百七十九天 how can I 坚持
- The EM algorithm个人笔记(一)
- 离散--第三章
- 搭建基于"Jenkins"的iOS持续集成环境
- 互联网协议总结
- 注释
- Windows配置Android环境(eclipse+adt+sdk+genymotion)
- 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题
- Android常用控件(一)
- memcache共享session
- iOS原生自定义二维码扫描界面(类似微信)