|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式操作系统基础知识 > 处理器管理 > 同步与互斥(竞争条件、临界区、互斥、信号量、思锁等) > 任务间的同步与互斥 >
|
考试要求:掌握
相关知识点:11个
|
|
|
|
一般来说,一个任务相对于另一个任务的运行速度是不确定的,也就是说,任务是在异步环境下运行的。每个任务都以各自独立的、不可预知的速度向前推进。但是在有些时候,在两个或多个任务中执行的某些代码片断之间,可能存在着某种时序关系或先后关系,因此这些任务必须协同合作、相互配合,使各个任务按一定的速度运行,以共同完成某一项工作,这就是任务间的同步。
|
|
|
要实现任务之间的同步,可以使用信号量机制,通过引入P、V操作来设定两个任务在运行时的先后顺序。例如,可以把信号量视为某个共享资源的当前个数,然后由一个任务负责生成这种资源,而另一个任务则负责消费这种资源,这样,就构成了这两个任务之间的先后顺序。在具体实现上,一般把信号量的初始值设为N,N大于或等于0。然后在一个任务的内部使用V原语,增加资源的个数;而在另一个任务的内部使用P原语,减少资源的个数,从而实现这两个任务之间的同步关系。
|
|
|
例如,假设有两个任务T1和T2。T1做的事情主要是代码片断A,T2做的事情主要是代码片断B。任务T1和T2同时位于系统当中,相互独立地运行。但由于这两个任务之间存在某种同步关系,要求代码A必须先执行,然后代码B才能执行。例如说,A负责采集信号,B负责对这些信号进行处理,显然,只有当A把信号采集进来之后,B才能去处理。由于在多道程序的操作系统当中,各个任务的执行是相互独立的,系统可能先调度任务T1去运行,也可能先调度任务T2去运行,这是由调度算法来决定的。因此无法保证任务T1肯定比任务T2先执行。但是为了实现任务之间的同步,必须保证,无论是任务T1先执行还是任务T2先执行,从最后的结果来看,代码片断A必须先执行,然后代码片断B才能执行。
|
|
|