UNIX/Linux体系结构与系统调用
操作系统在计算机体系中的位置
内核的功能
内存管理
-
内存分配调用
包括静态分配方式、动态分配方式; -
内存保护
确保每个程序在自己的内存空间运行、互不干扰。方法是使用界限 寄存器或存储保护键; -
地址映射
实现程序的逻辑地址与存储器的物理地址之间的映射功能; -
内存扩充
从逻辑上扩充物理内存,以允许比物理内存更大的程序在机器内运 行,为此操作系统必须具有:请求调入功能与置换功能
进程管理
-
进程控制
包括进程创建、进程撤销、进程阻塞、进程唤醒 -
进程协调
由于进程运行的异步性,因此进程同步的任务是对诸进程的运行协 调,包括两种方式:进程互斥方式与进程同步方式; -
进程通信
主要完成同一台机器上不同进程间通信和不同机器上进程间的通信, 以共同完成一相同的任务; -
进程调度
操作系统按照一定的规则对等待运行的多道程序进行调度,以保证 每个程序都能有机会得到运行,并最终完成
文件管理
-
文件存储空间的管理
为每一文件分配必要的外存空间。为提高外部存储 空间的利用率,系统应设置相应的数据结构,用于记录文件存储空间的使用情况; -
目录管理
为了方便对用户的文件进行管理,对文件系统建立一定结构的目录 结构,同时要求快速的目录查询手段; -
文件的读、写管理和存取控制
利用一定的系统调用对文件进行读写操 作。同时,为防止系统中的文件被非法访问和窃取,文件系统中必须提供有效存取 控制功能;
设备管理
-
缓冲管理
管理各种类型的缓冲区,如字符缓冲区和块缓冲区,以缓和CPU和 I/O速度不匹配的矛盾,最终达到提高CPU和I/O设备的利用率,进而提高系统吞吐 量的目的; -
设备管理
根据用户的I/O请求,为之分配其所需要的设备; -
设备处理
又称为设备驱动程序,任务是实现CPU和设备控制器之间的通信; -
设备独立性和虚拟设备
一方面保证用户程序独立于物理设备,另一方面 保证多个进程能并发地共享同一个设备;
UNIX/Linux操作系统架构
系统调用与库函数
操作用户接口
- 命令接口:以命令形式呈现在用户面前,方便用户直接或间接控制自己的作业
- 程序接口:为应用程序使用系统功能而设置,是应用程序取得操作系统服务的 唯一途径。由一系列系统调用组成,每一个系统调用都是一个能完成特定功能的子 程序。
- 图形接口:采用了图形化的操作界面,将各种应用程序和文件,直观、逼真地 表示出来。
系统调用
-
系统调用是内核提供的程序接口,是应用程序和硬件设备之间的中间层:
- 为应用程序提供了系统服务和硬件抽象能力,例如,当需要读文件时,应用程序可以不管磁盘类 型和介质,甚至不用去管文件所在的文件系统到底是哪种类型;
- 系统调用保证了系统的稳定和安全
- 每个进程都运行在虚拟系统中
系统调用的类型
- 文件操作类系统调用:如打开、创建、读取、删除、修改文件;
- 进程控制类系统调用:如创建进程、设置或获取进程属性等;
- 通信类系统调用:创建进程间的通信连接,发送、接收消息,或其他的通信 方式;
- 设备管理类系统调用:打开、关闭和操作设备;
- 信息维护类系统调用:在用户程序和OS之间传递信息。例如,系统向用户 程序传送当前时间、日期、操作系统版本号等。
系统调用与C库函数的关系
-
系统调用和C库函数之间并不是一一对应 的关系,可能几个不同的函数会调用到同 一个系统调用:
- malloc函数和free函数都是通过sbrk系统调用来扩大 或缩小进程的堆栈空间;
- execl、execlp、execle、execv、execvp和execve 函数都是通过execve系统调用来执行一个可执行文件
-
并非所有的库函数都会调用系统调用,例 如,printf函数会调用write系统调用以输 出一个字符串,但strcpy和atoi函数则不 使用任何系统调用
C库函数、系统调用
- 一般而言,应用程序使用API而不是直接使用系统调用来编程