http://blog.csdn.net/tiany524/article/details/17048069 Linux信号处理机制
下面这段话是从上面网址Copy过来的:
Signal机制实现的比较灵活,用户进程由于中断或者system call陷入内核之后,将断点信息都保存到了堆栈中,在内核返回用户态时,如果存在被触发的signal,那么直接将待执行的signal处理函数push到堆栈中,在CPU切换到用户模式之后,直接pop堆栈就可以执行signal处理函数并且返回到用户进程了。Signal处理函数应用了进程上下文,并且应用实际的中断模拟了进程的软中断过程。
总是听说一句话:信号是模拟软中断,一直不理解,看了上面的话,感觉理解了。中断,是要在栈中保存数据的,是有出栈和入栈操作的。
模块中断,那就要出栈和入栈操作,那就要向系统栈中存储数据,就要返回到用户栈,同时,也要调用用户提供的中断响应函数。
想像一下,正常中断的处理,CPU保存现象,然后调用用户的中断响应函数,然后恢复到正常运行。这个处理过程,也可以这样理解,
在从内核态返回到用户态之前,执行用户代码。和信号的调用时机是一样的。
所以,模拟中断,那就要有栈上的操作,这才名符其实。
http://wangyuxxx.iteye.com/blog/1703252 深入理解Linux内核--信号(阅读笔记)(原创)
这个讲得还比较深入
阅读(1890) | 评论(0) | 转发(0) |