linux中断机制

来源:互联网 发布:短信轰炸机淘宝有卖吗 编辑:程序博客网 时间:2024/05/23 21:34

80x86采用了8259A可编程中断控制器芯片,每个这种芯片可以管理8个中断,通过级联最多可以管理64个中断。

80x86支持256个中断,每个中断向量表需要4字节组成,因此整个中断向量表需要1KB,而且他们必须放在0x00000000处。

linux内核中,中断分为硬件中断和软中断。每个中断都由0~255中的一个数来标志。前32个中断号被intel保留,属于软中断,即所谓的程序异常。

linux中int32~int47对应与8259A的硬件中断,并把程序发出的系统调用中断设置为int128(0x80)。系统调用中断是用户程序使用操作系统资源的唯一界面接口。

为了避免竞争条件和中断对临界代码区的干扰,linux内核很多地方使用了cli和sti指令,分别用来禁止中断和回复中断。


系统调用:

linux内核中每个系统调用都具有唯一的一个系统调用功能号。定义在include/unistd.h中。例如write的系统调用功能号是4,定义为符号__NR_write。这些功能号对应于include/linux/sys.h中定义的系统调用处理程序指针数组表sys_call_table[]中项的索引值。因此write系统调用的处理程序指针就位于该数组的项4处。

当程序经过库函数向内核发出一个中断调用int 0x80时,就开始执行一个系统调用。其中寄存器eax中存放着系统调用号,而携带的参数可依次放在寄存器ebx,ecx和edx中,因此0.11