IO部分
一、
Linux
系统调用和库函数
重点:
- 操作系统的概念
- 系统调用的概念,库函数的概念,以及两者之间的区别。
- POSIX C API的概念
操作系统的基本概念
操作系统(opearting OS
)是管理和控制硬件与软件的计算机程序,它是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源、控制程序运行,改善人机界面等,以使计算机系统所有资源最大限度地发挥作用。
App-POSIX C API-GNU C
库
-
系统调用
-
内核
之间的层次关系
l
内核级别的
sysCall
:
为管理硬件资源和为
应用程序
开发人员提供良好的环境来使应用程序具有更好的兼容性,
内核
提供一系列具备预定功能的
多内核
函数
,通过一组称为
系统调用(
system call)
的接口呈现给用户
。系统调用把
应用程序
的请求传给
内核
,调用相应的的内核
函数
完成所需的处理,将处理结果返回给应用程序。通过这组接口用户程序,可以使用操作系统内核提供的各种功能,实现分配内存,创建线程,进程通信。
所有的操作系统都具有系统调用接口,不同操作系统的系统调用接口也是不同的。
linux
操作系统调用接口非常精简,它继承了
Unix
操作系统的系统调用中最基本和最有用的部分。
总结:
系统调用的好处
1)
用户空间进程访问内核的接口:
所有的操作系统都提供多种服务的入口点,通过这些入口点,用户态程序而是要通过设置软中断的方式陷入内核才能执行内核的函数,向内核请求服务
2)
把用户从底层的硬件编程中解放出来
3)
极大的提高了系统的安全性:
受限地访问硬件设备资源。实际上这些接口主要是为了保护系统稳定可靠,防止应用程序恣意妄为
l
POSIX
定义的
--C
语言形式的
--
用户编程接口
API
:
l
用户编程接口(
API
)(
Application Program Interface
)
。
API
的三种形式
:
(1)
这些POSIX C API
中,有的一个API
可以直接对应一个sysCall
,这些库函数也是我们就简称其为
系统调用
.
(2)
有些API
内部实封装了更复杂的功能,可能会间接调用多个sysCall
;
(3)
或者有些API
完全不使用任何syscall
。对这些对应多个内核系统调用或者不使用系统调用的库函数,我们就还是叫它
库函数
。
l
POSIX
:
POSIX
是一个由I E E E (
电气和电子工程师学会 )
制订的标准族。 POSIX
的意思是计算机环境的可移植操作系统界面(Portable Operating System Interface for Computer Environment)
。该标准目的是为了提高UNIX
环境下应用程序的可移植性。通俗的理解,为一个POSIX
兼容的操作系统编写程序,可以在任何其他POSIX
操作系统上编译执行。
总结:系统调用是对应操作系统级别的原子操作,提供一个访问内核的最小界面。而库函数是面向应用为了方便应用某些功能实现进行了封装,内部可能调用系统调用,也可能没有。