1 / 2
文档名称:

UNIX内核-系统调用的机制.doc

格式:doc   页数:2
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

UNIX内核-系统调用的机制.doc

上传人:管理资源吧 2012/2/6 文件大小:0 KB

下载得到文件列表

UNIX内核-系统调用的机制.doc

文档介绍

文档介绍:UNIX内核-系统调用的机制
 
系统调用的机制

大多数的微处理器的处理都可以被当前执行的程序具有更高优先级的事件中断。
这些特殊事件有各自的特点,但总的说来,它们可以分为中断和异常(Interrupts and excepton)。中断可以说是硬件设备对处理器产生的“刺激”,它们是由外部事件引起的。这些事件包括硬盘和软盘的活动,键盘的输入,,异常则是响应某些系统错误引起的,也可以是响应某些可以在程序中执行的特殊机器指令引起的。不管产生的是中断还是异常,处理器响应的方式是类似的。执行一段被称为中断处理或异常处理的特殊程序。一般来说,在特定的系统中,对每一种中断和异常类型都有单独的处理程序。对每一种中断和异常,都在0~255范围内给以一个唯一的数加以标记,当发生中断或者异常时,这个数(称为向量号)用作进入指针数组(中断或异常向量表)的索引,表中每个指针指向用来处理特定中断或异常类型的子程序的地址。大多数中断和异常象函数一样进行处理。所以当中断或异常处理程序结束时,被中断的程序将重发生中断时的断点继续向下执行。

在UNIX系统中,系统调用是作为一种异常类型实现的。它将执行相应的机器代码指令来产生异常信号。产生中断或异常的重要效果是系统自动将用户模式切换为内核模式来对它进行处理。这就是说,执行系统调用的异常指令时,将自动地将系统切换为内核模式,并安排异常处理程序的执行。它知道如何处理这一调用。
以LINUX为例,在LINUX中实现系统调用异常的实际指令是:
int $0x80
这一指令使用中断/异常向量号128(即16进制的80)将控制权转移给内核。为达到在系统调用时不必用机器指令编程,在标准的C语言库中为每一个系统调用提供了一段短的子程序,完成机器代码的编程工作。事实上,机器代码非常短。它要做的工作只是将送给系统调用的参数值加载到CPU寄存器中,接着执行int $0x80指令。然后运行系统调用,系统调用的返回值将送入CPU的一个寄存器中,标准的库子程序取得这一返回值,并将它送回给你的程序。为了使系统调用执行成为一项简单的任务,LINUX中提供了一组预处理宏指令。它们可以用在程序中。这些宏指令取一定的参数,然后扩展为调用指定的系统调用的函数:
这些宏指令具有类似下面的名称格式:
syscallN(parameters)
其中N用系统调用所需的参数数目代替,而parameters则用一组参数代替。这些参数使宏指令完成适合于特定的系