通过这个问题,可以判断候选人是否具有丰富的编程经验以及是否具有找出这类问题答案的敏锐感觉。
简明的回答是:函数库调用是语言或应用程序的一部分,而系统调用是操作系统
的一部分。你要确保弄懂“trap(自陷)”这个关键字的含义。系统调用是在操作系统内核发现一个“trap”或中断后进行的。
※
函数库调用 VS 系统调用
| 函数库调用 | 系统调用 |
| 在所有的ANSI C编译器版本中,C库函数是相同的 | 各个操作系统的系统调用是不同的 |
| 它调用函数库中的一段程序(或函数) |
它调用系统内核的服务 |
| 与用户程序相联系 | 是操作系统的一个入口点 |
| 在用户地址空间执行 |
在内核地址空间执行 |
| 它的运行时间属于“用户 时间” | 它的运行时间属于“系统”时间 |
| 属于过程调用,调用开销较小 |
需要在用户空间和内核上下文环境间切换,开销较大 |
| 在C函数库libc中有大约300个函数 | 在UNIX中大约有90个系统调用 |
| 典型的C函数库调用:system fprintf malloc | 典型的系统调用:chdir fork write brk; |
库函数调用通
常比行内展开的代码慢,因为它需要付出函数调用的开销。但系统调用比库函数调用还要慢很多,因为它需要把上下文环境切换到内核模式。
本文详细解释了函数库调用与系统调用之间的区别,包括它们的定义、执行环境、开销大小及典型例子等。有助于理解不同类型的调用在编程中的作用。

被折叠的 条评论
为什么被折叠?



