库函数是语言本身的一部分,而系统函数是内核提供给应用程序的接口,属于系统的一部分。
函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分。
用户应用程序访问并使用内核所提供的各种服务的途径即是系统调用。在内核和用户应用程序相交界的地方,内核提供了一组系统调用接口,通过这组接口,应用程序可以访问系统硬件和各种操作系统资源。
1.系统调用是为了方便应用使用操作系统的接口,而库函数是为了方便人们编写应用程序而引出的,比如你自己编写一个函数其实也可以说就是一个库函数。
2.系统调用可以理解为内核提供给我们在用户态用的接口函数,可以认为是某种内核的库函数。
3.read就是系统调用,而fread就是C标准库函数。
函数库调用
|
系统调用
|
在所有的ANSI C编译器版本中,C库函数是相同的
|
各个操作系统的系统调用是不同的
|
它调用函数库中的一段程序(或函数)
|
它调用系统内核的服务
|
与用户程序相联系
|
是操作系统的一个入口点
|
在用户地址空间执行
|
在内核地址空间执行
|
它的运行时间属于“用户时间”
|
它的运行时间属于“系统”时间
|
属于过程调用,调用开销较小
|
需要在用户空间和内核上下文环境间切换,开销较大
|
在C函数库libc中有大约300个函数
|
在UNIX中大约有90个系统调用
|
典型的C函数库调用:system fprintf malloc | 典型的系统调用:chdir fork write brk; |
系统调用和函数库的关系。
系统调用通过软中断int0x80从用户态进入内核态。
函数库中的某些函数调用了系统调用。
函数库中的函数可以没有调用系统调用,也可以调用多个系统调用。
编程人员可以通过函数库调用系统调用。
高级编程也可以直接采用int0x80进入系统调用,而不必通过函数库作为中介。
如果是在核心编程,也可以通过int0x80进入系统调用,此时不能使用函数库。因为函数库中的函数是内核访问不到的。
2.
1)
2)
3)