2024年4月29日发(作者:)
Linux系统调用分析
计算机962班 周从余
一. 与系统调用有关的一些基本知识
1.
系统调用的定义
在OS的核心中都设置了一组用于实现各种系统共能的子程序,并将它们提供
给用户程序调用.每当用户在程序中需要OS提供某种服务时,便可利用一条系统
调用命令,去调用所需的系统过程.所以说系统调用在本质上是一种过程调用.系统
调用是进程和操作系统之间的接口,这些调用一般就是一些汇编指令集,在Linux
系统中这些调用是用C语言和汇编编写的。用户只有通过这些系统调用才能使
用操作系统提供的一些功能.
2.
系统调用与过程调用的区别
过程调用调用的是用户程序,它运行在用户态;其被调用过程是系统过程,运行在系
统态下.
系统调用是通过软中断机制进入OS核心,经过核心分析后,才能转向响应的命令
处理程序.系统调用返回时通常需要重新调度.系统调用允许嵌套调用.
3.
中断与异常
中断(interrupt)是由外部事件的,可以随时随地发生(包括在执行程序时)所以
用来响应硬件信号。在80386中,又把中断分为两种:
可屏蔽中断(Miscible Interrupt) MI
不可屏蔽中断(NonMaskable Interrupt) NMI
异常(exception)是响应某些系统错误引起的,也可以是响应某些可以在程序中
执行的特殊机器指令引起的. 异常也分为两种:
处理器异常,(指令内部异常 如overflow 等)
编程(调试)异常(debugger)
每一个异常或中断都有一个唯一的标识符,在linux文献中被称为向量。指令内 部
异常和NMI(不可屏蔽中断)的中断向量的范围从0—31。32-255的任何向量都 可
以用做
可屏蔽中断
编程(调试)异常
至于可屏蔽中断则取决于该系统的硬件配置。外部中断控制器(External interrupt
controler)在中断响应周期(interrtupt acknowledge cycle)把中断向量放到总线上。
中断和异常的优先级:
最高
:除调试错误以外的所有错误
最低
: INTR中断。
中断指令INTO,INTn,INT3
当前指令的调试中断
下一指令的调试中断
不可屏蔽中断
386
提供的功能
Intel386认识两种事件类:异常与中断。两者都会强制性创建一个进程或任务。
中断能在任何不可预料的时间发生,来响应硬件的信号.386能辨认两种中断来源
可屏蔽中断和不可屏蔽中断.并能辨认两种异常来源:处理器检测异常和程序异常
每一个中断和异常都有一个号码,都对应着一个相应的矢量地址,不可屏蔽中断
和处理器检测异常都已经被安排在0到31的矢量表中了,可屏蔽中断的矢量地
址由硬件决定,外部中断控制器在中断认可时钟周期时将矢量地址放到总线上。
任何在32到255范围内的矢量,都可以作为可屏蔽中断和程序异常用。以下是所
有可能的中断和异常的列表:
0 Divide error
1 Debug exception
3 NMI interrupt
4 INTO-detected overflow
5 Bound range exceeded
6 Invalid opcode
7 coprocessor not available
8 double fault
9 coprocessor segment overrun
10 invalid task state segment
11 segment not present
12 stack fault
13 general protection
14 page fault
15 reserved
16 coprocessor error
17-31 reserved
32-255 maskable interrupt
二. Linux系统调用的流程
系统调用的简单流程
通常,在OS的核心中都设置了一组用于实现各种系统功能的子程序(过程),
并将它们提供给用户调用。每当用户在程序中需要OS提供某种服务时,变可利用
一条系统调用命令,去调用系统过程。它一般运行在系统态;通过中断进入;返回
时通常需要重新调度(因此不一定直接返回到调用过程)。
Linux系统调用的流程非常简单,它由0x80号中断进入系统调用入口,通过使
用系统调用表保存系统调用服务函数的入口地址来实现.
发布评论