实时操作系统同步互斥与通信学习教案_第1页
实时操作系统同步互斥与通信学习教案_第2页
实时操作系统同步互斥与通信学习教案_第3页
实时操作系统同步互斥与通信学习教案_第4页
实时操作系统同步互斥与通信学习教案_第5页
已阅读5页,还剩129页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实时操作系统同步实时操作系统同步(tngb)互斥与通信互斥与通信第一页,共134页。某些进程的执行必须先于另一些进程。保证进程运行的合理顺。进程通信多个进程之间传递消息。互斥和同步是进程并发的两个要素第1页/共133页第二页,共134页。ISR xTask yPOSTPENDTask xTask yPOSTPENDPOSTPENDTask xTask yPOSTPEND概述第2页/共133页第三页,共134页。第3页/共133页第四页,共134页。进程间共享主存是非常有用的,进程间共享主存是非常有用的,它允许进程间有效而紧密的交互,它允许进程间有效而紧密的交互,有利于进程的相互通信。但是,有利

2、于进程的相互通信。但是,共享也可能会带来一些问题共享也可能会带来一些问题第4页/共133页第五页,共134页。 P1P2XXYYY Y第5页/共133页第六页,共134页。P1P2唤 醒第6页/共133页第七页,共134页。用于消息通信管道(pipe),提供非结构化数据交换和实现同步第7页/共133页第八页,共134页。第8页/共133页第九页,共134页。信号量的种类及用途信号量的种类及用途信号量的定义信号量的定义互斥信号量互斥信号量二值信号量二值信号量计数信号量计数信号量信号量机制的主要信号量机制的主要(zhyo)数据结构数据结构典型的信号量操作典型的信号量操作第9页/共133页第十页,共

3、134页。第10页/共133页第十一页,共134页。P1和和p2的访问临界资源打印机的访问临界资源打印机的代码即为的代码即为临界区临界区第11页/共133页第十二页,共134页。临界区临界资源第12页/共133页第十三页,共134页。间内进入临界区,避免(bmin)“死等”让权等待:当进程不能进入临界区时,应立即释放处理机,以免其它进程“忙等”第13页/共133页第十四页,共134页。第14页/共133页第十五页,共134页。只能通过P原语和V原语访问。第15页/共133页第十六页,共134页。第16页/共133页第十七页,共134页。中等待(dngdi),直至其他进程在 S 上执行 V 操作

4、释放它为止第17页/共133页第十八页,共134页。(1)若信号量S大于0,则将S减1,P操作返回,该进程继续执行(2)若信号量S小于0,则将进程挂入S的等待队列(duli),将进程设置为阻塞状态,并转调度程序P原语原语S0S=S-1返回返回(fnhu)调用进程进入调用进程进入(jnr)等待队列等待队列转进程调度转进程调度是否第18页/共133页第十九页,共134页。第19页/共133页第二十页,共134页。P操作可能会引起进程的阻塞,V操作不会引起本身进程状态的变化,但可能唤醒其他进程,使其从阻塞状态转变到就绪(jix)状态V原语第20页/共133页第二十一页,共134页。V原语(1)若信号

5、量S的等待队列中有等待进程,则取队首进程,将其置为就绪(jix)状态并返回。(2)否则信号量S加1,并放回V原语原语是否是否(sh fu)有等待进程有等待进程S=S+1返回返回(fnhu)取队首进程置为就绪态取队首进程置为就绪态否是第21页/共133页第二十二页,共134页。第22页/共133页第二十三页,共134页。第23页/共133页第二十四页,共134页。P1P2P3P4关于s信号量的阻塞(zs)队列 信号量S的初值为:2P(s)S=s-1=1P(s)S=s-1=0P(s)S=s-1=-1P3P(s)S=s-1=-2P4v(s)S=s+1=-1唤醒就绪(jix)v(s)S=s+1=0唤醒

6、就绪(jix)v(s)S=s+1=1v(s)S=s+1=2第24页/共133页第二十五页,共134页。位哲学家一个,还有5根筷子。每个想吃饭(ch fn)的哲学家将坐到桌子旁分配给他的位置上,使用盘子两侧的筷子,夹面条吃。第25页/共133页第二十六页,共134页。问题是:设计一个(y )算法以允许哲学家吃饭。算法必须保证互斥 (没有两个哲学家同时使用同一根筷子) ,同时还要避免死锁和饿死第26页/共133页第二十七页,共134页。第27页/共133页第二十八页,共134页。少有一位哲学家可以拿到两跟筷子,这里再次使用了信号量。第28页/共133页第二十九页,共134页。没拿到筷子,因此必定能

7、保证有一个哲学家能取到另一边的筷子,吃完面后,将筷子给其他哲学家用。第29页/共133页第三十页,共134页。第30页/共133页第三十一页,共134页。用于解决互斥问题。它比较用于解决互斥问题。它比较(bjio)特殊,特殊,可能会引起优先级反转问题。可能会引起优先级反转问题。用于解决同步问题用于解决同步问题用于解决资源计数问题用于解决资源计数问题将信号量进行种类细分,可以根据其用途,在具体将信号量进行种类细分,可以根据其用途,在具体实现时做专门处理,提高执行效率和可靠性。实现时做专门处理,提高执行效率和可靠性。第31页/共133页第三十二页,共134页。第32页/共133页第三十三页,共13

8、4页。 else /显示机票已售完; V(mutex);临界区第33页/共133页第三十四页,共134页。Task1Task2共享资源共享资源第34页/共133页第三十五页,共134页。第35页/共133页第三十六页,共134页。互斥信号量状态图互斥信号量状态图开启开启锁定锁定初始化初始化值为值为1申请并获得申请并获得值为值为0释放释放值为值为1申请申请(递归递归)并获得并获得锁定数加锁定数加1释放释放(递归递归)锁定数减锁定数减1第36页/共133页第三十七页,共134页。比较项目比较项目关中断关中断使用测试并置使用测试并置位指令位指令禁止任务禁止任务切换切换使用信号量使用信号量锁定范围锁定

9、范围互斥力度最强互斥力度最强,锁定所有外部可屏蔽中断,凡是以中断形式到达的外部事件以及与之相关联的任务或处理过程均得不到执行凡是使用该指令访问共享资源的代码所有的任务只影响竞争共只影响竞争共享资源的任务享资源的任务对系统响应时对系统响应时间的影响间的影响如果关中断的时间较长,对系统的响应性能有很大影响较小如果禁止切换的时间过长,则影响系统的响应性能对系统响应性能对系统响应性能有一定影响,可有一定影响,可能导致优先级反能导致优先级反转转实现时的系统实现时的系统开销开销小小小较大较大注意事项注意事项关中断时间要关中断时间要尽量短尽量短不是所有的处理不是所有的处理器都具备这种指器都具备这种指令,影响

10、可移植令,影响可移植性性关调度的时间关调度的时间要尽量短要尽量短需采用一定的需采用一定的策略解决优先策略解决优先级反转问题级反转问题第37页/共133页第三十八页,共134页。可获得可获得(hud)不可不可(bk)获获得得申请申请(shnqng)并获得并获得(值为值为0)释放释放(值为值为1)初始化初始化值为值为0二值信号量状态图二值信号量状态图第38页/共133页第三十九页,共134页。 P(mutex);/等待P1执行; S2;二值信号量实现(shxin)同步 第39页/共133页第四十页,共134页。Task1() 执行执行(zhxng)一些操作一些操作; 将信号量将信号量sem1置置1

11、; 申请信号量申请信号量sem2; Task2() 申请信号量申请信号量sem1; 执行一些执行一些(yxi)操作操作; 将信号量将信号量sem2置置1; T a s k 2 申 请申 请(shnqng)信号量信号量sem1失败,系统切失败,系统切换到换到Task1sem1被置被置1后,后,Task2得到得到sem1并抢占并抢占Task1Task2运行到某处时因某种原运行到某处时因某种原因被阻塞,系统切换到因被阻塞,系统切换到Task1二值信号量实现同步 第40页/共133页第四十一页,共134页。Task1Task2共享资源实例共享资源实例nTask m共享资源实例共享资源实例1第41页/共

12、133页第四十二页,共134页。计数计数(j sh)信号量状态信号量状态图图可获得可获得(hud)不可获得不可获得初始化初始化值大于值大于0申请并获得申请并获得值为值为0释放释放值为值为1申请并获得申请并获得值减值减1释放释放值加值加1第42页/共133页第四十三页,共134页。第43页/共133页第四十四页,共134页。 1 2 3 4 n生产者任务生产者任务消费者任务消费者任务计数计数(j sh)(j sh)信号量使用实例:有界缓冲问题信号量使用实例:有界缓冲问题第44页/共133页第四十五页,共134页。生产者-消费者模型(mxng)第45页/共133页第四十六页,共134页。p1p2p

13、3p4pic1c2c3c4ci.生产者/消费者问题(wnt)第46页/共133页第四十七页,共134页。p1p2p3p4pic1c2c3c4ci.生产者/消费者问题(wnt)管理员,怎么(zn me)没东西!消费者对生产者有依赖(yli)关系:只有生产者生产出产品,才能给消费者提供产品消费第47页/共133页第四十八页,共134页。p1p2p3p4pic1c2c3c4ci.生产者/消费者问题(wnt)生产者对消费(xiofi)者有依赖关系:只有消费(xiofi)者消费(xiofi)掉产品,才能给生产者提供存放产品的空间第48页/共133页第四十九页,共134页。生产者/消费者问题(wnt)第4

14、9页/共133页第五十页,共134页。1生产者的私有信号量:生产者的私有信号量:emptyn消费者的私有信号量:消费者的私有信号量:full0流程图和程序:流程图和程序:第50页/共133页第五十一页,共134页。生产(shngchn)产品P(empty)P(s)buffer(in):=product; in:=(in+1) mod n;V(full)V(s)P(full)P(s)goods:= buffer(out);out:=(out+1) mod n;V(empty)V(s)消费(xiofi)产品第51页/共133页第五十二页,共134页。 P(mutex); /等待进入(jnr)缓冲区

15、生产出的产品放入buffer; V(mutex); /退出缓冲区 V(full); /唤醒消费者进程 第52页/共133页第五十三页,共134页。 V(empty); /唤醒生产者进程第53页/共133页第五十四页,共134页。,V(full)成对出现,但属于不同进程;多个P,V顺序不能颠倒,否则可能引起死锁。第54页/共133页第五十五页,共134页。第55页/共133页第五十六页,共134页。生产者任务生产者任务begin repeat 生产数据生产数据 /生产者生产数据生产者生产数据 Wait(E); /减少一个空缓冲区项减少一个空缓冲区项 Wait(mutex); /分配空缓冲区和移动

16、指针分配空缓冲区和移动指针P操作操作是互斥的是互斥的 “分配空缓冲区并调整分配空缓冲区并调整(tiozhng)指针指针P的临的临界段界段”; “向空缓冲区中装入数据向空缓冲区中装入数据” Signal(mutex); /释放互斥信号量释放互斥信号量 Signal(F); /增加一个满缓冲区项增加一个满缓冲区项 forever end 消费者任务消费者任务begin repeat 消费数据消费数据 /消费者取走数据消费者取走数据 Wait(F); /减少一个满缓冲区项减少一个满缓冲区项 Wait(mutex); /分配满缓冲区和移分配满缓冲区和移动指针动指针C操作是互斥的操作是互斥的 “分配满缓

17、冲区并调整指针分配满缓冲区并调整指针C的临的临界界(ln ji)段段”; “从满缓冲区中取走数据从满缓冲区中取走数据” Signal(mutex); /释放互斥信号量释放互斥信号量 Signal(F); /增加一个空缓冲区项增加一个空缓冲区项 forever end第56页/共133页第五十七页,共134页。第57页/共133页第五十八页,共134页。每个reader进程退出,则readcountreadcount-1 readcount0,reader进程执行v操作(cozu)第58页/共133页第五十九页,共134页。流程图和程序第59页/共133页第六十页,共134页。writer:P(

18、wrt)writingV(wrt)Reader:P(mutex)Readcount+P(wrt)V(mutex)readingP(mutex)Readcount-V(mutex)V(wrt)=1!=1=0!=0第60页/共133页第六十一页,共134页。Procedure reader; begin P(mutex); Readcountreadcount+1; if readcount1 then P(wrt); V(mutex); reading is perfoming; P(mutex); Readcountreadcount-1; if readcount0 then V(wrt);

19、 V(mutex);第61页/共133页第六十二页,共134页。简单理发店问题第62页/共133页第六十三页,共134页。开理发店;开理发店;若理发师正在为人理发,则该若理发师正在为人理发,则该顾客就找一张空椅子坐下等待顾客就找一张空椅子坐下等待;若理发师在睡觉,则顾客就唤若理发师在睡觉,则顾客就唤醒他。醒他。第63页/共133页第六十四页,共134页。资源与信号量资源与信号量对于理发师:坐上理发椅的顾客,对于理发师:坐上理发椅的顾客,信号量信号量barber0对于理完发的顾客:是否有顾客对于理完发的顾客:是否有顾客等待,信号量等待,信号量wait0对于进入的顾客:是否有人在理对于进入的顾客:

20、是否有人在理发,及等候室是否已满,发,及等候室是否已满, 变量变量count0保证对共享变量保证对共享变量count的互斥访的互斥访问的信号量:问的信号量:entry1第64页/共133页第六十五页,共134页。 P(barber) ;“Shave” 第65页/共133页第六十六页,共134页。else V(entry) ;V(barber) ; “Shave”P(entry) ;count := count 1;if count 0 then V(wait) ;V(entry) ;第66页/共133页第六十七页,共134页。理发师理发师第67页/共133页第六十八页,共134页。理发师bar

21、ber信号量队列(duli)wait信号量队列(duli)entry信号量队列(duli)P(entry)count=5V(entry)P(entry)count=5count=4V(entry)V(wait)V(barber)第68页/共133页第六十九页,共134页。SCB1SCB2信号量控制块信号量控制块count信号量名字或信号量名字或IDTask1Task2任务等待列表任务等待列表第69页/共133页第七十页,共134页。wait_queue任务等待队列任务等待队列attributes信号量属性信号量属性(shxng)lock_nesting_behavior 试图嵌套获得时的规试图

22、嵌套获得时的规则则 wait_discipline 任务等待信号量的方式任务等待信号量的方式priority_ceiling 优先级天花板值优先级天花板值lock是否被占有是否被占有holder拥有者拥有者 nest_count嵌套层数嵌套层数第70页/共133页第七十一页,共134页。信号量机制(jzh)的主要数据结构第71页/共133页第七十二页,共134页。第72页/共133页第七十三页,共134页。第73页/共133页第七十四页,共134页。信信号号量量的的属属性性(shxng)信号量的类型(lixng)互斥信号量(互斥信号量(MUTEX_SEMAPHORE)计数信号量(计数信号量(C

23、OUNTING_SEMAPHORE)二值信号量(二值信号量(BINARY_SEMAPHORE)任务等待信号量的方式先进先出(先进先出(FIFO)顺序)顺序优先级(优先级(PRIORITY)顺序)顺序优先级反转问题的解决方法(只适用于互斥信号量)优先级继承算法(优先级继承算法(INHERIT_PRIORITY)优先级天花板算法优先级天花板算法(PRIORITY_CEILING) ,需给出所,需给出所有可能获得此信号量的任务中优先级最高的任务的优先级。有可能获得此信号量的任务中优先级最高的任务的优先级。第74页/共133页第七十五页,共134页。第75页/共133页第七十六页,共134页。不允许在

24、ISR中选择等待当任务选择等待时,将被按FIFO或优先级顺序放置在等待队列中第76页/共133页第七十七页,共134页。待任务(将相应的任务移出等待队列,使其就绪)如果使用了优先级继承或优先级天花板算法,那么执行该功能(系统(xtng)调用)的任务的优先级将恢复到原来的高度。第77页/共133页第七十八页,共134页。示该信号量已被删除第78页/共133页第七十九页,共134页。SignalTaskTask2 二值信号量二值信号量初值为初值为0FlushTask1Task3第79页/共133页第八十页,共134页。通信通信(tng xn)方式概述方式概述消息队列机制的主要数据结构消息队列机制的

25、主要数据结构典型的消息队列操作典型的消息队列操作第80页/共133页第八十一页,共134页。操作系统设计了多种高级通信原语send(A) 原语和receive(A)原语第81页/共133页第八十二页,共134页。息缓冲区连入接收进程的消息缓冲区队列中代码第82页/共133页第八十三页,共134页。第83页/共133页第八十四页,共134页。dio),并释放消息缓冲区如果没有消息可读取,则阻塞接收进程,直至消息发送来为止第84页/共133页第八十五页,共134页。from buffer F to receiber;end;第85页/共133页第八十六页,共134页。send发送(f sn)区(消

26、息)receivehptrmutexsmsptrnptrtextsptrnulltextaddpnulltextpaddpnulltextpnptr第86页/共133页第八十七页,共134页。间接通信方式,也叫信箱通信方式进程间的通信需要通过(tnggu)作为某种共享数据结构的实体信箱。send(A,message) 发送一个消息给邮箱Areceive(A,message) 从邮箱A接收一个消息消息、消息队列消息、消息队列(duli)、邮箱、邮箱第87页/共133页第八十八页,共134页。内核一般提供(tgng)以下邮箱服务: 消息邮箱与信号量最大的区别:消息邮箱可以存放一条消息邮箱与信号量最

27、大的区别:消息邮箱可以存放一条完整的内容信息,而用信号量进行行为完整的内容信息,而用信号量进行行为(xngwi)同步时,同步时,只能提供同步时刻的信息,不能提供内容信息。只能提供同步时刻的信息,不能提供内容信息。如果(rgu)邮箱内有消息,则任务将消息从邮箱中取走;如果(rgu)邮箱内没有消息,则内核不将该任务挂起(ACCEPT),返回空指针。内核内核 POST内容初始化PENDACCEPT邮箱内消息的内容初始化,此时邮箱内是否有消息并不重要;等待有消息进入邮箱(PEND);将消息放入邮箱(POST);消息邮箱消息邮箱第88页/共133页第八十九页,共134页。消息邮箱消息邮箱满满消息消息(x

28、io (xio xi)xi)指针指针PCPC空空 一般来说,消息邮箱只有(zhyu)2种状态:即空状态(消息邮箱中没有消息)、满状态(消息邮箱中存放了消息)。 消息邮箱消息邮箱(yuxing)的状态的状态第89页/共133页第九十页,共134页。消息邮箱满满消息邮箱PC空空发送消息指针发送消息指针1.向消息邮箱(yuxing)发送消息有任务有任务(rn wu)在等待消息在等待消息等待列表中最等待列表中最高优先级的任务高优先级的任务运行状态运行状态就绪状态就绪状态 任务(rn wu)优先级足够高PC 获得消获得消息息注意:如果发送消息指针是以广播的形式发送,那么所有等待此消息的任务都获得消息发送

29、消息指针发送消息指针无任务在等待消息无任务在等待消息PCPC返回错误码说明消息邮箱已满 操作成功PC发送失败OSMboxPost()对应以上3种情形消息邮箱消息邮箱第90页/共133页第九十一页,共134页。消息邮箱满满空空2.从消息邮箱(yuxing)接收消息等待消息指针等待消息指针PCPC操作(cozu)成功 延时等待消息延时等待消息延时中获得消息,操作(cozu)成功 延时等待消息延时等待消息设定延时到,无消息,返回超时错误等待消息指针等待消息指针消息邮箱等待消息指针等待消息指针PC空空消息邮箱满满另一个任务(或中断服务程序)向消息邮箱发出消息 PCOSMboxPend()对应以上3种情

30、形消息邮箱消息邮箱第91页/共133页第九十二页,共134页。 消息队列就象一个类似于缓冲区的对象,通过消息队列任务和ISR发送和接收消息,实现数据的通信和同步。消息队列具有一定的容量,可以容纳多条消息,因此可以看成是多个(du )邮箱的组合。消息指针1消息指针3消息指针2任务任务1PC任务任务2PCPCPCPCPC消息指针3消息指针2消息指针3FIFO 消息队列消息指针1消息指针3消息指针2任务任务1PC任务任务2PCPCPCPCPC提高消息在队列(duli)中的优先级实现LIFO算法 LIFO消息队列消息消息(xio xi)队列队列第92页/共133页第九十三页,共134页。等待消息(xi

31、o xi)的到来(PEND);将消息(xio xi)放入队列中去(POST);无等待取得(qd)消息,如果消息队列中有消息,则任务将消息从消息队列中取走;如果消息队列为空,则内核不将该任务挂起,返回空指针。内核一般提供以下消息队列服务: 与信号量和邮箱相比,消息队列的最大优点就是通过缓冲的方式来传递多个消息,从而避免了信息的丢失或混乱。内核内核 POST初始化PENDACCEPT消息队列初始化,队列初始化时总是清为空;消息队列消息队列第93页/共133页第九十四页,共134页。 一般来说,消息队列有3种状态,即空状态(消息队列中没有(mi yu)任何消息)、满状态(消息队列中的每个存储单元都存

32、放了消息)、正常状态(消息队列中消息但又没有(mi yu)到满的状态)。 消息指针消息指针消息指针消息指针消息指针消息指针消息指针消息指针消息队列消息指针消息指针消息指针消息队列消息队列空状态空状态(zhungti)正常正常(zhngchng)状态状态满状态满状态消息队列消息队列第94页/共133页第九十五页,共134页。非空非空满满队 列 创 建队 列 创 建(chungjin)消息数为消息数为0消息消息(xio xi)队列状队列状态图态图消息发送消息发送消息数加消息数加1空空消息发送消息发送消息数为消息数为1消息接收消息接收消息数为消息数为0消息接收消息接收消息数减消息数减1消息接收消息接

33、收消息数减消息数减1消息发送消息发送消息数等于队列长度消息数等于队列长度第95页/共133页第九十六页,共134页。队列控制块队列控制块队列长度队列长度QCB1队列名或队列名或IDTask3Task4接收任务等待列接收任务等待列表表Task1Task2发送任务等待列发送任务等待列表表最大最大消息消息长度长度QCB2消息队列消息队列(duli)(duli)及其相关的参数和支持数据结构及其相关的参数和支持数据结构 第96页/共133页第九十七页,共134页。发送消息指针发送消息指针1.向消息队列(duli)发送消息有任务在等待有任务在等待(dngdi)消息消息等待列表中最等待列表中最高优先级的任务

34、高优先级的任务运行状态运行状态就绪状态就绪状态 任务(rn wu)优先级足够高PC 获得消息获得消息注意:如果发送消息指针是以广播的形式发送,那么所有等待此消息的任务都获得消息 当任务向消息队列中发送消息时,它首先判断是否有任务在等待消息队列的消息。OSQPost()对应3种情形消息队列消息队列第97页/共133页第九十八页,共134页。未满未满发送消息指针发送消息指针无任务无任务(rn wu)在等待消息在等待消息PC返回错误码说明消息(xio xi)队列已满 操作(cozu)成功PC 如果没有任务在等待消息队列的消息,那么就会再判断消息队列当前是否已满 。消息指针消息指针消息指针消息指针消息

35、指针消息指针消息指针消息指针消息指针消息指针消息指针消息队列消息队列发送失败已满已满OSQPost()对应3种情形消息队列消息队列第98页/共133页第九十九页,共134页。消息指针消息指针2.从消息队列(duli)接收消息消息指针消息指针消息指针任务等待消息任务等待消息PC消息队列 消息队列中已存在消息,通过内核服务将消息传递给等待(dngdi)消息的任务中优先级最高的任务,或最先进入等待(dngdi)消息任务列表的任务。 操作(cozu)成功运行状态运行状态就绪状态就绪状态 任务优先级足够高 获得消息获得消息OSQPend()对应3种情形消息队列消息队列第99页/共133页第一百页,共13

36、4页。 如果消息队列为空,则等待消息的任务被放入等待消息的任务列表(li bio)中,直到有其它任务向消息队列发送消息后才能解除该等待状态或在超时的情况下运行。 消息指针任务任务PC消息队列 延时等待消息延时等待消息延时中获得消息,操作(cozu)成功任务等待消息任务等待消息运行状态运行状态就绪状态就绪状态 任务(rn wu)优先级足够高获得消息获得消息PCOSQPend()对应3种情形消息队列消息队列第100页/共133页第一百零一页,共134页。 一般来说,OSQPend()函数允许(ynx)用户定义一个最长的等待时间Timeout作为它的参数,这样可以避免该任务无休止地等待下去。 消息队

37、列 任务等待消息任务等待消息运行状态运行状态就绪状态就绪状态 任务(rn wu)优先级足够高延时延时Timeout等待消息等待消息设定延时到,无消息(xio xi),返回超时错误 一直无消息一直无消息超时超时OSQPend()对应3种情形消息队列消息队列第101页/共133页第一百零二页,共134页。Sending TaskReceiving TaskMessage1Message1Message1发送任务的发送任务的内存区域内存区域消息队列的消息队列的内存区域内存区域接收任务的接收任务的内存区域内存区域1st copy2nd copy发送和接收消息发送和接收消息(xio xi)的消息的消息(

38、xio xi)拷贝拷贝和内存使用和内存使用这种消息这种消息(xio xi)传递方法效率低、占用空间传递方法效率低、占用空间大大一种效率更高的方式是传递消息一种效率更高的方式是传递消息(xio xi)指针指针消息的发送(f sn)或接收的两种方法第102页/共133页第一百零三页,共134页。number_of_messagemax_message_countnumber_of_messagemax_message_sizewait_disciplinewait_queuequeue_startqueue_inqueue_outqueue_endmessagemessagemessagemess

39、agemessagemessagemessagemessagemessagemax_message_count消息消息(xio xi)队列控制队列控制块块消息消息(xio xi)队列缓队列缓冲区冲区第103页/共133页第一百零四页,共134页。消息队列的环形消息队列的环形(hun xn)缓冲缓冲max_message_countqueue_endqueue_startqueue_outnumber_of_messagequeue_in消息消息(xio xi)指针指针第104页/共133页第一百零五页,共134页。第105页/共133页第一百零六页,共134页。唯一的ID 第106页/共133

40、页第一百零七页,共134页。Msg 3接收任接收任务务等待列等待列表表Msg 2Msg 1消息队消息队列列发送普通消息先进先出发送普通消息先进先出(FIFO)次序)次序Msg 3接收任接收任务务等待列等待列表表Msg 2Msg 1消息队消息队列列发送紧急消息后进先出发送紧急消息后进先出(LIFO)次序)次序第107页/共133页第一百零八页,共134页。Task 4High消息队列消息队列接收任务等待列表接收任务等待列表任务等待列表基于任务等待列表基于优先级的次序优先级的次序Task 2mediumTask 3mediumTask 1LowTask 4High消息队列消息队列接收任务等待列表接

41、收任务等待列表任务等待列表先进先出任务等待列表先进先出(FIFO)次序)次序Task 2mediumTask 3mediumTask 1Low第108页/共133页第一百零九页,共134页。第109页/共133页第一百一十页,共134页。Task1Task2 第110页/共133页第一百一十一页,共134页。Task1Task2第111页/共133页第一百一十二页,共134页。概述概述管道机制的主要数据结构管道机制的主要数据结构典型典型(dinxng)的管道操作的管道操作管道机制的典型管道机制的典型(dinxng)应用应用第112页/共133页第一百一十三页,共134页。Task1Task2管

42、道管道(gundo)管道中的数据管道中的数据写描述符写描述符读描述符读描述符向管道向管道写数据写数据从管道从管道读数据读数据数据在管道内像一个非结构字节流,按数据在管道内像一个非结构字节流,按FIFOFIFO的次序从管道中的次序从管道中读出。当管道空时,阻塞读者,当管道满时,阻塞写者。读出。当管道空时,阻塞读者,当管道满时,阻塞写者。 第113页/共133页第一百一十四页,共134页。Task1Task5管道管道Task2Task3Task4Task6ISR1ISR2ISR3公共管道操公共管道操作作第114页/共133页第一百一十五页,共134页。非空非空满满创建管道创建管道(gundo)无写

43、入数据无写入数据读数据,有剩读数据,有剩余数据余数据空空写数据写数据读数据,读数据,无数据留无数据留下下写数据,有写数据,有剩余空间剩余空间读数据读数据写数据,无剩写数据,无剩余空间余空间第115页/共133页第一百一十六页,共134页。管道控制块管道控制块Byte countData bufferBuffer sizeOutput positionInput positionTask3Task4接收任务等待列表接收任务等待列表Task1Task2发送任务等待列表发送任务等待列表第116页/共133页第一百一十七页,共134页。Task1ISRTask2Task3Pipe1Pipe2Pipe3

44、任务任务Task3Task3等待从等待从Pipe1Pipe1和和Pipe2Pipe2这两个管道读数据并写这两个管道读数据并写到第三个管道到第三个管道Pipe3Pipe3上。在这上。在这种情况下,当头两个管道中的种情况下,当头两个管道中的任意一个有数据时,任意一个有数据时,SelectSelect调调用用(dioyng)(dioyng)返回。返回。 用来让程序监视多个文件描述符用来让程序监视多个文件描述符(file descrptor)的状态变化的的状态变化的第117页/共133页第一百一十八页,共134页。Task ATask BSelect操作操作(cozu)Select操作操作(cozu)

45、管道管道C管道管道D任务任务A A和任务和任务B B打开两个管道打开两个管道作为任务间的通信方式:打作为任务间的通信方式:打开管道开管道C C作为从任务作为从任务A A到任到任务务B B的数据传输,打开管道的数据传输,打开管道D D作为从任务作为从任务B B到任务到任务A A的回应。的回应。任务任务A A等待管道等待管道C C编程可写,编程可写,也等待管道也等待管道D D上来自任务上来自任务B B的回应。的回应。 两个任务之间的同步管道主要用于任务到任务或管道主要用于任务到任务或ISRISR到任务的数据传输到任务的数据传输第118页/共133页第一百一十九页,共134页。概述概述事件机制的主要数据结构事件机制的主要数据结构典型的事件操作典型的事件操作(cozu)事件机制的典型应用事件机制的典型应用第119页/共133页第一百二十页,共134页。第120页/共133页第一百二十一页,共134页。第121页/共133页第一百二十二页,共134页。概述(i sh)任务任务(rn wu)任务任务任务任务任务任务ISRISRORAND“与与”型同步型同步“或或”型同步型同步事件集事件集事件集事件集POSTPOSTPENDPEND第122页/共133页第一百二十三页,共134页。概述(i sh)任务任务(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论