最新实时操作系统同步、互斥与通信PPT课件.ppt
《最新实时操作系统同步、互斥与通信PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新实时操作系统同步、互斥与通信PPT课件.ppt(135页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实时操作系统同步、互斥与通信实时操作系统同步、互斥与通信主要内容概述信号量邮箱和消息队列管道事件在单处理器平台上,嵌入式操作系统内核提供的同步、互斥与通信机制主要包括:信号量(semaphore),用于互斥与同步事件(组)(event group),用于同步异步信号(asynchronous signal),用于同步邮箱(mailbox)、消息队列(message queue),用于消息通信管道(pipe),提供非结构化数据交换和实现同步 概述忙等待模型 持续检查一个变量,直到它可用为止睡眠-唤醒模型 通过PV原语操作保证进程间的互斥消息传递模型 通过消息传送系统实现多进程之间的互斥进程互斥和
2、同步的经典解决机制第一节信号量信号量的种类及用途信号量的种类及用途信号量的定义信号量的定义互斥信号量互斥信号量二值信号量二值信号量计数信号量计数信号量信号量机制的主要数据结构信号量机制的主要数据结构典型的信号量操作典型的信号量操作临界资源和临界区操作系统把一次仅允许一个进程使用的资源称为临界资源。一个进程中访问临界资源的那段程序称为临界区。进程进程P1和和P2共享同一打印机资源,其操作流程共享同一打印机资源,其操作流程如下:如下:p1:entry codep1:entry code使用打印机使用打印机exit codeexit code p2:entry code p2:entry code使
3、用打印机使用打印机exit codeexit code系统打印机即为系统打印机即为临界资源临界资源P1和和p2的访问临界资源打印机的代码即为的访问临界资源打印机的代码即为临界区临界区临界资源和临界区临界区临界资源 进程P1 进程P2 R1 count;R2=count;R1+;R2+;count=R1;count=R2;(设count的初始值为5)为互斥地使用临界资源,需保证进程互斥地进入临界区。临界资源和临界区临界区的进入准则空闲让进:临界资源空闲时,允许进程进入临界区忙着等待:临界资源正在被访问时,其他需要进入临界区的进程必须等待有限等待:保证进程在有效的时间内进入临界区,避免“死等”让权
4、等待:当进程不能进入临界区时,应立即释放处理机,以免其它进程“忙等”临界资源和临界区进程互斥进入临界区的实现方法硬件方法禁止中断在进程进入临界区之后,禁止该进程中断专用机器指令TS指令,Swap指令软件方法信号量和PV操作临界资源和临界区信号量是一个数据结构,其定义如下:struct semaphore int value;struct PCB *queue;信号量semaphore包括一个整型值和一个等待队列。信号量只能通过P原语和V原语访问。什么是信号量什么是信号量信号量被定义为一个整形变量,在其上定义了以下三个操作:1、可以被初始化一个非负数2、wait操作(P操作)将信号量的值减1后,
5、若该值为负,则执行wait操作的任务等待3、signal操作(V操作)将信号量的值增1后,若该值为非正,则执行signal操作的任务唤醒 P 原语 P(S)S:=S-1;如果 S =0,则表示有资源,该进程继续执行;如果 S 0S=S-1返回返回调用进程进入等待队列调用进程进入等待队列转进程调度转进程调度是否P原语操作原型 void wait(semaphore s)/s.value=s.value 1;if(s.value 0,则该进程继续执行如果 S 0,说明有进程被挂起,则唤醒一阻塞进程,即从S信号量的等待队列首摘下一个PCB,将其置为就绪状态,执行 V(S)者继续执行6P操作可能会引起
6、进程的阻塞,V操作不会引起本身进程状态的变化,但可能唤醒其他进程,使其从阻塞状态转变到就绪状态V原语V原语(1)若信号量S的等待队列中有等待进程,则取队首进程,将其置为就绪状态并返回。(2)否则信号量S加1,并放回V原语原语是否有等待进程是否有等待进程S=S+1返回返回取队首进程置为就绪态取队首进程置为就绪态否是V原语操作原型 void signal(semaphore s)s.value=s.value+1;if(s.value=1)value=value 1;count=value;/打印一张机票;else /显示机票已售完;V(mutex);临界区信号量实现进程互斥用信号量实现任务间的互
7、斥var mutex:Shared Semaphore;begin mutex:=1;parbegin P1:P2:Pi:repeat Wait(mutex);“进程Pi的临界代码段”;Signal(mutex);forever Pn:parend endTask1Task2共享资源共享资源互斥信号量 WaitB(S):/申请信号量申请信号量if S.value1;/当前没有其他任务使用信号量当前没有其他任务使用信号量 then S.value=S.value-1=0/将信号量值修改为将信号量值修改为0,独占共享资源,独占共享资源else begin Insert(CALLER,S.L);/如
8、果当前有其他任务使用信号量,将该任务放入等待如果当前有其他任务使用信号量,将该任务放入等待 队列队列 Block(CALLER);/修改该任务的状态为等待态(阻塞任务)修改该任务的状态为等待态(阻塞任务)endSignalB(S):/释放信号量释放信号量if S.L queue is empty;/如果等待序列为空,没有其他任务等待使用该共享资源如果等待序列为空,没有其他任务等待使用该共享资源 then S.value=1;/释放信号量释放信号量else begin Remove(S.L,id);/如果有其他任务等待使用该共享资源,则从等待队列中如果有其他任务等待使用该共享资源,则从等待队列中
9、 将该任务移除将该任务移除 wakeup(id);/将该任务的状态改为就绪态将该任务的状态改为就绪态(唤醒任务唤醒任务)end互斥信号量状态图互斥信号量状态图互斥信号量状态图开启开启锁定锁定初始化初始化值为值为1申请并获得申请并获得值为值为0释放释放值为值为1申请申请(递归递归)并获得并获得锁定数加锁定数加1释放释放(递归递归)锁定数减锁定数减1各种互斥机制比较比较项目比较项目关中断关中断使用测试并置使用测试并置位指令位指令禁止任务禁止任务切换切换使用信号量使用信号量锁定范围锁定范围互互斥斥力力度度最最强强,锁定所有外部可屏蔽中断,凡是以中断形式到达的外部事件以及与之相关联的任务或处理过程均得
10、不到执行凡是使用该指令访问共享资源的代码所有的任务只只影影响响竞竞争争共共享资源的任务享资源的任务对系统响应时对系统响应时间的影响间的影响如果关中断的时间较长,对系统的响应性能有很大影响较小如果禁止切换的时间过长,则影响系统的响应性能对对系系统统响响应应性性能能有有一一定定影影响响,可可能能导导致优先级反转致优先级反转实现时的系统实现时的系统开销开销小小小较大较大注意事项注意事项关关中中断断时时间间要要尽量短尽量短不不是是所所有有的的处处理理器器都都具具备备这这种种指指令令,影响可移植性影响可移植性关关调调度度的的时时间间要尽量短要尽量短需需采采用用一一定定的的策策略略解解决决优优先先级反转问
11、题级反转问题二值信号量可获得可获得不可获得不可获得申请并获得申请并获得(值为值为0)释放释放(值为值为1)初始化初始化值为值为0二值信号量状态图二值信号量状态图例如:有两个程序段S1和S2,要求S1先于S2执行。semaphore mutex=0;P1进程:S1;V(mutex);/唤醒进程P2;P2进程:P(mutex);/等待P1执行;S2;二值信号量实现同步 Task1()执行一些操作执行一些操作;将信号量将信号量sem1置置1;申请信号量申请信号量sem2;Task2()申请信号量申请信号量sem1;执行一些操作执行一些操作;将信号量将信号量sem2置置1;Task2申申请请信信号号量
12、量sem1失失败败,系系统统切换到切换到Task1sem1被被 置置 1后后,Task2得得 到到 sem1并并抢占抢占Task1Task2运运行行到到某某处处时时因因某某种种原原因因被被阻阻塞塞,系系统统切切换换到到Task1用二值信号量实现两个任务之间的双向同步用二值信号量实现两个任务之间的双向同步用二值信号量实现两个任务之间的双向同步用二值信号量实现两个任务之间的双向同步 Task2Task2优先级高于优先级高于优先级高于优先级高于Task1Task1 sem1sem1和和和和sem2sem2的初始值均为的初始值均为的初始值均为的初始值均为0 0二值信号量实现同步 计数信号量Task1T
13、ask2共享资源实例共享资源实例nTask m共享资源实例共享资源实例1计数信号量计数信号量状态图计数信号量状态图可可获获得得不可不可获获得得初始化初始化值值大于大于0申申请请并并获获得得值为值为0释释放放值为值为1申申请请并并获获得得值值减减1释释放放值值加加1计数(一般)信号量同步原语Wait(S):S.value:=S.value-1;/有新任务来使用共享资源将信号量的值减1 if S.value0 /如果信号量的值为负,表示共享资源已经分配完毕 then begin Insert(CALLER,S.L);/将该任务插入等待序列 Block(CALLER);/将该任务状态改为等待态(阻塞
14、任务)endSignal(S):S.value:=S.value+1;/任务使用完共享资源,将信号量的值加1,释放 一个信号量 if S.value 1 then V(entry);P(wait);else V(entry);V(barber);“Shave”P(entry);count:=count 1;if count 0 then V(wait);V(entry);理发室理发室椅子椅子入口入口出口出口等候室等候室barberbarber信号量队列信号量队列waitwait信号量队列信号量队列entryentry信号量队列信号量队列理发师理发师P P(barberbarber)PPPP(e
15、ntryentry)P P(entryentry)count=0=1v v(entryentry)唤唤醒醒count=1v v(entryentry)Count=2P P(waitwait)V V(barberbarber)理发师barber信号量队列wait信号量队列entry信号量队列P(entry)count=5V(entry)P(entry)count=5count=4V(entry)V(wait)V(barber)信号量机制的主要数据结构SCB1SCB2信号量控制信号量控制块块count信号量名字或信号量名字或IDTask1Task2任任务务等待列表等待列表信号量机制的主要数据结构信
16、号量控制块:管理所有创建的信号量,内核在系统运行时动态分配和回收信号量控制块互斥和二值信号量控制块结构:Binary_Semaphore_Control_Blockwait_queue任务等待队列任务等待队列attributes信号量属性信号量属性lock_nesting_behavior 试图嵌套获得时的规则试图嵌套获得时的规则 wait_discipline 任务等待信号量的方式任务等待信号量的方式priority_ceiling 优先级天花板值优先级天花板值lock是否被占有是否被占有holder拥有者拥有者 nest_count嵌套层数嵌套层数计数信号量控制结构Counting_Sem
17、aphore_Control_Block wait_queue任务等待队列任务等待队列 attributes计数信号量属性计数信号量属性 maximum_count 最大计数值最大计数值 wait_discipline任务等待信号量的方式任务等待信号量的方式 count当前计数值当前计数值信号量机制的主要数据结构典型的信号量操作创建信号量获取(申请)信号量释放信号量删除信号量清除信号量的任务等待列表 获取有关信号量的各种信息 创建信号量功能:根据应用传递的参数创建一个信号量参数:信号量的名字、属性和初始值等。内核动作:从空闲信号量控制块链中分配一个信号量控制块,并初始化信号量属性。创建成功时,
18、为其分配唯一的ID号返回给应用。如果已创建信号量数量已达到用户配置的最大数量,就返回错误。信号量的属性信信号号量量的的属属性性信号量的类型互斥信号量(互斥信号量(MUTEX_SEMAPHORE)计数信号量(计数信号量(COUNTING_SEMAPHORE)二值信号量(二值信号量(BINARY_SEMAPHORE)任务等待信号量的方式先进先出(先进先出(FIFO)顺序)顺序优先级(优先级(PRIORITY)顺序)顺序优先级反转问题的解决方法(只适用于互斥信号量)优先级继承算法(优先级继承算法(INHERIT_PRIORITY)优先级天花板算法优先级天花板算法(PRIORITY_CEILING),
19、需,需给出所有可能获得此信号量的任务中优先级最给出所有可能获得此信号量的任务中优先级最高的任务的优先级。高的任务的优先级。获取(申请)信号量功能:试图获得应用指定的信号量。该功能流程如下:if 信号量的值大于0then 将信号量的值减1else 根据接收信号量的选项,将任务放到等待 队列中,或是直接返回获取(申请)信号量当所申请的信号量不能被立即获得时,可以有以下几种选择:永远等待 不等待,立即返回,并返回一个错误状态码指定等待时限(可有效避免死锁)注意:不允许在ISR中选择等待当任务选择等待时,将被按FIFO或优先级顺序放置在等待队列中释放信号量功能:释放一个应用指定的信号量。if 没有任务
20、等待这个信号量then 信号量的值加1 else 将信号量分配给一个等待任务(将相应的任务 移出等待队列,使其就绪)如果使用了优先级继承或优先级天花板算法,那么执行该功能(系统调用)的任务的优先级将恢复到原来的高度。删除信号量功能:从系统中删除应用指定的一个信号量内核动作:将信号量控制块返还给系统删除信号量的不一定是创建信号量的任务如果有任务正在等待获得该信号量,执行此功能将使所有等待这个信号量的任务回到就绪队列中,且返回一个状态码指示该信号量已被删除清除信号量的任务等待列表为了清除等待一个信号量的所有任务,某些内核支持Flush操作,以便释放信号量等待任务列表中的所有任务。当多个任务的执行必
21、须在某些点相遇时,需要这样的机制。SignalTaskTask2 二值信号量二值信号量初值为初值为0FlushTask1Task3第二节邮箱和消息队列通信方式概述通信方式概述消息队列机制的主要数据结构消息队列机制的主要数据结构典型的消息队列操作典型的消息队列操作任务间的通信方式消息:内存空间中一段长度可变的缓冲区,其长度和内容均可以由用户定义,其内容可以是实际的数据、数据块的指针或空。为了能高效率地实现进程通信,操作系统设计了多种高级通信原语send(A)原语和receive(A)原语消息send(A)(读取消息)原语send(A)原语用来发送消息,A是发送进程提供的发送区起始地址send(A
22、)原语先申请一个消息缓冲区,然后把发送区的内容复制到消息缓冲区中。然后找到接收进程的PCB,把消息缓冲区连入接收进程的消息缓冲区队列中代码消息procedure send(A);bengin new(p);p.sptr=address of sends PCB;mov message to buffer p;find the receives PCB;p(mutex);add the buffer p to the massage queue;v(sm);v(mutex);end;消息receive(A)(读取消息)原语receive(A)原语用来读取消息,A是接收进程提供的接收区起始地址re
23、ceive(A)原语把消息缓冲区中的消息内容、消息长度以及发送进程的名字读取到接收区,然后把消息缓冲区从链表中去掉,并释放消息缓冲区如果没有消息可读取,则阻塞接收进程,直至消息发送来为止消息procedure receive(A)bengin P(Sm);p(mutex);move out a buffer F from the message queue of the Receive;v(mutex);move senders name and text from buffer F to receiber;end;进程进程p psend发送区(消息)进程进程q qreceive接受区接受区(
24、消息)(消息)hptrmutexsmP PC CB Bsptrnptrtextsptrnulltextaddpnulltextpaddpnulltextpnptr消息消息通信的分类:直接通信方式 发送进程直接把消息发送到目标进程Send(P,message)发送一个消息到任务PReceive(Q,message)从任务Q接收一个消息 间接通信方式,也叫信箱通信方式 进程间的通信需要通过作为某种共享数据结构的实体信箱。send(A,message)发送一个消息给邮箱Areceive(A,message)从邮箱A接收一个消息消息、消息队列、邮箱消息、消息队列、邮箱内核一般提供以下邮箱服务:消息邮箱
25、与信号量最大的区别:消息邮箱可以存放一条完整的内容信息,而用信号量进行行为同步时,只能提供同步时刻的信息,不能提供内容信息。如果邮箱内有消息,则任务将消息从邮箱中取走;如果邮箱内没有消息,则内核不将该任务挂起(ACCEPT),返回空指针。内核内核 POST内容初始化PENDACCEPT邮箱内消息的内容初始化,此时邮箱内是否有消息并不重要;等待有消息进入邮箱(PEND);将消息放入邮箱(POST);消息邮箱消息邮箱消息邮箱消息邮箱满满消息指针消息指针消息指针消息指针PCPCPCPC空空 一般来说,消息邮箱只有2种状态:即空状态(消息邮箱中没有消息)、满状态(消息邮箱中存放了消息)。消息邮箱的状态
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 实时 操作系统 同步 通信 PPT 课件
限制150内