登录 注册
当前位置:主页 > 资源下载 > 50 > 在维护emc datadomain 2500存储设备手册时,涉及到任务间的通讯与同步

在维护emc datadomain 2500存储设备手册时,涉及到任务间的通讯与同步

  • 更新:2024-11-04 13:57:08
  • 大小:4.33MB
  • 推荐:★★★★★
  • 来源:网友上传分享
  • 类别:OS - 操作系统
  • 格式:PDF

资源介绍

第6章 任务之间的通讯与同步 在µC/OS-II中,有多种方法可以保护任务之间的共享数据和提供任务之间的通讯。在前面 的章节中,已经讲到了其中的两种: 一是利用宏 OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()来关闭中断和打开中断。当两个 任务或者一个任务和一个中断服务子程序共享某些数据时,可以采用这种方法,详见 3.00 节 临 界 段 、 8.03.02 节 OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL()及 9.03.02节 临界段,OS_CPU.H; 二是利用函数 OSSchedLock()和 OSSchekUnlock()对µC/OS-II 中的任务调度函数上锁和开 锁。用这种方法也可以实现数据的共享,详见 3.06节 给调度器上锁和开锁。 本章将介绍另外三种用于数据共享和任务通讯的方法:信号量、邮箱和消息队列。 图 F6.1介绍了任务和中断服务子程序之间是如何进行通讯的。 一个任务或者中断服务子程序可以通过事件控制块 ECB(Event Control Blocks)来向另 外的任务发信号[F6.1A(1)]。这里,所有的信号都被看成是事件(Event)。这也说明为什么上 面把用于通讯的数据结构叫做事件控制块。一个任务还可以等待另一个任务或中断服务子程序 给它发送信号[F6.1A(2)]。这里要注意的是,只有任务可以等待事件发生,中断服务子程序是 不能这样做的。对于处于等待状态的任务,还可以给它指定一个最长等待时间,以此来防止因 为等待的事件没有发生而无限期地等下去。 多个任务可以同时等待同一个事件的发生[F6.1B]。在这种情况下,当该事件发生后,所 有等待该事件的任务中,优先级最高的任务得到了该事件并进入就绪状态,准备执行。上面讲 到的事件,可以是信号量、邮箱或者消息队列等。当事件控制块是一个信号量时,任务可以等 待它,也可以给它发送消息。