全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux
这一次开始看信号的设计模块文件,signal.c。这个模块的设计,用到了很多POSIX的接口设计。而信号的一些数据结构的定义,其实是在POSIX相关的库文件里面提供的。
关于信号的一些设计,主要是在11行包含的这个头文件里面进行的声明或者定义。
接下来,先看两个最简单的函数,作为这个模块学习的一个开篇。
逐个函数来分析,这个函数是获取信号的掩码的接口。如果理解为面向对象的设计概念,这个其实就是获取了一个对象的属性。值得一说的是,按照前面的学习,其实这个current是当前任务的意思。接下来可以看看这个定义:
首先明确了是一个任务的指针,接着是初始化的时候是指向了初始任务。其实在软件运行的过程中,这个也就不断地改变,一直更新指向当前的任务。从新看了一下代码,这个量的状态应该是在汇编代码中被修改掉的。这里面,没有看到直接赋值,采用的方式应该是正好知道了这个任务指针的位置,同时处理相应的任务列表。
这是设置掩码的操作,这里有一个特殊的地方是KILL以及STOP的设置其实是不处理的。似乎也有这么一个概念,这两个信号应该是属于不可屏蔽信号。
内容不是很多,附件看一个其他的函数:
首先看看这个区域验证的函数:
暂时还是没有看懂,但是至少知道了这个函数的设计意图。验证这个地址是否提供了size字节大小的数据。
再回来看看这个函数,从接口调用大概可以猜测到函数的设计意图了。应该也是先到一个暂存的状态缓冲里面,等待接下来的处理。