通过关中断的方式来实现原语的分析
2011-12-19 09:40
225 查看
原语是指几个(2个及以上)连续执行,同时不能被打断的操作。
打断这些连续的操作,有两种可能。一种是主动的,一种是被动的。
主动的打断是指程序主动进入睡眠,而出现的操作中断。
被动是指在操作期间发生外部中断,CPU转去响应中断,而在中断处理过程中,有可能使高优先级的进程进入运行态,如果是抢占式内核,就会导致任务切换,也就形成了操作中断。例如在执行过程中,硬盘操作完成,发出中断,硬盘的中断处理程序就会唤醒等待硬盘数据的进程,如果等待硬盘数据的进程优先级高,那就会引起调度而导致操作中断。
因此要实现原语,首先在程序设计上就要注意,避免在操作过程调用含有进程切换的程序。其次就是要处理被动打断的可能,最简单的办法就是关中断。关闭中断有两种方式,一种是关闭CPU自身响应中断的机制,二是关闭中断来源,通常是关闭中断控制器。
关闭CPU自身的中断机制比较简单,通常只需要一条指令,但是这种方式在多CPU的情况下,并不能正确的工作。关闭中断源的方式则可以保证多CPU下的情况,能够正常工作,但是编程可能会较为繁琐。如果明确目标机器是单CPU的,可以采用关闭CPU自身的中断响应机制。
关中断的利弊。
利:实现简单。特别是对于单CPU,一条指令即可完成所需的功能。
弊:存在丢失中断的可能性。可能是由于关中断时间过长,而其间出现了出现了中断,而后又中断又消失了,或者在关中断期间,同类型的中断发生了多次而未能处理。因此关中断的时间要非常短。特别是在某些应用场合,是不能允许出现中断丢失的,可以想象武器火控系统出现了这样的情况,会是个什么结果。
打断这些连续的操作,有两种可能。一种是主动的,一种是被动的。
主动的打断是指程序主动进入睡眠,而出现的操作中断。
被动是指在操作期间发生外部中断,CPU转去响应中断,而在中断处理过程中,有可能使高优先级的进程进入运行态,如果是抢占式内核,就会导致任务切换,也就形成了操作中断。例如在执行过程中,硬盘操作完成,发出中断,硬盘的中断处理程序就会唤醒等待硬盘数据的进程,如果等待硬盘数据的进程优先级高,那就会引起调度而导致操作中断。
因此要实现原语,首先在程序设计上就要注意,避免在操作过程调用含有进程切换的程序。其次就是要处理被动打断的可能,最简单的办法就是关中断。关闭中断有两种方式,一种是关闭CPU自身响应中断的机制,二是关闭中断来源,通常是关闭中断控制器。
关闭CPU自身的中断机制比较简单,通常只需要一条指令,但是这种方式在多CPU的情况下,并不能正确的工作。关闭中断源的方式则可以保证多CPU下的情况,能够正常工作,但是编程可能会较为繁琐。如果明确目标机器是单CPU的,可以采用关闭CPU自身的中断响应机制。
关中断的利弊。
利:实现简单。特别是对于单CPU,一条指令即可完成所需的功能。
弊:存在丢失中断的可能性。可能是由于关中断时间过长,而其间出现了出现了中断,而后又中断又消失了,或者在关中断期间,同类型的中断发生了多次而未能处理。因此关中断的时间要非常短。特别是在某些应用场合,是不能允许出现中断丢失的,可以想象武器火控系统出现了这样的情况,会是个什么结果。
相关文章推荐
- 俩个PC机通过串行口互联,实现件的无差错传输。程序必须用中断方式来完成任务
- STM32通过中断方式实现USART1通信
- 详细解释如何通过Android自带的方式来实现图片的裁剪——原理分析+解决方案
- 通过抓包分析短网址技术的实现方式
- 通过反编译的方式分析阿里手淘小蜜的实现方式
- Domino9下通过代理实现WEB方式重置Internet密码
- MFC三种不同方式实现图形的保存和重绘---方法一:通过集合类CPtrArray保存点的坐标
- 通过AOP方式实现Service计算结果的缓存
- C#实现向多线程传参的三种方式实例分析
- SQL学习笔记[5] - 通过分隔符解析方式实现向SQL存储过程传递数组参数
- 通过COM组件方式实现java调用C#写的DLL文件 转
- Java实现队列二:通过数组方式实现
- Java通过zxing方式实现二维码的生成与解析
- RTTI、虚函数和虚基类的实现方式、开销分析及使用指导
- window.open方法打开网页没有带refer参数无法通过权限验证可通过这种方式实现open的效果
- c# 数学表达式分析(采用逆波兰方式实现)
- 通过序列化的方式实现深clone
- 通过命令的方式实现计算机定时关机
- ARM架构kprobe应用及实现分析(10 trap中断注册及回调)
- Andriod实现Filterable接口通过输入文本框实现过滤效果 分析