> 文章列表 > 操作系统原理 —— 什么是系统调用?(五)

操作系统原理 —— 什么是系统调用?(五)

操作系统原理 —— 什么是系统调用?(五)

什么是系统调用? 有什么用作用?

我们想想怎么是系统调用呢?

系统调用操作系统提供给应用程序(程序员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。

我们一起来看下图:
操作系统原理 —— 什么是系统调用?(五)

我们在操作系统中,可以使用控制台输入命令,不通过应用程序可以直接和操作系统交互,这个叫做:命令接口。

而在应用程序中,我们程序员可以通过程序接口,来调用操作系统,让操作系统帮助我们完成所需的事情。

那为什么需要系统调用呢?

之前有说到,操作系统它是管理硬件和软件的一些资源,如果不通过系统调用,那么多个程序并发执行是不是就容易出问题。

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

那操作系统提供了哪些系统调用的功能呢? 如下图:

操作系统原理 —— 什么是系统调用?(五)

这里暂时先不需要详细去了解,大概了解一下就行了。

系统调用与库函数的区别

那系统调用,和我们平时在开发过程中调用的库函数有什么区别吗? 我们来看一下图就清楚了

操作系统原理 —— 什么是系统调用?(五)

首先我们知道,在操作系统中是和硬件打交道的,操作系统为了方便其他编程语言,把与硬件的交互都进行了封装,隐藏了很多一些细节。 库函数也是同样的道理,编程语言为了方便程序员理解、使用,把调用系统函数也进行了封装,再一次隐藏一些不必要的细节。这样对于我们这些编程人员来讲,提高了便捷性,也降低了学习成本。

系统调用背后的过程

我们再来详细看一下系统调用背后的过程是什么。

举个例子,我们调用库函数 write(abc) 写操作,首先库函数是需要编译成汇编语言指令,如下图:

操作系统原理 —— 什么是系统调用?(五)

如上图,一个 write库函数,对应了很多条汇编指令,包括前期、后期想处理的命令,比较核心的是:movl指令,这个指令的作用就是将 “abc” 作为系统调用参数放入到某个通用的寄存储器中,然后调用 int x 指令

int x 这里的 x 参数,是指明了系统调用号,此处的int不是 integer 的意思,而是 interrupt 的缩写。

这个 x 可以有以下值:
操作系统原理 —— 什么是系统调用?(五)

这里如果 x 是等于 4,那么就表示写入。

这里需要注意几个点:
1、陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,从而 CPU 进入核心态。

2、发出系统调用请求是在用户态,而对系统调用的相应处理是在核心态下进行的。

3、陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令。

本章总结

操作系统原理 —— 什么是系统调用?(五)