实现临界区的正确访问可以采用硬件方法或是软件方法。硬件方法是解决临界段问题的低级方法,也叫做元方法。软件方法则主要指的是信号量机制。以前一遇到进程的同步或是互斥,首先想到的就是信号量,n个进程共享一个公共的信号量mutex,初值为1,各进程在进入临界区之前对该信号量进行P操作,只有在获得该信号量的情况下才能进入临界区,否则将自己阻塞,等待信号量的释放,原理简单易懂。
硬件方法有两类:一类是屏蔽中断方法,中断会引发多进程的并发执行,尤其对于可剥夺型内核,中断处理过程中若是有优先级更高的进程进入就绪状态,则中断结束后会立即进行进程的调度,剥夺被中断进程的处理机使用权,交给新到达的高优先级进程。中断处理程序和中断结束后获得处理机的高优先级进程都有可能访问临界资源,从而造成数据的不一致,屏蔽了中断也就杜绝了这些现象的发生。中断屏蔽的方法有其局限性,首先它只适用于单处理机的情况,其次,对于uC/OS-II这种对实时性要求较高的内核,关中断时间的长短对于系统服务质量的影响非常大,原则上应该使关中断时间降至最低。第二类方法就是在设计硬件的指令系统时,专门设置类似“Test_and_Set”的指令来对临界资源实行加锁和解锁操作,由于指令是完全由硬件逻辑实现的(指令系统的实现包括硬布线和微程序两种方法,但无论如何都要通过逻辑电路去实现指令的取指、译码、执行等步骤),是不可能被打断的原子操作,因而也就实现了对临界资源的保护。与中断屏蔽方法相比较,这种方法在多处理机情况下也是可行的,但很显然增加了指令系统的设计复杂度,而且在当今广泛使用的RISC(如ARM)中,用户是没有机会去或是没有能力去设计指令系统的,所以也就使得这种方法的使用大