金牌会员
 
- 积分
- 1185
- 金钱
- 1185
- 注册时间
- 2015-9-18
- 在线时间
- 422 小时
|

楼主 |
发表于 2017-11-1 17:29:22
|
显示全部楼层
这个问题当初困扰我很久,慢慢,我有了一点思路,现在分享下。。。
所谓临界区,归根到底,是任务平面的问题。
1> 先说简单的,裸机编程,则只有2个任务平面(假设只有一个中断,依次类推)。任务平面和中断平面。
* 如果任务平面和中断平面没有共享数据,你“娶”你的,我“娶”我的,皆大欢喜,根本就不需要考虑临界区的问题。
* 如果任务平面和中断平面共享数据,但是中断平面只是读取数据,很简单,就算被中断”插入“,但是中断”硬不起来“,当然没事。也就不用考虑临界区问题。
* 如果任务平面和中断平面共享数据,但是任务平面只是写入数据,同样的道理,不管中断是否”插入“,任务”娶还是不娶“,完全自己决定,丝毫不受外界干扰,也不用考虑临界区问题。
* 其它情况,基本就需要考虑临界区了,具体情况,还需认真分析。
2> OS编程
* 每增加一个优先级,就相当于增加一个任务平面。
* 如果考虑时间轮转调度,就算是相同优先级的2个任务,也属于不同平面。这个也很容易分析,时间一到必须切换,就相当下一个任务优先级更高(尽管实际优先级相同)。
* 所以,不管是裸机还是OS,归根到底是考虑平面上的数据是否会被“打扰”,完全可按照上述思想进行分析。
任何错误或者不足之处,还请指教。
|
|