系统调用原理及详细过程
为什么要有系统调用?
由于系统的有限资源可能被多个不同的应用程序访问,因此,如果不加以保护,那么用程序难免产生冲突。所以,现代操作系统都将可能产生冲突的系统资源给保护起来,阻止应用程序直接访问。这些系统资源包括文件、网络、IO、各种设备等。
为了让应用程序有能力访问系统资源,也为了让应用程序能够借助操作系统做一些必须由操作系统支持的行为。每个操作系统都会提供一套接口,以供应用程序使用。这些接口往往通过中断来实现。
系统调用与运行库(标准库)
系统调用的弊端
- 使用不便。操作系统提供的系统个调用接口往往过于原始,程序员需要了解很多与操作系统相关的细节。如果没有很好的包装,使用起来不方便
- 各个操作系统之间的系统调用不兼容。首先Windows系统和Linux系统之间的系统调用就基本上完全不同。即使是同系列的操作系统的系统调用都不一样,比如Linux和Unix就不相同
为了解决这个问题,运行库作为系统调用与程序之间的一个抽象层挺身而出,它有一下特点:
- 使用简便。
- 形式统一。运行库有它的标准,叫做标准库,凡是所有遵循这个标准的运行库理论上都是相互兼容的,不会随着操作系统或编译器的变化而变化。
系统调用的原理:
现代操作系统通常让代码运行在两种不同特权的模式下
——用户态和内核态——以限制他们的权力。系统调用要操作一些有限的资源,无疑是运行在内核态的。那么用户态程序如何运行内核态的代码呢?操作系统一般是通过中断来从用户态切换到内核态。<