Linux系统调用机制详解
1. 系统调用概述
操作系统为运行在用户模式下的进程提供了一组与硬件设备(如CPU、磁盘和打印机)交互的接口。在应用程序和硬件之间添加这一额外层有诸多优点:
-编程更简便:用户无需研究硬件设备的底层编程特性,降低了编程难度。
-增强系统安全性:内核可以在尝试满足请求之前,在接口级别检查请求的准确性。
-提高程序可移植性:程序可以在提供相同接口集的任何内核上正确编译和执行。
Unix系统通过向内核发出系统调用来实现用户模式进程与硬件设备之间的大多数接口。下面将详细介绍Linux如何实现用户模式程序向内核发出的系统调用。
2. POSIX API与系统调用
2.1 API与系统调用的区别
应用程序编程接口(API)是指定如何获取给定服务的函数定义,而系统调用是通过软件中断向内核发出的显式请求。
Unix系统包含多个函数库,为程序员提供API。libc标准C库中定义的一些API引用了包装例程,其唯一目的是发出系统调用。通常,每个系统调用都有一个对应的包装例程,定义了应用程序应使用的API。
但API不一定对应特定的系统调用,原因如下:
-直接在用户模式提供服务:对于像数学函数这样的抽象功能,可能无需进行系统调用。
-单个API函数进行多个系统调用。
-多个API函数进行相同系统调用并包装