梗概

  • 操作系统对外部暴露的函数,而这个入口就是操作系统提供的系统调用(System Call)
  • 系统调用在用户空间进程和硬件设备之间添加了一个中间层。该层主要作用有三个:
    • 它为用户空间提供了一种统一的硬件的抽象接口。
      • 比如当需要读些文件的时候,应用程序就可以不去管磁盘类型和介质,甚至不用去管文件所在的文件系统到底是哪种类型。
    • 系统调用保证了系统的稳定和安全。作为硬件设备和应用程序之间的中间人,内核可以基于权限和其他一些规则对需要进行的访问进行裁决。
      • 举例来说,这样可以避免应用程序不正确地使用硬件设备,窃取其他进程的资源,或做出其他什么危害系统的事情。
    • 每个进程都运行在虚拟系统中,而在用户空间和系统的其余部分提供这样一层公共接口,也是出于这种考虑。
      • 如果应用程序可以随意访问硬件而内核又对此一无所知的话,几乎就没法实现多任务和虚拟内存,当然也不可能实现良好的稳定性和安全性。在Linux中,系统调用是用户空间访问内核的惟一手段;除异常和中断外,它们是内核惟一的合法入口。

适用范围

语义

  • 大多数操作系统系统调用是基于C语言的
    • 如Linux、windows

实际应用

  • 一般情况下应用程序通过基于系统调用的更上层API,而不是直接通过系统调用来编程。
    • 这些api由该编程语言的某个库来提供的
    • 在Unix世界,最流行的API是基于POSIX标准的。

参考