2011年计算机软件水平考试嵌入式系统设计师辅导笔记(18)

来源:软件水平考试    发布时间:2012-11-04    软件水平考试视频    评论

  (10)任务互斥

  A、任务之间的关系:相互独立、任务互斥、任务同步、任务通信。

  B、任务间的互斥:当前已经有一个任务正在访问临界区共享数据,那么其他任务暂时不能访问。

  C、提出互斥访问的四个条件:

  a、在任何时候最多只能有一个任务位于它的临界区中。

  b、不能事先假定CPU 的个数和系统的运行速度。

  c、没有任务位于它的临界区中,它不妨碍其他任务去访问临界区资源。

  d、任何一个任务进入临界区的请求必须在有限的时间内得到满足,不能无限期。

  D、任务互斥的解决方案:

  a、关闭中断法

  b、繁忙等待法

  c、信号量处理

  (11)信号量

  信号量记录当前可用资源的数量。

  信号量由操作系统维护,任务不能直接去修改它的值,只能通过初始化和两个标准原语(PV 原语)来对它进行访问。

  注:关于原语。

  原语通常由若干条语句组成,用来实现某个特点的操作,并通过一段不可分割或不可中断的程序来实现其功能。原语时操作系统内核的一个组成部分,必须在内核态下执行。原语的不可中断性是通过在其执行过程中关闭中断来实现的。关键要理解PV 原语的实现:

  P(semaphores S)

  {

  --S.count; //申请一个资源

  if(S.count < 0) //没有空闲资源

  {

  将当前任务阻塞起来,加到阻塞队列末尾,调度新的任务运行。

  }

  }

  V(semaphores S)

  {

  ++S.count; //释放一个资源

  if(S.count <= 0) //有任务被阻塞

  {

  从阻塞队列中取出一个任务,把该任务改为就绪状态,插入就绪队列。

  }

  }

  利用操作系统提供的信号量机制,可以方便、有效地实现对临界资源的互斥访问,优

  点有两个:

  A、可以设置信号量的计数值,从而允许多个任务同时进入临界区。

  B、当一个任务暂时无法进入临界区时,它会被阻塞起来,将CPU 让给其他任务。

  (12)任务同步

  任务之间的同步可以使用信号量机制,通过引入PV 操作来设定两个任务在运行时的先后顺序。例如,可以把信号量视为某个共享资源的当前个数,然后由一个任务负责生成这种资源,而另一个任务则负责消费这种资源,这样可以构成两个任务之间的先后顺序。在具体实现上,一般把信号量的初始值设为N,N 大于或等于0。然后在一个任务内使用V 原语,把信号量加1,而在另外一个任务内部使用P 原语,将信号量减1,从而实现这两个任务之间的同步关系。

  (13)死锁

  在一组任务中,每个任务都占用着若干资源,同时又在等待其他任务占用的资源,从而造成所有任务都无法进展下去的现象,这称为死锁现象。

  除了资源的竞争之外,PV 操作使用不当也会引起死锁。

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答