# 6. 系统调用

![](/files/-MErjHKymHytfwQPLibi)

## 1. 什么是系统调用？& 作用

操作系统作为用户和计算机硬件之间的接口，需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中，程序接口由一组**系统调用**组成

“系统调用”是操作系统提供给应用程序（程序员/编程人员）使用的接口，可以理解为一种可供应用程序调用的特殊函数，**应用程序可以通过系统调用来请求获得操作系统内核的服务**

## 2. 系统调用 & 库函数 区别

![](/files/-MErohEA_ge1YNOQcnBC)

![](/files/-MErobtURMg5KII236FG)

不涉及系统调用的库函数：取绝对值函数

涉及系统调用的库函数：创建一个新文件函数

## 3. 小例子：为什么系统调用是必须的？

**生活场景：**&#x53BB;学校打印店打印论文，你按下了WPS 的“打印”选项，打印机开始工作。你的论文打印到一半时，另一位同学按下了Word 的“打印”按钮，开始打印他自己的论文。

**思考：**&#x5982;果两个进程可以随意地、并发地共享打印机资源，会发生什么情况？

两个进程并发运行，打印机设备交替地收到WPS 和Word 两个进程发来的打印请求，结果两篇论文的内容混杂在一起了…

**解决方法：**&#x7531;操作系统内核对共享资源进行统一的管理，并向上提供 “系统调用”，用户进程想要使用打印机这种共享资源，只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理。

## 4. 什么功能需要系统调用？

应用程序通过**系统调用**请求操作系统的服务，而系统中的各种共享资源都由操作系统内核统一掌管，因此凡是**与共享资源有关的操作（如存储分配、I/O操作、文件管理等），都必须通过系统调用的方式向操作系统内核提出服务请求**，由操作系统内核代为完成。这样**可以保证系统的稳定性和安全性**，防止用户进行非法操作。

![](/files/-MErqnkSFYcsrudZVP3D)

## 5. 系统调用的过程

![](/files/-MErrID5m8HX14RsAx-3)

传递系统参数 -> 执行陷入指令（**用户态**）-> 执行相应的请求内核程序处理的系统调用（**内核态**）-> 返回应用程序

**Tip：**

1. **陷入指令**是在**用户态**执行的，执行陷入指令之后立即引发一个**内中断**，使 CPU **进入核心态**
2. **发出系统调用请求**是在**用户态**，而**对系统调用的相应处理**在**核心态**下进行


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lfool.gitbook.io/operating-system/untitled-1/6.-xi-tong-tiao-yong.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
