社区
VxWorks
帖子详情
为什么说在中断服务程序中不能有i/o操作,不能有获取信号量的操作呢?
armlearnerie
2008-10-23 10:27:04
为什么说在中断服务程序中不能有i/o操作,不能有获取信号量的操作呢?
事实上我做过实验,在中断服务程序中狂打印的话,系统会立即死机或复位。
这个问题一直没怎么想明白,请高手解释一下。谢谢了!
...全文
1148
9
打赏
收藏
为什么说在中断服务程序中不能有i/o操作,不能有获取信号量的操作呢?
为什么说在中断服务程序中不能有i/o操作,不能有获取信号量的操作呢? 事实上我做过实验,在中断服务程序中狂打印的话,系统会立即死机或复位。 这个问题一直没怎么想明白,请高手解释一下。谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
洒家一笑
2008-11-08
打赏
举报
回复
我觉得:中断的优先级很高,如果在那里等信号量的话,别的 Task 可能会被阻塞没有机会释放信号量造成死锁。
很有说服力。
这个问题真是好啊。
希望大虾们多多发表意见
armlearnerie
2008-10-30
打赏
举报
回复
谢谢,也请其他几位大侠抽空帮小弟回答一下。多谢!
topcool99
2008-10-27
打赏
举报
回复
3.topcool99大虾,能不能说一下vxworks中的中断服务程序要在多少时间内完成才不会导致死机或复位呢?
不调用可能阻塞的函数,时间没有绝对限制,但一般要求越短越好。
armlearnerie
2008-10-25
打赏
举报
回复
谢谢各位的回答,我感觉自己对这个问题的理解越来越清晰了。
在各位的回答中有几点还想麻烦大家帮我明确一下,多谢!
1.Hshi大虾说的“如果支持中断线程化,那么将导致中断响应时间不确定,实时性难以得到保证。”应该怎么理解?为什么线程化会导致中断响应时间不确定?
2.sterrys大虾说的“中断的优先级很高,如果在那里等信号量的话,别的 Task 可能会被阻塞没有机会释放信号量造成死锁。”,中断服务程序正在运行,那么别的task就不会被执行,又怎么会造成死锁呢?
3.topcool99大虾,能不能说一下vxworks中的中断服务程序要在多少时间内完成才不会导致死机或复位呢?
谢谢大家!!
Hshj
2008-10-24
打赏
举报
回复
引用斑竹ningxin的话:
在某些操作系统中,是可以在一些特定的低优先级ISR里面进行pend操作的。这要求操作系统的中断,有线程上下文(线程(任务)上下文是任务调度的基础,注意任务上下文不等同于中断上下文)。称为“中断线程化”。
Vxworks的任务调度是依赖于中断的,同时,为了实时性考虑,Vxworks不支持中断线程化,ISR是没有任务(线程)上下文的。如果支持中断线程化,那么将导致中断响应时间不确定,实时性难以得到保证。
如果在vxworks里面,使用了可能blocking的代码,那么有2种情况:
一种是关中断运行。那么,在blocking的地方,将永远等待。因为这时候任务调度依赖的时钟中断都不能响应,也就是说任务调度器都不能运行了,系统就死在中断里了。
另一种是开中断进行。那么,在blocking的地方,任务调度器仍然可能运行。此时,任务调度器会企图把ISR的TCB属性改为pend。但是ISR没有TCB,必然也出错。
在Vxworks里,通常是这样处理的:在ISR里,除了对中断寄存器进行必要的操作之外,尽量简单的就是只释放一个信号量,通知一个高优先级的任务来完成可能引起blocking的工作。这类似于Linux的上下半部的处理方法。
在中断嵌套的情况下,中断上下文没有任务上下文那么复杂。只是保存了PC指针,和一些相应的寄存器的状态就够了。中断有的使用硬件堆栈,有的使用软件堆栈。
楼主的情况应该属于第2种
sterrys
2008-10-24
打赏
举报
回复
中断的优先级很高,如果在那里等信号量的话,别的 Task 可能会被阻塞没有机会释放信号量造成死锁。
topcool99
2008-10-24
打赏
举报
回复
i/o操作和获取信号量都属于可能被阻塞(pend)的操作。
这在中断程序中是明确禁止使用到。
对于中断函数中调用可能阻塞的函数,轻则引起系统任务调度打乱,失去实时性,重则系统崩溃或复位。
vxworks属于硬实时操作系统,不能在规定的时间内完成操作即会死机或复位。
ahong008
2008-10-23
打赏
举报
回复
为了保证实时性以及下一个中断,中断执行的操作越少越好
yangb2014#
2008-10-23
打赏
举报
回复
跟堆栈有关,中断中做尽量少的事情。。。
详解
操作
系统的I/O管理
本文详细介绍了
操作
系统的I/O管理,包括I/O设备、设备控制器、I/O控制方式、I/O软件层次结构、缓冲区管理、设备分配等内容。阐述了各部分的功能、特点及实现方式,如I/O控制方式有程序直接控制、
中
断
驱动、DMA等,还介绍了假脱机技术以缓和设备与CPU速度矛盾。
Java面试篇基础部分-Java
中
常用的I/O模型
本文介绍了Java
中
常用的I/O模型,包括阻塞I/O模型,客户端读写时会阻塞等待;非阻塞I/O模型,用户线程发起
操作
后无需阻塞;多路复用I/O模型,通过选择器轮询,在连接数多、消息体量不大时优势明显;
信号量
驱动I/O模型,内核就绪发信号;异步I/O模型,用户线程不关心
操作
过程。
Linux 设备驱动
中
的 I/O模型(一)—— 阻塞和非阻塞I/O
本文介绍了Linux设备驱动
中
的I/O模型,重点讨论了阻塞和非阻塞I/O。阻塞I/O通过等待队列实现,非阻塞I/O涉及轮询和多路复用,如select和poll。文章详细阐述了等待队列的工作原理,以及如何在驱动程序
中
使用wait_event等函数进行等待和唤醒
操作
。同时,还解释了非阻塞I/O
中
的轮询机制及其在设备驱动
中
的实现。
I/O
操作
同步与异步
本文介绍了I/O
操作
,包括文件、网络、内存、控制台和数据库等类型。阐述了同步I/O
操作
会阻塞程序执行,简单但效率低;异步I/O
操作
不阻塞,可提高效率,还介绍了多种实现方法。最后通过C#示例展示了不同I/O
操作
的同步和异步实现方式及差异。
Vxworks学习(二)_
中
断
、POSIX与Wind比较、I/O系统
本文详细介绍了VxWorks
操作
系统的
中
断
处理机制,包括
中
断
处理程序的特点和限制。接着对比了POSIX和VxWorks在调度、
信号量
和消息队列方面的差异。最后探讨了VxWorks的输入/输出系统,包括基本I/O接口、缓冲I/O和异步I/O
操作
。
VxWorks
2,187
社区成员
2,913
社区内容
发帖
与我相关
我的任务
VxWorks
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
复制链接
扫一扫
分享
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章