嵌入式系统中的各个任务都是以并发的方式来运行的,并为同一个大的任务服务,它们不可避免地要共同使用一些共享资源,并且在处理一些需要多个任务共同协作来完成的工作时,还需要相互的支持和限制。因此,对于一个完善的多任务操作系统来说,系统必须具备完备的同步和通信机制;

在多任务合作工作中,os应该解决两个问题:

    1、各任务间应该具有一种互斥关系,即对于某个共享资源,如果一个任务正在使用,则其他任务只能等待,等到该任务释放该资源后,等待的任务之一才能使用它;(例:共享打印机)

    2、相关的任务在执行上要有先后次序、一个任务要等其伙伴发来通知,或建立了某个条件后才能继续执行,否则只能等待;(例如:A向buff中读数据,B向buff中写数据,只有在B写数据才能让A读数据)

  任务之间这种制约性的合作运行机制叫做任务间的同步。系统中任务的同步是依靠任务与任务之间互相发送消息来保证同步的;

任务间的同步依赖任务间的通信,在UC/OS2中,使用信号量、邮箱(消息邮箱)和消息队列这些被作时间的中间环节来实现任务之间的通信;

  1、信号量

  信号量是一类事件,使用信号量的最初目的,是为了共享资源设立一个表示该共享资源被占用情况的标志。这样,就可使任务在访问共享资源之前,先对这个标志进行查询,在了解资源被占用的情况之后,再决定自己的行为;

  二元信号量(互斥型信号量);计数型信号量;

  2、消息邮箱

   在多任务操作系统中,常常需要在任务与任务之间通过传递一个数据(这种数据叫做“消息”)的方式来进行通信,为了达到这个目地,可以在内存中创建一个存储空间作为该数据的缓冲区。如果把这个缓冲区叫做消息缓存区,那么在任务间传递数据(消息)的一个最简单的方法就是传递消息缓冲区指针。 因此,用来传递消息缓冲区指针的数据结构就叫做消息邮箱;

  3、消息队列

  上面说到的消息邮箱不仅可用来传递一个消息,而且也可定义一个指针数组。让数组的每个元素都存放一个消息缓冲区指针,那么任务就可以通过传递这个指针数组指针的方法传递多个消息了,这样可以传递多个消息的数据结构就叫做消息队列;

UC/OS2中把信号量、消息邮箱和消息队列这类用于任务同步和通信的数据结构叫做事件;

    

  

  

US/OS2之任务同步与通信的更多相关文章

  1. C++同步串口通信

    问题描述:     C++串口通信,设置同步串口通信 问题解决:     (1)打开串口 注:     使用串口需要添加<Windows.h>头文件,打开串口主要是使用CreateFile ...

  2. uCos-II中任务的同步与通信

    任务的同步与通信 任务间的同步 在多任务合作工作过程中,操作系统要解决两个问题: 各任务间应该具有一种互斥关系,即对某些共享资源,如果一个任务正在使用,则其他任务只能等待,等到该任务释放资源后,等待任 ...

  3. Python 多线程、多进程 (二)之 多线程、同步、通信

    Python 多线程.多进程 (一)之 源码执行流程.GIL Python 多线程.多进程 (二)之 多线程.同步.通信 Python 多线程.多进程 (三)之 线程进程对比.多线程 一.python ...

  4. Qt 多线程同步与通信

    Qt 多线程同步与通信 1 多线程同步 Qt提供了以下几个类来完成这一点:QMutex.QMutexLocker.QSemphore.QWaitCondition. 当然可能还包含QReadWrite ...

  5. C#多线程的同步与通信

    C#中使用lock和Monitor控制多线程对资源的使用,最常见的生产者和消费者问题就是多线程同步和通信的经典例子.了解C#多线程的同步与通信. 一.关于lock和Monitor lock可以把一段代 ...

  6. 【VxWorks系列】任务间同步与通信之共享内存

    在开始之前先说明三个概念,任务间的同步,互斥,通信. 同步,是指一个任务等待某个条件发生,而另外一个任务引发这个条件后,等待的任务会被触发执行相应的处理.这就是一个任务与另一任务之间的同步控制. 互斥 ...

  7. Win32多线程编程(3) — 线程同步与通信

      一.线程间数据通信 系统从进程的地址空间中分配内存给线程栈使用.新线程与创建它的线程在相同的进程上下文中运行.因此,新线程可以访问进程内核对象的所有句柄.进程中的所有内存以及同一个进程中其他所有线 ...

  8. 【VxWorks系列】任务间同步与通信之信号量

    信号量是VxWorks提供的最常用,最快速的一种任务间通信机制.VxWorks中信号量有三种:二值信号量,互斥信号量,计数信号量.下面一一介绍这三种信号量的作用与区别. 信号量通常的作用就是是控制任务 ...

  9. linux同步与通信

    这几天读完了UNP v2,对进程间通信与同步的方式有所了解,现对主要的知识点总结如下: 根据出现的历史,先有的管道,FIFO,信号,然后是systemV IPC,再是后来的Poxis IPC,syst ...

随机推荐

  1. python使用mysql的三个模块:mysql.connector、sqlalchemy、MySQLdb

    在python中使用mysql其实很简单,只要先安装对应的模块即可,那么对应的模块都有什么?官方也没指定也没提供,pcat就推荐自己遇到的3个模块:mysql.connector.sqlalchemy ...

  2. python 字符串探讨

    本文内容基于python3 几乎所有有用的程序都会涉及到某些文本处理,不管是解析数据还是产生输出.字符串的学习是重点中的重点,这一节将重点关注文本的操作处理,比如提取字符串,搜索,替换以及解析等.大部 ...

  3. 用1个 2个3个 5个div实现 十字架

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 关于This的经典题目

    这个题目见过很多次了 var x = 10; var foo = { x: 20, bar: function() { var x = 30; return this.x; } }; alert(fo ...

  5. 关于mysqli 连接数不能正确释放的解决方案

    /** * 析构函数 */ //解决重复链接的问题 private $db_handler = null; function __destruct() { Log::logWrite($this-&g ...

  6. PHP批量下载方法

      PHP批量下载方法 界面: $.get(“< ?php echo url::base(true);?>inventory/report/buildCsv”, //后台路径 {‘para ...

  7. 在XAML代码中为节点树安装事件监听器

    通过以下的演示样例代码,能够发现,我们能为随意的节点指定要监听的路由事件,而这个路由事件本身和这个元素可能根本就没有关系. <Window x:Class="Demo002.MainW ...

  8. 图片变灰css3

    -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filte ...

  9. ASP.NET之电子商务系统开发-2(购物车功能)

    一.前言 继上次的首页数据列表后,这是第二篇.记录一下购物车这个比较庞大的功能,可能实现的方法跟其他人有点不一样,不过原理都差不多,是将cookie存数据库里面的. 二.开始 首先看一下购物车流程及对 ...

  10. BZOJ 1211: [HNOI2004]树的计数( 组合数学 )

    知道prufer序列就能写...就是求个可重集的排列...先判掉奇怪的情况, 然后答案是(N-2)!/π(d[i]-1)! -------------------------------------- ...