系统调用

梦想与她 提交于 2020-01-14 00:46:57

为什么要有系统调用?
我认为有以下原因:

  1. 用户空间想要访问硬件
  2. 用户空间之间访问硬件是不安全的

因此,系统调用就作为用户空间进程和硬件设备的中间层出现,它使得用户进程可以受限制的访问硬件设备。这样既保证了安全,又可以使用了。

API POSIX和C库

用户进程不是直接调用的系统调用,而已调用的应用编程接口(API)。
unix世界中,流行的API是基于 POSIX 标准的。
C库实现了unix系统的主要API,提供了POSIX的绝大部分API

从程序员的角度看,他们只和API打交道
从内核角度看,他们只和系统调用打交道
也就是说,API再封装了系统调用,但它们的关系不是一一对应的,一个API可能调用了多个系统调用。

系统调用号

每个系统调用都有一个系统调用号
所有已经注册过的系统调用存储在一个列表sys_call_table中。

系统调用处理程序

软中断号 0x80 会陷入系统调用异常,导致系统切换到内核态并执行这个0x80对应的中断处理程序 system_call()

一个系统调用的实现

以后补充吧

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!