信号 09 | 信号概念

信号的概念

信号在我们的生活随处可见,如:古代战争中摔杯为号;代战争中的信号弹;体育比赛中使用的信号枪,它们都有共性:1. 简单 2. 不能携带大量的信息 3. 满足某个特定条件才发送

信号是信息的载体,Linux/UNIX环境下,古老、经典的通信方式,现在依然是主要的通信手段。

UNIX早期版本就提供了信号机制,但不可靠,信号可能丢失,Bakeley和AT&T都对信号模型做了更改,增加了可靠信号机制。但彼此不兼容。POSIX.1对可靠信号例程进行了标准化。

 

信号的机制

A给B发送了信号,B收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕再继续执行,与硬件中断类似——异步模式,但信号是软件层面上实现的中断,早期常被称“软中断”。

信号的特征:由于信号是通过软件方法是是实现,其实现手段导致信号有很强的延时性。但对于用户来说,这个延迟时间非常短,不易察觉。

注意:每个进程收到的所有信号,都是由于内核负责发送的,内核处理。

 

与信号相关的事件与状态

产生信号:

  • 按键产生:如Ctrl + c、Ctrl + z, Ctrl + \
  • 系统调用产生:如kill、raise、alarm
  • 硬件异常产生:如非法访问内存(段错误)、除0(浮点数除外)、内存对齐错误(总线错误)

递达:递送并且到达进程

未决:产生和递达之间的状态。主要由于阻塞(屏蔽)导致该状态。

信号的处理方式:

  • 执行默认动作:默认操作统通常是终止进程,这取决于被发送的信号
  • 忽略(丢弃):不采取任何操作、有两个信号不能忽略:SIGKILL和SIGSTOP
  • 捕捉(调用用户处理函数):内核中断正在执行的代码,转去执行先前注册过的处理程序

linux内核的进程控制块PCB是一个结构体,task_struct,除了包含进程ID、状态、工作目录、用户ID、组ID、文件描述符、还包含了信号相关的信息,主要指阻塞信号集和未决信号集。

阻塞信号集:将某些信号加入集和,对它们设置屏蔽屏蔽,当屏蔽x信号后,在收到该信号,该信号的处理退后(解除屏蔽后)

未决信号集

  • 信号产生,未决信号集中描述该信号的位立即翻转为1, 表信号处于未决转态。当信号被处理翻转回为0,这一时刻往往非常短暂。
  • 信号的产生后由于默写原因(主要指阻塞)不能抵达,这类信号的集合称之为未决信号集。在屏蔽解除前,信号一直处于未决状态。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值