Linux认证:Linux系统内核下的传统调用' j, ?* _/ B! U$ N! u
Linux系统内核下的传统调用
# H- J6 U, r% O9 x! Z' Z系统调用是用户进程与内核交互的经典方法。POSIX标准定义了许多系统调用,以及这些系统调用在所有遵从POSIX的系统包括Linux上的语义。传统的系统调用按不同类别分组,如下所示。. P9 z- c" x, h3 |8 t5 j4 i2 v0 ?# z
进程管理:创建新进程,查询信息,调试。, a6 r) B) I) b
信号:发送信号,定时器以及相关处理机制。
o* H$ }( ~% a: K; T! N文件:创建、打开和关闭文件,从文件读取和向文件写入,查询信息和状态。
! L0 r: J# \# u目录和文件系统:创建、删除和重命名目录,查询信息,链接,变更目录。! B2 D n- x3 E
保护机制:读取和变更UID/GID,命名空间的处理。
# {! x+ q; X& c3 m j定时器函数:定时器函数和统计信息。
# Y( p; @4 Q( g, i所有这些函数都对内核提出了要求。这些函数不能以普通的用户库形式实现,因为需要特别的保护机制来保证系统稳定性或安全不受危及。此外许多调用依赖内核内部的结构或函数来得到所需的数据或结果,这也导致了无法在用户空间实现。在发出系统调用时,处理器必须改变特权级别,从用户状态切换到核心态。Linux对此没有标准化的做法,因为每个硬件平台都提供了特定的机制。有时候,在同样的体系结构上也会根据处理器类型使用不同的方法实现。尽管Linux使用了一个专用软件中断在IA-32处理器上执行系统调用,而其他UNIX操作系统在IA-32上的软件仿真(iBCS仿真器)则采用了一种不同的方法来执行二进制程序。IA-32架构的现代处理器也提供了专用的汇编语句来执行系统调用。这在旧系统上是不可用的,因此无法用到所有计算机上。对所有的处理器来说,一个共同点就是:用户进程要从用户状态切换到核心态,并将系统关键任务委派给内核执行,系统调用是必由之路。 |