紧接上一篇博客,接着分享一下信号屏蔽的具体内容以及如何实现信号屏蔽。
Linux中常见信号量只有31个,所以进程PCB中表示常见的信号量只用一个字节表示就够了,进程得到了一个信号就是对应的一个bit位由0改变为1。信号被系统发送给一个进程,就是改变PCB中表示信号量的字节中对应的一个bit位。进程收到某一信号,相当于向表示信号量的字节中写入了一个信号量。
关于信号抵达,当信号产生后会向指定进程发送,但被发送的信号不会第一时间被抵达,进程也就不会产生相应的处理动作,所以信号存在信号未决和信号抵达这两种状态;而信号未决处于信号产生和信号抵达之间,所以,在信号抵达之前会存在一种情况叫做信号阻塞,被阻塞的信号是永远都不会在解除阻塞前被抵达的。
Linux为了方便管理用三张表来存储这些信息。
block表 表示被阻塞的信号(1为阻塞)