通过关中断的方式来实现原语的分析

来源:互联网 发布:淘宝质保金被骗了 编辑:程序博客网 时间:2024/06/06 18:22

原语是指几个(2个及以上)连续执行,同时不能被打断的操作。

打断这些连续的操作,有两种可能。一种是主动的,一种是被动的。

主动的打断是指程序主动进入睡眠,而出现的操作中断。

被动是指在操作期间发生外部中断,CPU转去响应中断,而在中断处理过程中,有可能使高优先级的进程进入运行态,如果是抢占式内核,就会导致任务切换,也就形成了操作中断。例如在执行过程中,硬盘操作完成,发出中断,硬盘的中断处理程序就会唤醒等待硬盘数据的进程,如果等待硬盘数据的进程优先级高,那就会引起调度而导致操作中断。

因此要实现原语,首先在程序设计上就要注意,避免在操作过程调用含有进程切换的程序。其次就是要处理被动打断的可能,最简单的办法就是关中断。关闭中断有两种方式,一种是关闭CPU自身响应中断的机制,二是关闭中断来源,通常是关闭中断控制器。

关闭CPU自身的中断机制比较简单,通常只需要一条指令,但是这种方式在多CPU的情况下,并不能正确的工作。关闭中断源的方式则可以保证多CPU下的情况,能够正常工作,但是编程可能会较为繁琐。如果明确目标机器是单CPU的,可以采用关闭CPU自身的中断响应机制。

关中断的利弊。

利:实现简单。特别是对于单CPU,一条指令即可完成所需的功能。

弊:存在丢失中断的可能性。可能是由于关中断时间过长,而其间出现了出现了中断,而后又中断又消失了,或者在关中断期间,同类型的中断发生了多次而未能处理。因此关中断的时间要非常短。特别是在某些应用场合,是不能允许出现中断丢失的,可以想象武器火控系统出现了这样的情况,会是个什么结果。

 

原创粉丝点击