[LINUX]信号机制

信号机制:在内核中,除了固有的,硬件提供的中断机制之外,还提供了一种软中断机制,软中断不同于硬件中断,硬件中断具有在任何时候想要中断,就触发cpu中断的能力,而软中断,更像是固定触发的模式,触发中断仅仅是置了一下原因值的标志位而已,真正触发中断的地方,是在一些状态切换的流程固定点上执行真正的软中断处理程序,也是由于这个原因,导致了软中断实际上不如硬件中断那么给力,通常用来处理一些异常,比如系统调用的原因值超过了系统范围,比如空指针访问等,由于用户态没有做好控制而导致程序异常的场景,而处理的方式也比较固定,一般就是结束整个进程,给出一个打印信息,如果是一些关键的出错,还会存储一下内核栈,用来给程序猿定位用的,所以软中断更像是一种内核的异常处理机制。当然,为了灵活性,软中断还提供执行用户自定义函数的功能,可以通过signal函数进行设置,内部可以指定固定的中断处理程序,软中断可能是在内核中触发的,也可以是由另外一个进程使用系统调用kill触发,都是可以的。内核会置软中断的标志位,并在从内核态返回用户态或者即将进入睡眠或者即将从睡眠中醒来的时候,会检查当前进程的u区中是否有未被处理的软中断,如果有,会找到对应的处理函数进行处理。需要注意的是,内核处理软中断的方式,是一种模拟函数调用的方式,最后还是到用户态执行的,通过在用户态调用栈上压入软中断处理函数,和一些调用的参数信息,然后返回用户态,用户态这个时候不是从系统调用返回,而是像是进入一个新的函数执行,执行完毕后再从系统调用中返回出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值