> For the complete documentation index, see [llms.txt](https://dev2ero.gitbook.io/notes-cs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dev2ero.gitbook.io/notes-cs/operating-system/operating-system-basic/cao-zuo-xi-tong-gai-shu/cao-zuo-xi-tong-de-yun-hang-huan-jing-yu-ji-zhi/xi-tong-tiao-yong.md).

# 系统调用

### 概述

* 系统调用是什么
  * 一种特殊的异常
  * 用户在编程时可以调用的操作系统功能
* 系统调用的作用
  * 系统调用是操作系统提供给编程人员的唯一接口
  * 使CPU状态从用户态陷入内核态

![](https://1476380306-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MZBTUOxxb0Af3Va3Lxu%2F-M_ANoYNf2of_FOry0Np%2F-M_APIUxjrkX09aX5wpy%2FSC_20210508_175650.png?alt=media\&token=bb5437cf-6b1a-4714-ad9d-130879d78e77)

### 机制设计

1. 中断/异常机制：支持系统调用服务的实现
2. 选择一条特殊指令-陷入指令(亦称访管指令)：引发异常，完成用户态到内核态的切换
3. 系统调用号和参数：每个系统调用都事先给定一个编号(功能号)
4. 系统调用表：存放系统调用服务例程的入口地址

### 执行过程

* 中断/异常机制：硬件保护现场；通过查中断向量表把控制权转给系统调用总入口程序
* 系统调用总入口程序：保存现场；将参数保存在内核堆栈里；通过查系统调用表把控制权转给相应的系统调用处理例程或内核函数
* 执行系统调用例程
* 恢复现场，返回用户程序
