linux系统调用 和 库可函数调用

原创 2011年10月13日 21:03:36

 截取网上比较容易理解的。

 

所谓系统调用,就是内核提供的、功能十分强大的一系列的函数。这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现。系统调用是用户程序和内核交互的接口。整个系统调用的过程可以总结如下:1. 执行用户程序(如:fork)2. 根据glibc中的函数实现,取得系统调用号并执行int $0x80产生中断。3. 进行地址空间的转换和堆栈的切换,执行SAVE_ALL。(进行内核模式)4. 进行中断处理,根据系统调用表调用内核函数。5. 执行内核函数。6. 执行RESTORE_ALL并返回用户模式

 

库函数和系统调用的区别:人们在长期编程中发现使用系统调用有个重大的缺点,那就程序的移植性,比如说:linux系统提供的系统调用的函数和windows就不一样,2者不单单是实现的方式不同,提供给用户的函数名,参数都不同,这个可以理解。因此一个实现好的程序,利用了linux的系统调用譬如说wait4函数,那么他在windows上编译是通不过的。于是人们想了个办法,就是封装了windows和linux系统调用,给大家一个统一的函数(我习惯叫它接口),那么这样程序的移植性问题就解决了。所以可以这么认为库函数是对系统调用的封装(不是所有的库函数都是),为的是解决一些公共的问题和提供统一的系统调用的接口,他和系统调用的优缺点就是:系统调用速度是明显要快于库函数(并不一定全部是,但绝大部分是),但系统调用缺乏移植性。库函数速度要慢,但解决了移植问题。这些在开发过程中要根据自己的实际情况来决定使用那一个。

 

系统调用的实现有两个特别之处:1)函数声明中都有asmlinkage限定词,用于通知编译器仅从栈中提取该函数的参数。2)系统调用getXXX()在内核中被定义为sys_getXXX()。这是Linux中所有系统调用都应该遵守的命名规则。

 

未完待续......

 

操作系统中最基本的概念——库调用和系统调用

http://blog.csdn.net/clearriver/archive/2009/05/05/4152780.aspx Unix操作系统设计上的陈述: 理解库函数的区别和系统调用,首先要里...
  • Lyintong
  • Lyintong
  • 2016-03-20 15:24:59
  • 977

重要的系统调用函数头文件介绍

最常用办法:在终端输入 man 2 open 直接查看open使用方法 2、遇到编译错误,如何解决: 上述错误表示找不到write、read的函数定义,要检查头文件是否包含,加入即可解决。...
  • lz_1990
  • lz_1990
  • 2016-11-01 11:01:07
  • 454

使用库函数也有系统调用的开销,为什么不直接使用系统调用呢?

《C专家编程》中提到,库函数调用通常比行内展开的代码慢,因为它需要付出函数调用的开销。但系统调用比库的数调用还要慢很多,因为它需要把上下文环境切换到内核模式然后再切换回来。 库函数对文件的操作实...
  • natahew
  • natahew
  • 2017-06-12 16:19:21
  • 484

系统调用和库函数及API的区别

在写程序的过程中,像MFC,VC++这些编程,都会涉及到函数的调用,有库函数也有系统函数,下面看一看它们的区别!! 一、系统调用: 系统调用实际上是指底层的一...
  • gogoky
  • gogoky
  • 2016-05-03 13:39:48
  • 10004

库函数与系统调用的联系与区别

一. 概念 系统调用(英语:system call),指运行在用户空间的应用程序向操作系统内核请求某些服务的调用过程。 系统调用提供了用户程序与操作系统之间的接口。一般来说,系统调用都在内核...
  • u011456940
  • u011456940
  • 2016-01-06 22:30:55
  • 3952

关于软中断和系统调用的一点分析

感觉之前对于软中断一直有一些误解。   软中断的定义: 软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。很多情况下,软中断和“信号”类似。同时,软中断又是和硬中断相对应的,“...
  • shybrian
  • shybrian
  • 2013-09-14 15:19:08
  • 6170

Linux网络编程--主要系统调用函数

一、字节顺序和转换函数1、大小端不同机器内部对变量的字节存储顺序不同,有的采用大端模式,有的采用小端模式 大端模式:高字节数据存放在低字节处,低字节数据存放在高字节处 小端模式:低字节数据存放在低...
  • yyc794990923
  • yyc794990923
  • 2016-08-08 15:06:57
  • 973

系统调用read,write和标准库fread,fwrite的区别

read,write属于Linux系统调用,fread,fwrite属于C语言标准库 使用系统调用会影响系统的性能。与函数调用相比,系统调用的开销要大些,因为在执行系统调用时,Linux必须从运...
  • ixiaochouyu
  • ixiaochouyu
  • 2015-09-10 11:14:57
  • 1246

系统调用和函数调用

系统调用和函数调用1. 系统调用a. 什么是系统调用系统调用,通俗的讲,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户...
  • The_V_
  • The_V_
  • 2015-11-24 13:42:25
  • 1258

linux系统调用之----kill函数

进程之间通信: 一个进程可以向另一个进程发送信号,因此信号可以很好的用于进程之间的通信。通过信号输出的信息,使多个进程可以协作完成一个任务。Linux环境使用kill函数向进程或进程组发送信号。 ...
  • yubing_615
  • yubing_615
  • 2013-08-25 12:00:35
  • 2286
收藏助手
不良信息举报
您举报文章:linux系统调用 和 库可函数调用
举报原因:
原因补充:

(最多只允许输入30个字)