文件操作接口一:(系统调用与库函数)
1. 系统调用与库函数区别
2.
2.1 系统调用(SCI)定义:
系统调用就是用户程序和硬件设备之间的桥梁。
用户程序在需要的时候,通过系统调用来使用硬件设备
进程直接调用内核暴露出来的的接口的方式称为系统调用
系统调用SCI(system-call interface)
2.2.库函数定义:
调用将内核暴露出来的接口封装好的函数的方法为库函数的调用
注: 有的库函数不需要封装内核暴露出来的接口
3.运行位置
库函数:在用户态调用,在用户态执行
系统调用函数:在用户态调用,在内核态执行
4.执行效率
当处理的数据量比较小时,函数库的函数执行效率比较好
因为函数库的函数的作法是将要处理的数据先存入缓冲区内,等到缓冲区装满了,再将数据一次写入或者读出。这种方式处理小量数据时效率比较高。
但是在进行系统调用时,因为用户进程从用户模式进入系统内核模式,中间涉及了许多额外的任务的切换工作,这些操作称为上下文切换,此类的额外工作会影响系统的执行效率。
5.系统函数和库函数的关系
系统调用通常是用于底层文件的访问
例如在驱动程序中对设备文件的直接访问,如open read write seek等
库函数是对系统调用的一层封装
因此在用库函数对文件操作的时候,必然会引起系统调用。也就是说,库函数调用实际上是通过系统调用实现的
例如:C库函数fwrite()就是通过write实现的。
6.用户态切换内核态
1、调用系统调用函数 → 软中断
2、缺页异常 → 硬中断