linux下的信号机制

信号机制的详细讲解  信号机制的生动讲解 


       信号的本质是在软件层次上对中断的模拟,所以又称软中断。一个进程收到一个信号就像处理器收到中断请求一样。

       信号的作用,使进程可对外界做出(非实时)反应,也可向外界发送自己的一些信息。这样可以通过信号实现进程间的异步通信机制。      

 

       信号的实现原理

       从CPU是否 正在执行用户进程的命令的角度,可将用户进程状态分为2个:

用户态:CPU正在执行用户进程命令

内核态:CPU不在执行用户进程命令

       进程对信号的处理发生在进程从内核态进入用户态之前。

 

       用户进程进入内核态(休息中)仅有3种情况:

系统调用:CPU转去执行内核中的命令,由用户进程引起,如printf (先调用库,库调用底层内核函数)等

CPU处理中断:CPU转去执行中断处理,由中断引起

进程调度:单核CPU在进程间高速切换实现宏观上的多任务并发执行,微观上还是依次执行

 

       在内核里的进程档案(task_struct)里面存储了进程的一套信息,其中就有存储进程未处理信号的地方。

       1)在早期,信号机制简单,对那32个信号有确定含义,有默认处理,对同类信号,档案只记录一个(后续的已记录信号会丢失),称之为非实时信号,不可靠信号

       2)后来,对信号种类进行了扩充,这些信号即使同类也都排队记录下来,称之为实时信号,可靠信号。

       处理信号时,可以:

由内核执行默认操作:忽略信号,阻塞信号,停止进程等

执行进程设定的信号响应函数:执行完后进程回到内核态继续处理未处理信号

      

       综上,信号来了,根据信号种类将其登记在内核里,当进程从内核态进入用户态之前,先将未处理信号执行完,接着去执行进程命令。

       由于进程间的不停高速切换,进程也不停在内核态和用户态之间不停转换,进程对信号的响应在宏观上就像是立即响应一样,实则不然。


这也是笔记类文章,我也是边学边总结,不免有浅漏的地方。我致力于将发生的事情用尽量简单的语言描绘下来,并没涉及到具体的信号处理函数,连接里面有详细讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值