一个任务在某些时候可能会访问共享内存或者共享文件,或其他共享资源,这些对共享内存进行访问的程序片断称作临界区(critical section)。
为了防止不同的任务同时处于临界区,必须使用一定互斥的方法来避免这种情况的发生。而对于操作系统内核来说,关中断无疑是最好的办法。和其他内核一样,μC/OS-Ⅱ为了处理临界区代码时需要关中断,处理完毕后再开中断。关中断的时间是实时内核开发商应提供的最重要的指标之一,因为这个指标影响用户系统的实时事件的相应。但就使用μC/OS-Ⅱ而言,关中断的时间很大程度上取决于处理器的架构以及编译器生成的代码质量。
微处理器一般都有开关中断的指令,用户使用的C语言编译器必须有某种机制能够在C中直接实现开关中断操作。某些C编译器允许在用户的C源代码中插入汇编语言的语句,这使插入处理器指令来开关中断很容易实现。而有的编译器把从C语言中开关中断放在语言的扩展部分。
μC/OS-Ⅱ定义两个宏(macro)来开关中断,以便避开不同C编译器厂商选择不同的方法来处理开关中断。μC/OS-Ⅱ中的这两个宏调用分别是:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。因为这两个宏的定义取决于所用的微处理器,故定义在OS_CPU.H中。