linux中断机制的处理过程(linux中断机制)

linux如何强制中断?

llinux强制中断的命令有以下两个:

linux停止命令方法一

终止当前正在执行的某个命令最快的方法是按下组合键“Ctrl+C”。这个方法只有在用户能够从某个虚拟控制台上控制这个程序的时候才奏效。

linux停止命令方法二

终止某个出错程序的另外一个办法是kill(杀)掉它的进程。请按照下面的方法进行操作:

1) 输入“ps”命令获取进程的PID,这个命令要求你是运行这个程序的那个人或者是根用户。如果是根用户,请输入“ps -aux”命令查看所有的进程,不管是谁拥有它们的。

2) 在清单中找到这个出错进程。因为程序的名称列在清单的最右边,通常一眼就可以找到它。

3) 请记下ps命令输出清单中进程状态行最左边的ID数字。

4) 输入“kill ID”,终止该进程。

linux网络中断?

一、最简单的中断机制

最简单的中断机制就是像芯片手册上讲的那样,在中断向量表中填入跳转到对应处理函数的指令,然后在处理函数中实现需要的功能中断源:引起中断的原因或者说发出中断请求的来源叫做中断源

**中断类型:**外部中断,内部中断。 外部中断一般指外设发出的中断请求,可以屏蔽;内部中断是指因硬件出错或者运算逻辑出错引起的中断,也叫异常,不可屏蔽。

中断处理:

linux把中断处理分为两半,上下半部处理

上半部:处理非常紧急的事情 ,不可被其他中断打断的。如敏感时间、CPU逻辑、硬件状态处理,这部分要非常快的完成,这部分中所有中断被屏蔽

下半部:将中断中不非常紧急的处理延后到一个合适的时间执行 ,如把读到的数据放到队列

上下半部的处理主要区别是在于中断是否被屏蔽,下半部主要由上半部安装调度:

中断服务函数里加了延迟会怎么样?

1,中断处理程序中不能使用有睡眠功能的函数,如ioremap,kmalloc,msleep等,理由是中断程序并不是进程,没有进程的概念,因此就没有休眠的概念;

2,中断处理程序中的延时可以用忙等待函数来代替,如ndelay,udelay,mdelay等,这些函数在实现上本质是根据CPU频率进行一定次数的循环;最好不要使用mdelay,因为毫秒延时对内核来说已经是非常大了。但是在中断处理程序中使用msleep却不行。(见linux设备驱动开发详解第二版p210页)

3,printk函数在中断处理函数中可以使用,但是会占用较多时间,降低效率。在调IIC驱动的时候,由于IIC读取写入处理时必须进行一定延时,在我没有使用udelay的时候,竟然用printk就使IIC中断正常运行,当时在调试的时候,发现有些printk加上程序就正常,去掉就不正常,当时真是匪夷所思,但现在明白了,因此printk占用时间比较大,正好充当了IIC延时的功能。最后我把printk全部去掉,在需要延时的地方加入udelay,才使程序正常运行。

4,使用for和while等的空循环在中断处理函数中进行延时操作,在实际测试中发现并不能起到延时的功能,linux内核处理这种循环速度很快,并没有延时的效果。这跟裸板程序使用循环来延时的用法不相同。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注