系统调用、库函数、及两者的区别

来源:互联网 发布:windows微信 编辑:程序博客网 时间:2024/05/20 02:30

(1)什么是系统调用?

     系统调用,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务、比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件等;从逻辑上来说,系统调用可以被看成是一个内核与用户空间程序交互的接口,它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间。

     系统服务之所以需要通过系统调用来提供给用户空间的根本原因是为了对系统进

行“保护”,因为我们知道Linux的运行空间分为内核空间与用户空间,它们各自运行在不同的级别中,逻辑上相互隔离。所以用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间函数。

但是很多情况下,用户进程需要获得系统服务(调用系统程序),这时就必须利用系统提供给用户的“特殊接口”——系统调用了,它的特殊性主要在于规定了用户进程进入内核的具体位置;换句话说,用户访问内核的路径是事先规定好的,只能从规定位置进入内核,而不准许肆意跳入内核。有了这样的进内核的统一访问路径限制才能保证内核安全无虞。

   

系统调用大致过程是:

1、应用程序调用API函数库(例如:libc)中的接口函数。

2、接口函数引用相应的系统调用宏。

3、系统调用宏中使用int 0x80完成系统调用并返回到应用程序。


(2)系统调用它和函数有何区别?

系统调用:指运行在用户空间应用程序操作系统内核请求某些服务的调用过程。 系统调用提供了用户程序与操作系统之间的接口。一般来说,系统调用都在内核态执行。由于系统调用不考虑平台差异性,由内核直接提供,因而移植性较差(几乎无移植性)。

函数:是由用户或组织自己开发的,具有一定功能的函数集合,一般具有较好平台移植性,通过库文件(静态库或动态库)向程序员提供功能性调用。程序员无需关心平台差异,由库来屏蔽平台差异性。

区别:

  库函数:                                                     系统调用:

平台移植性好

依赖于内核,不保证移植性

调用函数库中的一段程序(或函数)

调用系统内核的服务

一个普通功能函数的调用

操作系统的一个入口点

在用户空间执行

在内核空间执行

它的运行时间属于“用户时间”

它的运行时间属于“系统”时间

属于过程调用,调用开销较小

在用户空间和内核上下文环境间切换,开销较大

库函数数量较多

UNIX中大约有90个系统调用,较少


原创粉丝点击