嵌入式OS入门笔记-以RTX为案例:七.RTX的进程间通讯(一)
上一篇笔记讲了一下RTX的三种调度机制。可以看到RTX配置下是有并发的,也就是有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行的情况。实际上并行是会涉及很多问题的,好比如果只是一个人在干活那么他不需要和别人沟通就能完成这个任务,但如果多人同时在干活(或者是为了同一个目的,或者不是为了同一个目的),如果他们需要共享到一些资源,那就涉及到沟通协调的额外付出了。OS的设计也涉及类似的问题。在进一步讨论一些并发会造成的问题前,我们先介绍一下RTX是如何实现进程与进程间的通讯的。
RTX的进程间通讯主要依赖于四种机制,分别是事件(Event),互斥锁(Mutex),旗语或信号量(Semaphore),和邮箱(Mailbox)。前三种机制侧重进程间的同步,邮箱则侧重进程间的数据通讯。这里先讨论事件和互斥锁,信号量和邮箱请参见下一篇。
我们先考虑如下一个场景,A进程运行到一定时间后,需要等待一个外设的信号(或者别的数据),它可以选择忙绿等待(busy-waiting):
...
while(something_unfinished){}
...
当something_unfinished由真变为假时,A进程才可以跳出这个while循环。此前它一直是在忙等,CPU执行的指令很可能是NOP(一条汇编指令,什么也不做,空转)。所以实际上是浪费CPU资源。这样的做法有些时候是有必要的