LINUX中断机制与信号

linux中断--LINUX中断机制与信号 在学习APUE时学习信号编程,很多地方不是理解,便查阅了网络上的相关资料,最常见的一句话就是“信号是中断机制的一种模拟”,既然提到了中断,那就首先了解了一下中断的具体分类以及实现,最后再找出中断和信号的区别。 LINUX中断机制与信号 中断和异常   l 中 断(也称硬件中断) 定义:中断是由其他硬件设备依照CPU时钟周期信号随机产生的。 分类: 可屏蔽中断 非可 阅读详情

中断和异常

 

l  中 断(也称硬件中断)

定义 :中断是由其他硬件设备依照CPU 时钟周期信号随机产生的。

分类 :可屏蔽中断/非可屏蔽中断

来源: 间隔定时器和I/O

 

l  异 常(也称软件中断)

定义 :当指令执行时由 CPU控制单元 产生的,异常也称为“异步中断”是因为只有在 一条指令终止执行后CPU 才会发出中断。

分类 : 处理器探测到的异常

²  故障

²  陷阱

²  异常终止

编程异常( 也称软中断 )

²  int指令

来源: 程序的错误产生的

内核必须处理的异常( 例如:缺页和内核服务的请求 -int)

异常处理

l  当发生异常时,CPU 控制单元产生一个硬件出错码。

l  CPU根据该中断吗找到中断向量表内的对应向量,根据该向量转到中断处理程序。

l  中断处理程序处理完之后向当前进程发送一个SIG*** 信号。

l  若进程定义了相应的信号处理程序则转移到相应的程序执行,若没有,则执行内核定义的操作。

中断处理

l  设备产生中断

l  PIC(可编程中断控制器)会产生一个对应的中断向量

l  和中断向量表中的每一个中断向量进行比较,转到对应的中断处理程序

l  中断处理程序进行保存现场,做相关处理,恢复现场

l  内核调度,返回用户进程

 

 

硬件中断的上半部和下半部及实现方式

l  硬件中断的分类

²  紧急的 —— 这类中断必须立即执行

²  非紧急的 —— 也必须立即执行

²  非紧急可延迟的 —— 上半部立即执行,下半部延迟执行

 

硬件中断任务(处理程序)是一个快速、异步、简单地对硬件做出迅速响应并在最短时间内完成必要操作的中断处理程序。硬中断处理程序可以抢占内核任务并且执 行时还会屏蔽同级中断或其它中断,因此中断处理必须要快、不能阻塞。这样一来对于一些要求处理过程比较复杂的任务就不合适在中断任务中一次处理。比如,网卡接收数据的过程中, 首先网卡发送中断信号告诉 CPU 来取数据,然后系统从网卡中读取数据存入系统缓冲区中,再下来解析数据然后送入应用层。这些如果都让中断处理程序来处理显然过程太长,造成新来的中断丢失。因此 Linux 开发人员将这种任务分割为两个部分,一个叫上底,即中断处理程序,短平快地处理与硬 件相关的操作(如从网卡读数据到系统缓存);而把对时间要求相对宽松的任务(如解析数据的工作)放在另一个部分执行,这个部分就是我们这里要讲的下半底。 

下半底是一种推后执行任务,它将某些不那么紧迫的任务推迟到系统更方便的时刻运行。因为并不是非常紧急,通常还是比较耗时的, 因此由系统自行安排运行时机,不在中断服务上下文中执行 。内核中实现 下半底的手段经过不断演化,目前已经从最原始的BH(bottom thalf) 演生出 BH 、 任务队列(Task queues ) 、 软中断(Softirq ) 、 Tasklet 、 工作队列(Work queues ) (2.6 内核中新出现的)。

 

 

其中的软中断和异常中提到的软中断的区别:

主要是用来处理非紧急可延迟的硬件中断

Linux系统定定义的,不是用户定义,并且个数有限

 

 

关于软中断和硬中断的其它解析:

软中断一般是指由指令int 引起的 “ 伪 ” 中断动作 —— 给 CPU 制造一个中断的假象;而硬中断则是实实在在由 8259 的连线触发的中断。因此,严格的 讲, int 与 IRQ 毫无关系,但二者均与中断向量有关系。 int 引起的中断, CPU 是从指令中取得中断向量号;而 IRQ 引起的中断, CPU 必须从数据线上取回中断号,接下来 CPU 的工作就一样了:保护现场、根据中断号得到中断处理程序地址、执行中断处理、恢复现场继续执行被中断的指令。

 

在软中断和硬中断之间的区别是什么? 
①硬中断是由外部事件引起的因此具有随机性和突发性;软中断是执行中断指令产生的,无面外部施加中断请求信 号,因此中断的发生不是随机的而是由程序安排好的。 
②硬中断的中断响应周期, CPU 需要发中断回合信号( NMI 不需要),软中断的中断响应周 期, CPU 不需发中断回合信号。 
③硬中断的中断号是由中断控制器提供的( NMI 硬中断中断号系统指定为 02H );软中断的中断号由指令直接给出, 无需使用中断控制器。 
④硬中断是可屏蔽的( NMI 硬中断不可屏蔽),软中断不可屏蔽。

 

LINUX信号机制

l  信号本质

信号是 异步的进程间通讯机制 ,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知 道信号到底什么时候到达。 
信号是进程间通信机制中 唯一的异步通信机制, 可以看作是异步通知,通知接收信号的进程有哪些事情发生了。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给 该进程传递任何数据。

l  产生信号的条件主要有:

1.  用户在终端 按下某些键时,终端驱动程序会发送信号给前台进程,例如Ctrl-C 产生 SIGINT 信 号, Ctrl-/ 产生 SIGQUIT 信号, Ctrl-Z 产生SIGTSTP 信号。

2.  硬件异常产生信号,这些条件由硬件检测到并通知内核,然后内核向当前进程发送适当的信号。例如当前进程执行了 除以0 的指令, CPU 的运算单元会产生异常,内核将这个异常解释为 SIGFPE 信号发送给进 程。再比如当前进程访问了非法内存地址,, MMU 会产生异常,内核将这个异常解释为 SIGSEGV 信 号发送给进程。

3.  一个进程调用kill(2) 函数可以发送信 号给另一个进程。

4.  可以用kill(1) 命令发送信号给某个 进程, kill(1) 命令也是调用 kill(2) 函 数实现的,如果不明确指定信号则发送 SIGTERM 信号,该信号的默认处理动作是终止进程。

5.  当 内核检测到某种软件条件发生时也可以通过信号通知进程,例如闹钟超时产生SIGALRM 信 号,向读端已关闭的管道写数据时产生 SIGPIPE 信号。

l  进程对信号的处理:

1.  忽略此信号。

2.  执行该信号的默认处 理动作。

3.  提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函 数,这种方式称为捕捉(Catch ) 一个信号。

l  信号与中断的相似点: 
(1 )采用了相同的异步通信方式; 
(2 )当检测出有信号或中断请求时,都暂停正在执行的程序而转去执行相应的处理程序; 
(3 )都在处理完毕后返回到原来的断点; 
(4 )对信号或中断都可进行屏蔽。

l  信号与中断的区别: 
(1 )中断有优先级,而信号没有优先级,所有的信号都是平等的; 
(2 )信号处理程序是在用户态下运行的,而中断处理程序是在核心态下运行; 
(3 )中断响应是及时的,而信号响应通常都有较大的时间延迟。

l  信号机制具有以下三方面的功能: 
(1 )发送信号。发送信号的程序用系统调用 kill( ) 实现; 
(2 )预置对信号的处理方式。接收信号的程序用 signal( ) 来实现对处理方式的预置; 
(3 )收受信号的进程按事先的规定完成对相应事件的处理。

l  信号捕获过程

 

 

本图出自ULK

注:从上图可以看出,信号的处理时机是在当前进程由于系统调用、中断或者异常而进 入系统空间以后,从系统空间返回到用户空间前夕(这样做主要是出于效率的考虑,和 进程的调用时机一致, 从系统调用返回意味着要离开内核态而返回到用户态,而状态的 转换要花费一定的时间,因此,在返回到用户态前,系统把在内核态该处理的事全部做 完 )。

  • 下图为异常和函数产生信号的方式以及进程的处理过程 

 


 

Linux系统编程(信号处理机制) 本篇文章我们来讲解信号的处理机制,信号处理在Linux操作系统中必不可少,这一点值得大家注意,信号又会与中断,异常一起讨论,那么下面我们就来看看到底什么是信号吧。本篇文章就讲解到这里,大家看完后可以好好实验一下。 阅读详情

相关推荐

Vivado固化程序与Flash型号添加实战指南

本文详细介绍了Vivado程序固化到Flash芯片的完整流程,包括基础操作、Flash型号添加方法及疑难问题排查。针对Vivado官方支持列表缺失的Flash型号,提供了手动添加配置的详细步骤和参数说明,并分享了高级技巧与安全操作建议,帮助开发者高效完成FPGA程序固化。

weixin_29291573的博客 566

windows和Linux中断机制区别,LINUX中断机制与信号

LINUX中断机制与信号在学习APUE时学习信号编程,很多地方不是理解,便查阅了网络上的相关资料,最常见的一句话就是“信号是中断机制的一种模拟”,既然提到了中断,那就首先了解了一下中断的具体分类以及实现,最后再找出中断和信号的区别。LINUX中断机制与信号中断和异常l中断(也称硬件中断)定义:中断是由其他硬件设备依照CPU时钟周期信号随机产生的。分类:可屏蔽中断非可屏蔽中断来源:间隔定时器和I/O...

weixin_42494902的博客 528

【DDSCAT——离散偶极近似仿真程序04】参数理解和模型设计

在这一部分,我们开始理解DDSCAT程序设计中的一些参数问题。 承接第二部分内容中的ddscat.par文件,我们来聊一聊偶极子、实际体积、有效半径等关键词。 一、偶极子点阵 手册中说,我们需要设计模型(target/目标),它是有偶极子点阵组成的。偶极子,顾名思义,是由一对电荷组成的,但我们不用设计一对,我们设计一个点就行,...

XD_Yangf的博客 7552

Linux编程复习(3)——信号与中断

信号是响应某些状况而产生的事件,进程在接收到信号时会采取相应的行动。某些状况就是指某些条件错误,如内存段冲突、浮点处理器错误或者非法指令等。信号是在软件层次上对中断的一种模拟,所以信号也称为是软中断 信号与中断的相似点: 1,都采用相同的额异步通信方式 2,当检测出有信号或中断请求时,都暂停证在执行的程序而转去执行相应的处理程序 3,都在处理完毕之后返回到原来的断点 4,对信号或中断都可进行屏蔽 信号与中断的区别: 1,中断有优先级,而信号没有,所有的信号都是平等的 2,信号处理程序是在用户态下运行的,而中

qq_37299596的博客 686

SpringBoot 系列教程(十二):给大家推荐20个SpringBoot开源项目,私活必备

基于 SpringBoot2.x + Shiro 实现了用户管理、个人微信、支付宝支付,内置扫码支付、后台回调、订单查询、限流等一系列功能

Thinkingcao的专栏 2839

编织数据的实时脉络——构建基于MySQL的数据编织平台,实现实时数据治理

除了上述基本设置外,我们还可以根据实际应用场景自定义一些特定的监控项目。例如,对于某些高并发读写的表,可能需要特别关注它们的锁等待时间和回滚段使用率;而对于涉及到跨库关联查询的操作,则应当着重检查网络延迟及缓存命中率等因素。-- 获取InnoDB行级锁等待情况-- 统计各表的缓存命中率这段SQL脚本不仅展示了如何查询InnoDB引擎下的锁争用状况,还介绍了计算表级别缓存命中率的方法,有助于深入理解系统的运行状态。

墨夶的博客 1789

Linux信号基础(1)——软件也能实现中断?

参数 sa_mask 定义了一组信号,当进程在执行由 sa_handler 所定义的信号处理函数之前,会先将这组信号添加到进程的信号掩码字段中,当进程执行完处理函数之后再恢复信号掩码,将这组信号从信号掩码字段中删除。并且每一个信号都有其对应的名字(其实就是一个宏), 信号名字与信号编号乃是一一对应关系,但是由于每个信号的实际编号随着系统的不同可能会不一样,所以在程序当中一般都使用信号的符号名(也就是宏定义)。大多数情况下,是无法预测信号达到的准确时间,所以,信号提供了一种处理异步事件的方法。

cj_lsk的博客 367

安卓手机强制清理数据恢复出厂设置后无法设置密码怎么办?(分享亲身经历的有效解决方案)

📱安卓手机强制清数据恢复出厂设置后,竟无法设置锁屏密码!本文将解析问题根源,分享亲测有效的解决方案,帮你快速摆脱困扰🎉

XiaoqiangClub的博客 243

Linux进程信号——中断机制下信号处理

这篇文章深入探讨了Linux系统信号处理机制和操作系统运行本质。主要内容包括: 信号处理流程 信号递达的三种方式:默认动作、自定义动作和忽略 信号处理时机:在从内核态返回用户态时进行检查和处理 信号捕捉过程涉及4次身份切换(用户态⇄内核态) 操作系统运行本质 基于中断机制工作,本质是一个死循环 通过时钟中断实现进程调度 硬件中断处理流程:外设→中断控制器→CPU→操作系统 中断向量表(IDT)将中断号映射到处理方法 关键机制 进程时间片调度原理 用户态/内核态切换的实现方式 硬件中断与信号处理的关系 文章通

2301_79705195的博客 1137

高通平台蓝牙学习-- 基于WCN6750 Bluetooth 5.2的讲解

摘要:蓝牙5.2解决方案WCN6750具备多项先进特性:完全兼容5.2标准及ANT+协议,支持2Mbps高速BLE和长距离传输;采用射频集成方案,与WLAN共享天线并支持5G并发;内置功率放大器,支持Class1/2传输;提供双音频流和Slimbus接口优化。其HCI UART接口支持3.2Mbps速率,通过BlueZ协议栈实现蓝牙5.2功能,包括2Mbps模式和长距离传输,符合核心规范要求。(149字)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 3万+

PostgreSQL的学习心得和知识总结(一百二十六)|深入理解PostgreSQL数据库SQL执行时间计算 \timing 和 log_duration的使用和原理

1、参考书籍:《PostgreSQL数据库内核分析》2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》3、

孤傲小二~阿沐的博客 985

LINUX中断机制与信号(http://linux.chinaitlab.com/soft/878170.html)

LINUX中断机制与信号 中断和异常     中 断(也称硬件中断)     定义 :中断是由其他硬件设备依照CPU 时钟周期信号随机产生的。     分类 : 可屏蔽中断     非可屏蔽中断     来源: 间隔定时器和I/O     异 常(也称软件中断)     定义 :当指令执行时由 CPU控制单元 产生的,异常也称为“异步中断”是因为只有在 一条指令终止执行后CPU 才会

liu09110003420的专栏 1157

【51单片机仿真】基于51单片机设计的多功能电子时钟日历(实时时钟闹钟秒表温度检测)系统__资料编号5

该项目是基于单片机的多功能电子时钟系统,集成了时间显示、闹钟设置、秒表功能以及温度显示等功能。主要硬件包括1602液晶显示屏、DS1302时钟芯片、DS18B20温度传感器和蜂鸣器。系统通过按键进行时间和闹钟的设置,并实时显示当前时间和温度。

嵌入式阿齐Archie 2万+

Linux信号补充:捕捉流程与中断机制揭秘

文章摘要: 本文深入解析Linux信号捕捉机制,揭示信号处理发生在内核态返回用户态前夕的关键细节。通过分析硬件中断(如时钟中断)、异常和系统调用如何触发内核态切换,阐明信号检查与处理的完整流程。重点探讨了时钟中断如何确保信号及时响应,即使程序处于死循环也能被Ctrl+C终止。文章还对比了硬件中断与软中断(如系统调用)的差异,最终串联起信号处理的全链路逻辑,帮助读者理解Linux信号机制的底层原理与实现方式。

2501_91839423的博客 859

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LINUX中断机制与信号(http://blog.youkuaiyun.com/lichaoandy/article/details/5543713)

在学习APUE时学习信号编程,很多地方不是理解,便查阅了网络上的相关资料,最常见的一句话就是“信号是中断机制的一种模拟”,既然提到了中断,那就首先了解了一下中断的具体分类以及实现,最后再找出中断和信号的区别。 LINUX中断机制与信号 中断和异常   l  中 断(也称硬件中断) 定义 :中断是由其他硬件设备依照CPU 时钟周期信号随机产生的。 分类 : 可屏蔽

liu09110003420的专栏 816

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Linux系统(信号篇):信号的产生

在 Linux 系统中,信号(Signal)是一种软件中断机制,用于在进程间传递异步事件通知。它类似于硬件中断,但由软件层面实现,可用于通知进程某个事件已经发生,进程可根据预设规则响应或忽略这些信号。在操作系统中,信号的软件条件指的是由软件内部状态或特定软件操作触发的信号产生机制。这些条 件包括但不限于定时器超时(如alarm函数设定的时间到达)、软件异常(如向已关闭的管道写数据 产生的SIGPIPE信号)等。当这些软件条件满足时,操作系统会向相关进程发送相应的信号,以通知进程进行相应的处理。

yue_2899799318的博客 1353

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

CSAPP 信号 signal

linux下信号机制

good_jiojio的博客 357

Linux进程信号

/执行的程序叫做前台进程,它就是目标进程且必须只有一个,键盘等设备只有一个要确定是给确定的进程,前台进程的本质就是要从键盘获取数据的。./ &执行的叫做后台进程,它无法从标准输入种获取内容,但可以向标准输出打印。在一个父子进程中,父进程先退了,子进程就变成了孤儿进程会被操作系统回收在后台。jobs可以查看所有的后台任务,fg 任务号,把这个进程提为前台进程。ctrl+z:把进程切换到后台,bg 任务号,让后台进程恢复运行。

qq_75271671的博客 1209
上一篇: Linux中断机制
下一篇: struct sk_buff详解
小飞鱼hubble
博客等级 码龄15年 14粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值