免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: ronaldoa
打印 上一主题 下一主题

[函数] 问一个关于中断中的函数的问题。谢谢。 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-05-24 17:54 |只看该作者
中断是硬件层的东西:CPU有中断引脚。当这个引脚上出现有效电平的时候,就会触发中断请求(IRQ)。
这时候CPU会自动保存一些寄存器状态然后自动跳转到一个叫中断向量表的地方(其实就是一个固定的内存地址),根据不同的IRQ,里面放置了一些对应的函数的入口地址。这些函数就是中断函数,或者中断服务例程(ISR)
信号是软件层的问题。

中断函数的运行环境是很特别,既不在用户态,也不是内核态。它使用被中断函数的栈来分配自己的局部变量。

中断处理函数只能被具有更高优先级的IRQ号对应的中断处理函数打断。比如IRQ5的优先级高于IRQ7,当IRQ7对应的中断函数正在运行的时候,并且允许CPU相应别的中断的情况下,出现了IQR5,或者同样的IRQ7中断又来了,这时候IRQ7的中断函数就会被新的中断函数打断。这叫中断嵌套。

个别情况不允许中断嵌套,就需要在中断响应期间,关闭CPU对所有中断或者个别中断(一般是同样的IRQ号)的响应。这时如果你调用了可以阻塞或者睡眠的函数,系统就要挂了。

所以中断函数才有这么多限制。

printf是会被阻塞的,malloc也会。

论坛徽章:
0
12 [报告]
发表于 2010-05-24 22:31 |只看该作者
中断是硬件层的东西:CPU有中断引脚。当这个引脚上出现有效电平的时候,就会触发中断请求(IRQ)。
这时候CP ...
star1983653 发表于 2010-05-24 17:54

多谢解释,获益良多!

论坛徽章:
0
13 [报告]
发表于 2010-05-24 22:41 |只看该作者
中断越快越好,确实比较复杂

论坛徽章:
0
14 [报告]
发表于 2010-05-25 09:42 |只看该作者
既然说中断是在特殊空间运行的(既不是用户空间,也不是内核空间),那里面怎么涉及到printf,malloc这样的函数呢?这不是标准库的函数吗?标准库的函数应该是在用户态被调用,然后随着系统调用进入内核态啊

论坛徽章:
0
15 [报告]
发表于 2010-05-25 12:51 |只看该作者
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP