为什么要有系统调用?
我认为有以下原因:
- 用户空间想要访问硬件
- 用户空间之间访问硬件是不安全的
因此,系统调用就作为用户空间进程和硬件设备的中间层出现,它使得用户进程可以受限制的访问硬件设备。这样既保证了安全,又可以使用了。
API POSIX和C库
用户进程不是直接调用的系统调用,而已调用的应用编程接口(API)。
unix世界中,流行的API是基于 POSIX 标准的。
C库实现了unix系统的主要API,提供了POSIX的绝大部分API
从程序员的角度看,他们只和API打交道
从内核角度看,他们只和系统调用打交道
也就是说,API再封装了系统调用,但它们的关系不是一一对应的,一个API可能调用了多个系统调用。
系统调用号
每个系统调用都有一个系统调用号
所有已经注册过的系统调用存储在一个列表sys_call_table中。
系统调用处理程序
软中断号 0x80 会陷入系统调用异常,导致系统切换到内核态并执行这个0x80对应的中断处理程序 system_call()。
一个系统调用的实现
以后补充吧