现代操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口使得应用程序受限地访问硬件设备,保证系统稳定可靠,避免应用程序肆意妄行。
系统调用就是用户空间进程和外围设备之间的中间层,提供系统调用主要有三个作用:
而站在程序员的角度,往往又在系统调用之上再封装了一层 API 用来调用。
另外,每个系统调用都会分配一个系统调用号来唯一表示系统调用函数。
系统调用大致可分为六大类:进程控制(process control)、文件管理(file manipulation)、设备管理(device manipulation)、信息维护(information maintenance)、通信(communication) 和保护(protection)。
用户空间的程序无法直接执行内核代码,所以需要通知内核切换内核态,执行系统调用。
这种通知机制使用软中断实现(软中断是软件模拟的中断,类似于信号;硬中断是外部设备中断 CPU),通过引发一个异常来迫使系统切换到内核态去处理异常处理程序,这个异常处理程序其实系统调用的处理程序,x8