目录
2.信号的保存
2.1信号保存的基本概念
处理信号的动作叫做递达(Delivery),处理信号有三种方式,默认,忽略,自定义。
信号从产生到信号递达之间的状态叫做未决(Pending)。
进程可以选择阻塞(Block)某个信号。
2.2信号在哪里保存的?怎么保存的?
信号是在进程pcb中被保存的,也就是task_struct中。
保存的方式采用的是位图。
struct
{
unsigned long int pending;
unsigned long int block;
};
pending:比特位的位置表示信号的编号,比特位的内容表示是否是未决的。
block:比特位的位置表示信号的编号,比特位的内容表示是否是阻塞。
阻塞和忽略不是一个概念
阻塞是阻止信号递达,忽略是递达之后忽略。
2.3处理信号的三张表
block就是block位图,pending就是pending位图,handler是一个函数指针数组。
当进程收到2信号,首先会将pending位图第二比特位变为1,等到机会合适时处理pending中的信号,处理时会看2号信号的位置在block中是否为1,如果为1就阻塞住,不递达,为0就递达,调用handler中对应的函数。