当前位置:首页 » 操作系统 » linux中断处理

linux中断处理

发布时间: 2022-04-29 10:20:51

linux中断的下半部机制有哪些

一、中断处理为什么要下半部?Linux在中断处理中间中断处理分了上半部和下半部,目的就是提高系统的响应能力和并发能力。通俗一点来讲:当一个中断产生,调用该中断对应的处理程序(上半部)然后告诉系统,对应的后半部可以执行了。然后中断处理程序就返回,下半部会在合适的时机有系统调用。这样一来就大大的减少了中断处理所需要的时间。

二、那些工作应该放在上半部,那些应该放在下半部?
没有严格的规则,只有一些提示:
1、对时间非常敏感,放在上半部。
2、与硬件相关的,放在上半部。
3、不能被其他中断打断的工作,放在上半部。
以上三点之外的,考虑放在下半部。

三、下半部机制在Linux中是怎么实现的?
下半部在Linux中有以下实现机制:
1、BH(在2.5中删除)
2、任务队列(task queue,在2.5删除)
3、软中断(softirq,2.3开始。本文重点)
4、tasklet(2.3开始)
5、工作队列(work queue,2.5开始)

四、软中断是怎么实现的(以下代码出自2.6.32)?
软中断不会抢占另外一个软中断,唯一可以抢占软中断的是中断处理程序。
软中断可以在不同CPU上并发执行(哪怕是同一个软中断)

1、软中断是编译期间静态分配的,定义如下:
struct softirq_action { void (*action)(struct softirq_action *); };

/*
* PLEASE, avoid to allocate new softirqs, if you need not _really_ high
* frequency threaded job scheling. For almost all the purposes
* tasklets are more than enough. F.e. all serial device BHs et
* al. should be converted to tasklets, not to softirqs.
*/
enum {
HI_SOFTIRQ=0,
TIMER_SOFTIRQ,
NET_TX_SOFTIRQ,
NET_RX_SOFTIRQ,
BLOCK_SOFTIRQ,
BLOCK_IOPOLL_SOFTIRQ,
TASKLET_SOFTIRQ,
SCHED_SOFTIRQ,
HRTIMER_SOFTIRQ,
RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */
NR_SOFTIRQS

② linux的中断处理函数要满足什么特点

中断处理程序不可以有入口参数或者返回值,interrupt将函数修饰为中断函数,函数经过interrupt修饰后,程序员只编写中断服务程序的主体部分,中断服务程序中的保护现场前缀段和恢复现场的后缀段,均由编译程序完成。另外,编译程序还将ret指令改成reti指令。中断函数的最大特点是返回类型和参数均必须为void。

③ Linux几种中断信号的区别:HUP,INT,KILL,TERM,TSTP

Linux的HUP,INT,KILL,TERM,TSTP中断信号区别为:键入不同、对应操作不同、启用不同。

一、键入不同

1、HUP中断信号:HUP中断信号是当用户键入<Ctrl+X>时由终端驱动程序发送的信号。

2、INT中断信号:INT中断信号是当用户键入<Ctrl+I>时由终端驱动程序发送的信号。

3、KILL中断信号:KILL中断信号是当用户键入<Ctrl+Z>时由终端驱动程序发送的信号。

4、TERM中断信号:TERM中断信号是当用户键入<Ctrl+>时由终端驱动程序发送的信号。

5、TSTP中断信号:TSTP中断信号是当用户键入<Ctrl+T>时由终端驱动程序发送的信号。二、对应操作不同

1、HUP中断信号:HUP中断信号的对应操作为让进程挂起,睡眠。

2、INT中断信号:INT中断信号的对应操作为正常关闭所有进程。

3、KILL中断信号:KILL中断信号的对应操作为强制关闭所有进程。

4、TERM中断信号:TERM中断信号的对应操作为正常的退出进程。

5、TSTP中断信号:TSTP中断信号的对应操作为暂时停用进程。

三、启用不同

1、HUP中断信号:HUP中断信号发送后,可以重新被用户再次输入恢复启用进程。

2、INT中断信号:INT中断信号发送后,不可以重新被用户再次输入恢复启用进程。

3、KILL中断信号:KILL中断信号发送后,不可以重新被用户再次输入恢复启用进程。

4、TERM中断信号:TERM中断信号发送后,可以重新被用户再次输入启用进程。

5、TSTP中断信号:TSTP中断信号发送后,可以重新被用户再次输入继续使用进程。

④ linux中断的问题

不会阻塞中断处理函数,因为disable_irq_nosync只是屏蔽中断触发,而不是屏蔽中断处理函数,
一般中断分为上半部和下半部,中断处理函数是在下半部,中断屏蔽只是在上半部;你应该先了解中断原理在来看代码,你应该先看一下《深入理解linux内核》这本书的中断部分

⑤ linux中断处理程序使用的堆栈是内核的堆栈吗,在哪里

当然是,进程生成时,会被分配一个task_struct 结构(常说的进程控制块),2.4内核中,在task_struct 结构体上面的7KB空间就是。加上task_struct结构本身(1KB),进程内核栈共8KB(两个页面 ),不会动态扩展,所以非常有限(你会见到内核代码用"大块"内存都会kmalloc申请的,就是这个原因)。2.6内核的没注意,不知一样否。详见:《Linux内核源代码情景分析(上)》267页。
为什么会在内核的原因是CPU的保护机制,中断处理需要更高的权限(可能执行硬件相关的操作),故要在0级,不会在用户区的。

⑥ linux系统中的中断指令是什么

什么是中断
Linux 内核需要对连接到计算机上的所有硬件设备进行管理,毫无疑问这是它的份内事。如果要管理这些设备,首先得和它们互相通信才行,一般有两种方案可实现这种功能:
轮询(polling) 让内核定期对设备的状态进行查询,然后做出相应的处理;中断(interrupt) 让硬件在需要的时候向内核发出信号(变内核主动为硬件主动)。
第一种方案会让内核做不少的无用功,因为轮询总会周期性的重复执行,大量地耗用 CPU 时间,因此效率及其低下,所以一般都是采用第二种方案 。
对于中断的理解我们先看一个生活中常见的例子:QQ。第一种情况:你正在工作,然后你的好友突然给你发送了一个窗口抖动,打断你正在进行的工作。第
二种情况:当然你有时候也会每隔 5 分钟就去检查一下 QQ
看有没有好友找你,虽然这很浪费你的时间。在这里,一次窗口抖动就可以被相当于硬件的中断,而你就相当于 CPU,你的工作就是 CPU
这在执行的进程。而定时查询就被相当于 CPU 的轮询。在这里可以看到:同样作为 CPU 和硬件沟通的方式,中断是硬件主动的方式,较轮询(CPU
主动)更有效些,因为我们都不可能一直无聊到每隔几分钟就去查一遍好友列表。
CPU
有大量的工作需要处理,更不会做这些大量无用功。当然这只是一般情况下。好了,这里又有了一个问题,每个硬件设备都中断,那么如何区分不同硬件呢?不同设
备同时中断如何知道哪个中断是来自硬盘、哪个来自网卡呢?这个很容易,不是每个 QQ 号码都不相同吗?同样的,系统上的每个硬件设备都会被分配一个
IRQ 号,通过这个唯一的 IRQ 号就能区别张三和李四了。
从物理学的角度看,中断是一种电信号,由硬件设备产生,并直接送入中断控制器(如
8259A)的输入引脚上,然后再由中断控制器向处理器发送相应的信号。处理器一经检测到该信号,便中断自己当前正在处理的工作,转而去处理中断。此后,
处理器会通知 OS 已经产生中断。这样,OS
就可以对这个中断进行适当的处理。不同的设备对应的中断不同,而每个中断都通过一个唯一的数字标识,这些值通常被称为中断请求线。

⑦ linux内核在执行中断处理时是关中断的吗

1、中断处理程序与其他内核函数真正的区别在于,中断处理程序是被内核调用来相应中断的,而它们运行于中断上下文(原子上下文)中,在该上下文中执行的代码不可阻塞。中断就是由硬件打断操作系统。
2、异常与中断不同,它在产生时必须考虑与处理器时钟同步。异常被称为同步中断,例如:除0、缺页异常、陷入内核(trap)引起系统调用处理程序异常。
3、不同的设备对应的中断不同,而每个中断都通过一个唯一的数字(中断号)标识。
4、既想让中断处理程序运行得快,又想中断处理程序完成的工作量多,为了在这两个相悖的目标之间达到一种平衡,一般把中断处理分为两个部分。中断处理程序是上半部(top half):接收到一个中断,它就立刻开始执行,但只做有严格时限的工作,例如对接受的中断进行应答或者复位硬件,这些工作都是在中断被禁止的情况下完成的(上半部情况下,中断被禁止);另一部分是下半部(bottom half):能够被允许稍后完成的工作会推迟到下半部。

⑧ linux 在中断处理时,要进去SVC模式,请问这到底是什么原因

对ARM来说,当发生中断的时候,CPU进入的是中断mode, 只是Linux在SVC mode下处理中断了. 当然,理论上来说,不在SVC下,而在 中断mode下处理也可以。我猜想Linux这样做的原因是,Linux要兼容绝大多数的ARCH,每一个ARCH相关的代码都放在arch/目录下,比如ARM是放在arch/arm下。所以,如果arm要是不利用现有Linux的框架,把绝大多数的代码都放在arch/arm下(中断处理的代码也放在arch/arm下的irq mode中处理),那linux就非常臃肿。所以,arm Linux为了最大程度的利用Linux已有的架构,就放在SVC模式下处理了(Linux最早是在i386上开发的,i386只利用了2个ring, 即,ring0 和 ring 3, ring 0,对应于ARM的svc mode)。 事实上,到了现在的ARMV8,AARCH64已经取消了这么多的MODE,而采取了4个Level, 分别是 0,1,2,3. 对于OS来说,支持0和1 两个Level就可以了, Level 2 是用于虚拟化,Level 3 是用于monitor.

当fiq中断发生的时候,也会进入FIQ mode, 只是 在ARM SOC中,很少有FIQ的外设。所以,Linux中,没有对FIQ进行处理,但接口还是有的。

⑨ Linux下如何强制中断一个程序的执行(利用按键,而不是kill命令)

Linux下强制中断一个程序的执行,利用按键,而不是kill命令。

可尝试以下方法:

1.CTRL + c中断。

2.CTRL + z暂停放到后台。

3.CTRL + d保存退出。

热点内容
ui与编程 发布:2024-10-04 23:26:49 浏览:900
google访问ip 发布:2024-10-04 23:19:28 浏览:51
陕西税票服务器地址 发布:2024-10-04 23:04:23 浏览:16
2014访问学者 发布:2024-10-04 22:59:37 浏览:917
c质数的算法 发布:2024-10-04 22:58:32 浏览:521
三星的浏览器在哪个文件夹 发布:2024-10-04 22:57:05 浏览:987
连接line的服务器地址 发布:2024-10-04 22:57:01 浏览:181
衣柜门尺寸简单算法 发布:2024-10-04 22:56:54 浏览:722
有什么软件可以清理缓存垃圾 发布:2024-10-04 22:55:24 浏览:755
手机电脑中配置是指的什么 发布:2024-10-04 22:53:53 浏览:156