系统调用是用户进程与内核交互的经典方法。POSIX标准定义了许多系统调用,以及这些系统调用在所有遵从POSIX的系统包括Linux上的语义。传统的系统调用按不同类别分组,如下所示。
进程管理:创建新进程,查询信息,调试。
信号:发送信号,定时器以及相关处理机制。
文件:创建、打开和关闭文件,从文件读取和向文件写入,查询信息和状态。
目录和文件系统:创建、删除和重命名目录,查询信息,链接,变更目录。
保护机制:读取和变更UID/GID,命名空间的处理。
定时器函数:定时器函数和统计信息。
所有这些函数都对内核提出了要求。这些函数不能以普通的用户库形式实现,因为需要特别的保护机制来保证系统稳定性或安全不受危及。此外许多调用依赖内核内部的结构或函数来得到所需的数据或结果,这也导致了无法在用户空间实现。在发出系统调用时,处理器必须改变特权级别,从用户状态切换到核心态。Linux对此没有标准化的做法,因为每个硬件平台都提供了特定的机制。有时候,在同样的体系结构上也会根据处理器类型使用不同的方法实现。尽管Linux使用了一个专用软件中断在IA-32处理器上执行系统调用,而其他UNIX操作系统在IA-32上的软件仿真(iBCS仿真器)则采用了一种不同的方法来执行二进制程序。IA-32架构的现代处理器也提供了专用的汇编语句来执行系统调用。这在旧系统上是不可用的,因此无法用到所有计算机上。对所有的处理器来说,一个共同点就是:用户进程要从用户状态切换到核心态,并将系统关键任务委派给内核执行,系统调用是必由之路。
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|