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

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

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

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

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

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

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

关中断的利弊。

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

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

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值