CSAPP 信号 signal

CSAPP 第八章知识点总结 信号

linux中断机制分析

  1. 信号是一种在软件层面模拟中断的机制,对于中断interrupt,一般是IO设备(计算机内置计时器)发送一个电信号给CPU管脚,CPU进入内核态执行中断处理函数,这个叫硬中断;信号一般由进程发送。
  2. 硬件中断任务(处理程序)是一个快速、异步、简单地对硬件做出迅速响应并在最短时间内完成必要操作的中断处理程序。硬中断处理程序可以抢占内核任务并且执 行时还会屏蔽同级中断或其它中断,因此中断处理必须要快、不能阻塞。这样一来对于一些要求处理过程比较复杂的任务就不合适在中断任务中一次处理。比如,网卡接收数据的过程中,首先网卡发送中断信号告诉CPU来取数据,然后系统从网卡中读取数据存入系统缓冲区中,再下来解析数据然后送入应用层。这些如果都让中断处理程序来处理显然过程太长,造成新来的中断丢失。因此Linux开发人员将这种任务分割为两个部分,一个叫上底,即中断处理程序,短平快地处理与硬 件相关的操作(如从网卡读数据到系统缓存);而把对时间要求相对宽松的任务(如解析数据的工作)放在另一个部分执行,这个部分就是我们这里要讲的下半底。
  3. 软中断一般是指由指令int引起的“伪”中断动作——给CPU制造一个中断的假象;而硬中断则是实实在在由8259的连线触发的中断。因此,严格的 讲,int与IRQ毫无关系,但二者均与中断向量有关系。int引起的中断,CPU是从指令中取得中断向量号;而IRQ引起的中断,CPU必须从数据线上取回中断号,接下来CPU的工作就一样了:保护现场、根据中断号得到中断处理程序地址、执行中断处理、恢复现场继续执行被中断的指令。
  4. 信号是一种进程之间异步通信的方式,换句话说,主进程不会特意去等收到某个信号后才执行接下来的操作,因为它也不知道什么时候能收到信号,所以就需要设置一个信号处理函数,可以通过signal()绑定信号和对应的信号处理函数
  5. 信号的处理机制是这样的,例如,当一个进程A注册了信号S的信号处理函数,内核调度进程B执行,进程B调用kill发送一个信号S给进程A,在这里发送实际上就是内核将进程A的PCB进程控制块中的S信号位设置为1,然后继续执行A。当内核调度到进程A时,在进行上下文切换返回进程A用户态前,检查信号队列,如果有信号,则根据信号向量表找到信号处理函数,设置好“frame”(栈帧)后,跳到用户态执行信号处理函数。信号处理函数执行完毕后,返回内核态,设置“frame”,再返回到用户态继续执行程序。
  6. 信号涉及到进程和并发,因此设计的时候需要遵循若干规则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值