资料介绍
Linux的系统调用(systemcall)Linux 的系统调用(systemcall)
作者:徐骏
声明:本人水平有限,所以本文中出错是可能的,希望各位高手指点一 二。
为什么要有系统调用?
系统调用是每个操作系统必不可少的一部分,在这个操作系统中的每个 app (应用程序)或用户程序都必须依靠系统调用来完成对硬件的操作:其关系如下: 应用程序 系统调用 系统资源(硬件) shell
这样,就要求系统调用的高效性,因为它关系到整个系统的效率,所以,在 linux 中,使用中断机制来实现系统调用,保证了系统的高效性。下面我们就来看看 linux 是 如何实现的吧。
386 体系结构
一个操作系统必定在一个特定的硬件平台上,所以一些底层的功能少不了硬件的支持, 现在我们就来看 80386 的体系结构对系统调用提供了那些支持。
在 386 体系结构中,承认两类事件。
1. 异常(exceptions) 2. 中断(interrupts) 他们两都会引起“上下文转换” ,(context switch)同时建立一个过程(procedure)或任务(task)
中断可以随时随地发生(包括在执行程序时)所以用来响应硬件信号。而异常则 由指令内部错误引起。 在 80386 中,又把中断分为两种: 可屏蔽中断(Miscible Interrupt) MI 1.不可屏蔽中断(NonMaskable Interrupt) NMI 异常也分为两种: 1. 处理器异常, (指令内部异常 如 overflow 等) 2.编程(调试)异常(debugger) 每一个异常或中断都有一个唯一的标识符,在 linux 文献中被称为向量。 指令内部异常和 NMI(不可屏蔽中断)的中断向量的范围从 0―31。32-255 的任何 向量都可以用做 1. 可屏蔽中断 2. 编程(调试)异常 至于可屏蔽中断则取决于该系统的硬件配置。外部中断空