Chinaunix首页 | 论坛 | 博客
  • 博客访问: 406535
  • 博文数量: 57
  • 博客积分: 193
  • 博客等级: 入伍新兵
  • 技术积分: 1192
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-13 14:37
个人简介

当以艺术眼光看程序,寻找程序后面的原理,做到化而不忘

文章分类

全部博文(57)

文章存档

2017年(5)

2015年(7)

2014年(27)

2013年(18)

我的朋友

分类: LINUX

2017-06-21 21:27:13

http://blog.csdn.net/tiany524/article/details/17048069  Linux信号处理机制 

下面这段话是从上面网址Copy过来的:
Signal机制实现的比较灵活,用户进程由于中断或者system call陷入内核之后,将断点信息都保存到了堆栈中,在内核返回用户态时,如果存在被触发的signal,那么直接将待执行的signal处理函数push到堆栈中,在CPU切换到用户模式之后,直接pop堆栈就可以执行signal处理函数并且返回到用户进程了。Signal处理函数应用了进程上下文,并且应用实际的中断模拟了进程的软中断过程。

总是听说一句话:信号是模拟软中断,一直不理解,看了上面的话,感觉理解了。中断,是要在栈中保存数据的,是有出栈和入栈操作的。
模块中断,那就要出栈和入栈操作,那就要向系统栈中存储数据,就要返回到用户栈,同时,也要调用用户提供的中断响应函数。

想像一下,正常中断的处理,CPU保存现象,然后调用用户的中断响应函数,然后恢复到正常运行。这个处理过程,也可以这样理解,
在从内核态返回到用户态之前,执行用户代码。和信号的调用时机是一样的。

所以,模拟中断,那就要有栈上的操作,这才名符其实。





阅读(1568) | 评论(0) | 转发(0) |
0

上一篇:不一样的Excel复制粘贴

下一篇:Linux信号

给主人留下些什么吧!~~