库函数和系统调用的区别

系统调用:操作系统为用户提供了一系列接口,这些接口提供了对硬件设备的操作。举个例子我们用printf想终端打印hello world,程序中调用printf,而printf实际上调用的是write,从而打印信息到终端。

库函数:库函数是对系统调用的封装。系统调用作为内核提供给用户的接口,它执行的效率是比较高效和精简的,但有时候我们需要对获取的信息进行一些处理,我们把这些处理过程封装起来提供给程序员,有利于编码。

库函数有可能包含一个系统调用,有可能包含几个系统调用,也有可能不包含系统调用,一些简单的操作就涉及到内核的功能。

系统调用的意义

  1. 避免了用户直接对底层硬件的编程。比如像终端打印信息,终端对系统来说是硬件资源,如果没有系统调用,用户则需要编写终端设备驱动的代码,以及控制终端如何显示的代码
  2. 隐藏背后的技术细节:使用write系统调用,用户则不用关系数据在磁盘的那个磁道的那个扇区,以及数据要加载到内存的什么位置。
  3. 保证系统的安全性和稳定性:避免了用户直接对内核空间的操作,避免了安全隐患。
  4. 方便程序的编程:大家都使用一个接口,移植起来就很方便,如果是自己写自己的,移植性会不好。

系统调用和库函数的比较(以下前提是库函数中没有使用系统调用)

  1. 所有c函数库是相同的,但是不同操作系统的系统调用则不相同
  2. 函数库调用是调用函数库中的程序,而系统调用调用的是内核的服务
  3. 库函数的调用是在用户空间执行,而系统调用则是在内核空间执行
  4. 函数库调用属于过程调用,开销较小,而系统调用需要进行用户态和内核态的上下文切换,开销较大

猜你喜欢

转载自blog.csdn.net/qq_41727218/article/details/88218308
今日推荐