Linux————系统调用与库函数

本文介绍了系统调用和库函数的基本概念,系统调用作为操作系统提供的服务,涉及设备管理、进程控制、进程通信和内存管理等方面,而库函数则由用户实现,存在于用户空间。系统调用具有较低的可移植性和较高的执行成本,而库函数则相反。以open()系统调用为例,阐述了其调用过程。系统调用与库函数在功能和性能上存在显著区别,是软件开发中不可或缺的两个层面。
摘要由CSDN通过智能技术生成

一、系统调用:

系统调用是操作系统实现的方法(函数),存在内核空间。
1、基本概念及内容:

所谓系统调用就是用户在程序中调用操作系统所提供的一些子功能(内核实现的一些方法),系统调用可以被看做特殊的公共子程序。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、进行I/0传输以及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。通常,一个操作系统提供的系统调用命令有几十乃至上百条之多。

这些系统调用按功能大致可分为如下几类:

  • 设备/文件管理: 完成设备/文件的打开(open)、读(read)、写(write)、关闭(close)等功能。
  • 进程控制: 完成进程的创建、撤销、阻塞及唤醒等功能。
  • 进程通信: 完成进程之间的消息传递或信号传递等功能。
  • 内存管理: 完成内存的分配、回收以及获取作业占用内存区大小及始址等功能。

2、系统调用实例:

例如要进行open()系统调用,打开文件,首先会将open()对应的系统调用号放入eax寄存器,然后产生0x80号中断,陷入内核(eax寄存器将系统调用号带入内核),内核态通过查找系统调用表,找到对应的系统函数方法并执行,将执行结果存入eax寄存器,返回给用户态,然后恢复程序的执行。
在这里插入图片描述

二、库函数:

库函数是用户自己实现或封装的方法,存在用户空间。
它可能调用封装了一个或几个不同的系统调用(printf调用write),也可能完全由用户态完成操作(atoi不调用任何系统调用)。

三、系统调用和库函数的区别:

1、系统调用由操作系统实现,存放在内核空间,是面向io、进程、内存等最底层的操作;库函数由用户实现,存放在用户空间,一般是面向应用开发的上层操作。
2、系统调用的可移植性差,不同操作系统的系统调用都是不同的;而库函数具有良好的可移植性,如c库里的方法不管在什么操作系统下都可以正常使用。
3、系统调用的开销大、相对执行时间长,因为会在用户态和内核态之间进行切换;库函数的调用开销小、相对执行时间短,只在用户态运行(仅限没有封装系统调用的库函数)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值