RTA_OS基础功能讲解 2.6-资源锁和自旋锁
文章目录
一、资源锁简介
访问需要在任务和 ISR 之间共享的硬件或数据可能不可靠、不安全。这是因为当优先级较低的任务或 ISR 正在更新共享数据时,可能会发生任务或 ISR 抢占。这种情况被称为竞争条件,极难测试。
访问共享数据的语句序列称为关键部分。要安全访问关键部分中引用的代码和数据,就需要执行互斥。换句话说,必须确保系统中没有其他任务或第 2 类 ISR 能够在关键部分期间抢占正在执行的任务。
你可以将任务声明为非抢占式任务,这样就可以避免互斥问题。但是,这种方法对于解决一致性问题是不合理的,因为它是通过阻止抢占来防止抢占问题的,就像通过消除汽车来防止车祸一样!
操作系统提供了基于资源的互斥机制。资源只是一个二进制信号。当一个任务或第 2 类 ISR 获得资源时,其他任务或 ISR 都无法获得该资源。这可以防止任何其他任务或 ISR 同时进入同一关键部分。当关键部分结束时,任务或 ISR 释放资源,其他任务/ISR 可以进入关键部分。
当高优先级任务被低优先级任务阻止执行时,这就是所谓的优先级倒置,因为高优先级任务比低优先级任务需要更长的时间才能完成执行。低优先级任务似乎优先于高优先级任务运行,这与实际优先级分配的预期相反。高优先级任务被低优先级任务阻塞。</