系统调用
1 内核模式与用户模式
- 为了保护设备,操作系统不可能让所有的程序都能轻松地访问到任何的文件,将处理器CPU分为两种模式,内核模式和用户模式,诸如一些修改寄存器内容的命令,比如次磁盘的IO操作、访问物理页内存、访问网络上的数据包,这些涉及内核的操作只能是通过高权限的内核模式下进行,用户模式下没有权限进行。
2 系统调用概念
- 系统内核通过包装一些能够实现特定功能的特殊硬件指令和硬件状态,即为内核函数,通过一组称为系统调用(system call)的接口呈现给用户,为系统调用而封装出来的API也达数百个。
3 系统调用过程
- 当系统发起调用时通常通过一个称为陷阱(trap)的特殊硬件指令,硬件将控制转移到预先指定的陷阱处理程序(trap handler)(即预先设置的操作系统),并同时将特权级别提升到内核模式(kernel mode)。
- 在内核模式下,操作系统可以完全访问系统的硬件,因此可以执行诸如发起I/O请求或为程序提供更多内存等功能。
- 当操作系统完成请求的服务时,它通过特殊的陷阱返回(return-from-trap)指令将控制权交还给用户,该指令返回到用户模式,同时将控制权交还给应用程序,回到应用离开的地方。
4 系统调用举例(Linux)
-
进程管理
- fork
- exec
- kill
- wait
-
进程通信
- ipc
-
网络通信
- getdomainname 取域名
- setdomainname 设置域名
- gethostid 获取主机标识号
- sethostid 设置主机标识号
- gethostname 获取本主机名称
- sethostname 设置主机名称
-
文件管理
- access 确定文件可存取性
- chdir
- mkdir
- rename
-
内存管理
-
用户管理
- getuid 获取用户标识号
- setuid 设置用户标志号
- getgid 获取组标识号
- setgid 设置组标志号
- getegid 获取有效组标识号
- setegid 设置有效组标识号