社区
VxWorks
帖子详情
为什么说在中断服务程序中不能有i/o操作,不能有获取信号量的操作呢?
armlearnerie
2008-10-23 10:27:04
为什么说在中断服务程序中不能有i/o操作,不能有获取信号量的操作呢?
事实上我做过实验,在中断服务程序中狂打印的话,系统会立即死机或复位。
这个问题一直没怎么想明白,请高手解释一下。谢谢了!
...全文
1146
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管理
如下图所示,假设 ,缓冲区2 开始向工作区传送数据,缓冲区1 开始冲入数据,当工作区充满数据后,缓冲区为空,时间为 M,然后工作区开始处理数据,缓冲区1 继续冲入数据,因此此时只有一个 I/O 设备,所以缓冲区2 虽然为空,但
不能
冲入数据。假设 ,从初始状态开始,当工作区数据处理完后,时间为 C,缓冲区还没充满,当缓冲区充满时,经历了 T 时间,停止再冲入数据,然后缓冲区向工作区传送数据,当工作区满了以后,缓冲区的数据同时也为空。设备控制器是一个可编址的设备,有多个设备地址,每个设备地址对应一个设备。
Java面试篇基础部分-Java
中
常用的I/O模型
在非阻塞的I/O模型
中
,用户线程需要不断的访问内核数据是否就绪,在内核数据没有准备好的时候,用户线程可以进行处理其他的任务
操作
,在内核的数据准备好之后,立即
获取
数据并且进行响应的
操作
。在异步的I/O模型
中
,用户线程不需要关心整个的I/O
操作
是如何进行的,只需要发情一个请求,然后等待内核返回成功还是失败的信号,
说
明I/O
操作
已经完成,直接使用数据就可以了。在内核数据就绪的时候,系统会发送一个对应的
信号量
到用户的线程
中
,用户线程接收到
信号量
之后,会在信号函数
中
调用对应的I/O进行读写,完成实际的I/O
操作
。
Linux 设备驱动
中
的 I/O模型(一)—— 阻塞和非阻塞I/O
在前面学习网络编程时,曾经学过I/O模型
I/O
操作
同步与异步
I/O
操作
是指输入/输出
操作
,是计算机与外部设备(如硬盘、网络、用户输入设备等)之间进行数据交换的过程。I/O
操作
包括多种类型,涵盖了文件
操作
、网络通信、内存
操作
和控制台交互等。同步I/O
操作
是指程序在执行I/O
操作
时必须等待
操作
完成才能继续执行后续的代码。同步I/O
操作
的优点是简单直观,易于理解和实现,但缺点是效率较低,因为程序的执行会因为等待I/O
操作
而被阻塞。异步I/O
操作
是指程序在执行I/O
操作
时,可以不等待
操作
完成,而是继续执行后续的代码。
Vxworks学习(二)_
中
断
、POSIX与Wind比较、I/O系统
Vxworks学习(二)_
中
断
、POSIX与Wind比较、I/O系统一、
中
断
二、POSIX 与 Wind2.1 POSIX和Wind调度方法比较2.2 POSIX和Wind
信号量
比较2.3 POSIX和Wind消息队列比较三、输入/输出系统 声明本学习记录为笔者的学习记录笔记,其
中
大量借鉴了多本已出版书籍与网络资料,并会在文章末尾注明出处,同时笔者无虚拟机镜像。 一、
中
断
中
断
为实时
操作
系统的核心。举个例子,一辆带有实时
操作
系统的自动驾驶的汽车在车头安装了一个距离传感器(现实
中
可能是用其他的传感器)用于检测
VxWorks
2,187
社区成员
2,913
社区内容
发帖
与我相关
我的任务
VxWorks
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
复制链接
扫一扫
分享
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章