一.系统调用
所有的操作系统都提供多种服务的入口点,程序由此向内核请求服务。这些可直接进入内核的入口点被称为系统调用。
逻辑上系统调用可以被看做是一个内核与用户程序空间程序的接口。
它的执行流程就是把用户进程的请求传递给内核,待内核处理完毕后将处理结果返回给用户空间。
下面适用于访问设备驱动程序的系统调用:
open:打开文件或设备
read:从打开的文件和设备中读取数据
write:向打开的文件或设备中写入数据
close:关闭文件和设备
ioctl:把控制信息传递给设备驱动文件
二.库函数
用户或组织自己开发的,具有一定功能的函数集合,一般具有较好平台移植性,通过库文件(静态库或者动态库)向程序员提供功能性调用。程序员无需关心平台差异,由库来屏蔽平台差异性。
三.差异性
调用※函数库调用 VS 系统
函数库调用 系统调用
平台移植性好 依赖于内核,不能保证移植性
调用函数库中的一段程序(或函数) 调用系统内核的服务
一个普通功能函数的调用 是操作系统的一个入口点
在用户空间执行 在内核空间执行
它的运行时间属于“用户时间” 它的运行时间属于“系统”时间
属于过程调用,调用开销较小 在用户空间和内核上下文环境间切换,开销较大
库函数数量较多 UNIX中大约有90个系统调用,较少
四.联系
一般而言,跟内核功能与操作系统特性紧密相关的服务,由系统调用提供;
具有共通性的动能一般需要较好的平台移植性,故而由库函数提供。