我们通常所说的中断指的是硬中断(hardirq)。 (2) 软中断 为了满足实时系统的要求,中断处理应该是越快越好。...相应的中断处理函数的地址为:中断向量表地址 + 4 * n。 (5)硬中断和软中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。...硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。 硬中断是可屏蔽的,软中断不可屏蔽。...硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。 软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。...但一个软中断不会抢占另一个软中断,唯一可以抢占软中断的是硬中断。
我们通常所说的中断指的是硬中断(hardirq)。 (2)软中断 为了满足实时系统的要求,中断处理应该是越快越好。...(5)硬中断和软中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。...硬中断是可屏蔽的,软中断不可屏蔽。 硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。 软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。...) // 是否处于硬中断 #define in_softirq() (softirq_count()) // 是否处于软中断 三、硬中断 (1)注册中断处理函数 注册中断处理函数: /** * irq...但一个软中断不会抢占另一个软中断,唯一可以抢占软中断的是硬中断。
软中断的引入 软中断的出现和linux系统对中断的划分是分不开的。...所以linux系统将中断处理分为两部分,在上半部全程关闭中断,下半部打开中断。而在上半部主要干一些和硬件有关的操作,速度快,在下部分做一些耗时的操作。这样一来既能保证系统效率又能处理各种中断。...那linux如何判断软中断是否发生呢?...TIMER_SOFTIRQ的回调函数如下: open_softirq(TIMER_SOFTIRQ, run_timer_softirq); Softirq的触发 linux系统通过函数raise_softirq来触发一个软中断...B: 根据注释, 如果当初处于中断上写文中(硬+软+NMI), 直接返回。 如果不是就调用wakeup_softirqd来唤醒本cpu上的内核线程。
经常有朋友问起软中断的问题......话说我干了这么多年,还从未在VxWorks领域见过这个词儿,孤陋寡闻了 上网搜了一下,软中断应该是Linux的softirq吧,其典型应用就是中断的bottom half。...关于中断,这是嵌入式领域的一个重点词汇,每个OS都支持,从名字来看,肯定是跟硬件有关的。但ISR执行时间过长,就会带来很多麻烦,所以在使用时都会有很多限制。...除了这些限制,不同的OS还提出了不同的solution,例如Linux的这个软中断。既然名字里带个"软",就是用软件(内核线程?)
软中断处理几乎(但不等同)与硬中断一样重要。软中断的优先级比较高(但也有例外,见下文),但低于硬中断,因此会抢占除硬中断外的任何任务。...在很早以前,Linux存在32个硬中断向量,并为每个向量分配一个设备驱动或相关的任务。...:一种是在处理完一个硬中断时,中断处理程序会触发软中断(硬中断之后会触发软中断,用于处理硬中断的信号或数据,如网卡报文等),为了某些目的(如减小延迟,优化缓存等) 需要尽快处理该软中断,这样就能够重新启用硬中断...一旦线程退出,内核会禁用该软中断的上下文,并运行下一个软中断,使用这种方式可以减小处理软中断的延迟(由于会立即运行下一个软中断)。同样重要的是,这种方式将软中断和产生该软中断的进程绑定到了一起。...但有一种例外:由硬中断引发的软中断不能使用这种方式处理。由于无法将硬中断与一个特定的线程进行关联,因此不能使用对应的线程做必要的处理。这种情况下会将这些软中断交给ksoftirqd 进程处理。
软中断通信简介软中断通信是进程间通信的一种常见方式,它基于信号机制,允许不同进程之间进行通信。在软中断通信中,一个进程向另一个进程发送特定的信号,接收进程捕获信号并执行相应的处理。...软中断通信的实现步骤如下:信号发送:发送进程使用kill()函数向接收进程发送信号,信号类型可以自行指定。...信号是操作系统中的一种通知机制,用于通知进程发生了某些事件,如接收到外部中断或其他进程发送的信号。...signal()与常见信号SIGINTSIGINT是由键盘生成的中断信号,通常由用户按下Ctrl + C组合键发送给前台进程组的所有进程。
相关结构 关键的结构体描述如下所示,可以类比硬件中断来理解。 支持的软中断类型,可以认为是软中断号, 其中从上到下优先级递减。.../* 发送网络数据包软中断 */ NET_RX_SOFTIRQ, /* 接收网络数据包软中断 */ BLOCK_SOFTIRQ, /* 块设备软中断 */ IRQ_POLL_SOFTIRQ..., /* 块设备软中断 */ TASKLET_SOFTIRQ, /* tasklet软中断 */ SCHED_SOFTIRQ, /* 进程调度及负载均衡的软中断 */ HRTIMER_SOFTIRQ...; CPU 软中断状态描述,当某个软中断触发时,__softirq_pending 会置位对应的 bit。...下面我们看下什么时候进行软中断函数回调? 处理软中断 软中断执行的入口就是 invoke_softirq。
软中断分析最近工作繁忙,没有时间总结内核相关的一些东西。上次更新博客到了linux内核中断子系统。这次总结一下软中断,也就是softirq。之后还会总结一些tasklet、工作队列机制。...1.为什么要软中断 编写驱动的时候,一个中断产生之后,内核在中断处理函数中可能需要完成很多工作。但是中断处理函数的处理是关闭了中断的。也就是说在响应中断时,系统不能再次响应外部的其它中断。...只有在进入了软中断处理过程中之后才会开启硬件中断,如果在软件中断处理过程中有硬件中断嵌套,也不会再次调用软中断,because硬件中断是软件中断处理过程中再次进入的,此时preempt_count已经记录了软件中断...重新设置软中断标记为0,set_softirq_pending重新设置软中断标记为0,这样在之后重新开启中断之后硬件中断中又可以设置软件中断位。 7. 开启硬件中断 8....处理软中断内核线程 之前我说到不能让CPU长时间来处理中断事务,这样会影响系统的响应时间,严重影响用户和系统之间的交互式体验。
软中断通信 进程间通信方式有多种,其中软中断通信是一种常见的方式,它基于信号机制,可以在不同进程之间进行通信。...软中断通信的实现方式是,一个进程向另一个进程发送一个特定的信号,该信号被接收进程捕获,并进行相应的处理。...软中断通信的步骤如下: 1)发送进程通过kill()函数向接收进程发送信号,信号类型可以自行指定。...需要注意的是,软中断通信是一种异步通信方式,即发送进程和接收进程之间并不存在直接的同步机制。...因此,在设计使用软中断通信的系统时,需要充分考虑这种异步机制所带来的影响。 signal() 概述 signal()函数是UNIX/Linux中的一个系统调用,用于注册信号处理程序。
10%,从非idle状态的全部用在了软中断上面。...上半部直接处理硬件请求,也就是我们常说的硬中断,特点是快速执行 而下半部则是由内核触发,也就是我们常说的软中断,特点是延迟执行 实际上,上半部会打断 CPU 正在执行的任务,然后立即执行中断处理程序。...2.2 查看软中断和内核线程 /proc/softirqs 提供了软中断的运行情况; /proc/interrupts 提供了硬中断的运行情况。...第一,要注意软中断的类型,也就是这个界面中第一列的内容。从第一列你可以看到,软中断包括了 10 个类别,分别对应不同的工作类型。...另外,刚刚提到过,软中断实际上是以内核线程的方式运行的,每个 CPU 都对应一个软中断内核线程,这个软中断内核线程就叫做 ksoftirqd/CPU 编号。那要怎么查看这些线程的运行状况呢?
他们分别是硬中断和软中断。既然vmstat把中断的开销单独列出来了,就说明一个问题,中断吃起CPU来那也是丝毫不含糊。...我们没必要啃明白软中断的所有原理,但从一名追求性能的开发者的角度来看,我们有必要了解以下问题: 1、一次软中断的开销到底多大? 2、你的服务器上被软中断吃掉了多少CPU时间?...假如只用一种中断(硬终端)的方式来处理网络IO,由于硬中断的优先级又比较高,这样CPU就会忙于处理大量的网络IO而不能及时响应键盘鼠标等事情,导致操作系统实时性变差,你会感觉机器以卡一卡的。...所以现代的Linux又发明了软件中断,配合硬中断来处理网络IO。硬中断你可以理解只是个收包的,把包收取回来放到“家里”就完事,很快就能完成,这样不耽误CPU响应其它外部高优先级的中断。...软中断消耗的CPU周期相对比硬中断要多不少,所以我们本文来重点关注软中断的开销。 2 软中断的开销估算 前面大致介绍了软中断的来龙去脉,好了直接进入本文的主题上,软中断开销到底多大。
前些天发现XEN虚拟机上的Nginx服务器存在一个问题:软中断过高,而且大部分都集中在同一个CPU,一旦系统繁忙,此CPU就会成为木桶的短板。...在问题服务器上运行「top」命令可以很明显看到「si」存在异样,大部分软中断都集中在 1 号CPU上,其它的CPU完全使不上劲儿: shell> top Cpu0: 11.3%us, 4.7%sy,...75.7%id, ... 0.4%si, 0.8%st Cpu7: 21.1%us, 5.8%sy, 0.0%ni, 71.4%id, ... 1.2%si, 0.4%st 查询一下软中断相关数据...了解了这些基本知识,我们可以尝试换一个CPU试试看会发生什么: echo 7 > /proc/irq/45/smp_affinity_list 再通过「top」命令观察,会发现处理软中断的CPU变成了...最后,推荐看看香草总结的一些关于软中断方面的资料和工具,很全面。
所以,中断处理程序的上部分和下半部可以理解为: 上半部直接处理硬件请求,也就是硬中断,主要是负责耗时短的工作,特点是快速执行; 下半部是由内核触发,也就说软中断,主要是负责上半部未完成的工作,通常都是耗时比较长的事情...,特点是延迟执行; 还有一个区别,硬中断(上半部)是会打断 CPU 正在执行的任务,然后立即执行中断处理程序,而软中断(下半部)是以内核线程的方式执行,并且每一个 CPU 都对应一个软中断内核线程,名字通常为...在 Linux 系统里,我们可以通过查看 /proc/softirqs 的 内容来知晓「软中断」的运行情况,以及 /proc/interrupts 的 内容来知晓「硬中断」的运行情况。...---- 总结 为了避免由于中断处理程序执行时间过长,而影响正常进程的调度,Linux 将中断处理程序分为上半部和下半部: 上半部,对应硬中断,由硬件触发中断,用来快速处理中断; 下半部,对应软中断,...如果在 top 命令发现,CPU 在软中断上的使用率比较高,而且 CPU 使用率最高的进程也是软中断 ksoftirqd 的时候,这种一般可以认为系统的开销被软中断占据了。
它又被划分为4部分,如下表所示: 表4-10 preempt_count各个位域 位 描述 0-7 内核抢占禁止计数(最大值255) 8-15 软中断禁用深度计数(最大值255) 16-27 硬中断计数...可以使用宏in_interrupt()访问硬中断和软中断计数器。如果这两个计数器都是0,则返回值为0;否则返回非0值。...但是,在执行的过程中,可能会有新的软中断发生,这样后面的软中断处理就会延时。为了保证位掩码所有的软中断处理及时,__do_softirq()函数一次处理完所有的软中断。...软中断函数也可以重新激活自身。实际上,网络软中断和tasklet软中断就是这样做的。更重要的是,外部事件,比如网卡上的数据包泛滥也可以频繁地激活软中断。...其实,跟其它软中断的执行过程类似。软中断被激活,do_softirq()就会执行对应的软中断函数。
51系列单片机的中断共有5个,其中外部中断共占两个。外部中断主要通过单片机的引脚P3.3、P3.4接收外部脉冲或高低电平触发CPU中断。与外部中断有关的多功能寄存器为IE、IP、TCON。...P3.2是单片机的外部中断的输入端,当按键按下时,让单片机执行外部中断服务程序,在中断服务中完成对LED的控制。...这里没有设置INT0是下降沿触发中断或是低电平触发中断,原因是按键按下,不管产生不产生键抖现象,总能使INT0引脚产生1个下降沿和低电平。...如果设置只有下降沿才触发INT0中断,需要利用设置计时器控制寄存器TCON的IT0 = 1位,按键按下是否产生中断,可以利用程序检测TCON的IE0位。...1; //开启INT0中断 PX0 = 1; //INT0中断优先,可以省去 EA = 1; //开启总中断开关
总之,与 BKL 一样,软中断反映了几十年前很适用但是现在存在问题的一种设计。 其中一个设计上的决策是,软中断处理程序需要互斥;在任何给定的 CPU 上,只能执行一个软中断处理程序。...因此,如果块设备的软中断处理程序运行时间很长,那么网络和定时器处理程序可能就会被无限期地延迟。即使不同类型的软中断处理程序之间很少出现竞争,情况仍然是如此。...第一步是允许单个软中断向量在不完全禁用软中断处理的情况下被禁用。这个 patch set 的目的是允许定时器函数与其他软中断并发运行,但它们仍然不会跟彼此并发运行。...任何不会与软中断处理程序竞争、或者在需要时得执行自己的软中断禁用代码的定时器函数,都可以在设置其定时器事件时添加 TIMER_SOFTINTERRUPTIBLE flag 来标记。...然而,Weisbecker 期待着“几年后”的一天内核的所有定时器函数都已经过 audit,并可以安全地与软中断处理程序并发运行;在那时,将可以完全从软中断机制中移除定时器处理。
因为node上运行这多个业务的Pod,首先找到导致软中断高的业务Pod, 会导致kernel处理timewait频繁一般就是产生的timewait数量多或者频率高。
线程中断 线程中断即线程运行过程中被其他线程给打断了,它与 stop 最大的区别是:stop 是由系统强制终止线程,而线程中断则是给目标线程发送一个中断信号 如果目标线程没有接收线程中断的信号并结束线程...* 线程中断失败, 因为目标线程收到中断信号并没有做出处理 */ public class T01_ThreadInterrupt_Failed { static int i = 10;...package com.starry.codeview.threads.P05_ThreadInterrupt; /** * 线程中断失败,Sleep遇到线程中断catch到异常会清除掉中断标记,...package com.starry.codeview.threads.P05_ThreadInterrupt; /** * 线程中断失败,Sleep遇到线程中断catch到异常会清除掉中断标记,...但是catch异常块中做出了中断处理动作,所以中断成功!!!
1、中断标识码(中断类型号):由硬件(通常是中断控制器)产生,以标识不同的中断源。...2、中断向量:早期的微机系统中将由硬件产生的中断标识码(中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址)称为中断向量。...在某些计算机中,中断向量的位置存放一条跳转到中断服务程序入口地址的跳转指令。 3、中断向量地址:存储中断向量的存储单元地址。...存放:存放中断服务程序的入口地址,来存放中断向量(共256个),称这一片内存区为中断向量表。...综上所述:中断向量的地址一定是 中断服务程序的入口地址的地址,但中断向量不一定就是中断服务程序的入口地址。
领取专属 10元无门槛券
手把手带您无忧上云