讲过程之前,让我们先明白什么是调用?
但是讲调用之前又需要明白两个概念 核心态和用户态。
操作系统中的状态可以分为核心态(管态)和用户态(目态)。
程序有些是特权指令,特权指令是只能在核心态运行,不能够在用户态运行的指令。
再额外说一点:
其实微内核系统和宏内核系统就是核心态和用户态的划分不同。微内核只提供一些必要的系统服务,也就是处于核心态的系统服务少,只有一些必要的。宏内核把很多的系统服务都划分到了核心态,所以提供的服务比较多。
那划分核心态和用户态的意义是什么呢?
那么我们想一个问题,如果只有核心态没有用户态的情况下,会出现什么情况?
由于系统资源可能同时被多个应用程序访问,那么会出现文件、网络、各种硬件设备等资源竞争的情况,各个应用程序之间可能会产生冲突,对于恶意应用程序更可能导致系统奔溃。
所以对应用程序进行限制就出现了了用户态。
我们普通的应用程序基本都是处于用户态下运行。
那么操作系统调用过程是怎样的呢?
首先运行于用户态的应用程序发出系统调用请求,保护现场。一般都是给出一个中断指令(软中断),然后根据中断向量表查找系统调用表,最后在核心态执行系统调用处理程序(中断程序),最后返回应用程序,恢复现场。