实时操作系统同步互斥与通信.pptx
《实时操作系统同步互斥与通信.pptx》由会员分享,可在线阅读,更多相关《实时操作系统同步互斥与通信.pptx(134页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实时操作系统同步互斥与通信实时操作系统同步互斥与通信 并发的进程之间的协作包括如下类型:进程互斥进程互斥 多个进程不能同时使用同一个资源,某个进程使用多个进程不能同时使用同一个资源,某个进程使用该资源时,其他进程必须等待。保证各个进程不同时进该资源时,其他进程必须等待。保证各个进程不同时进入临界区,有效访问临界资源。入临界区,有效访问临界资源。进程同步进程同步 多个进程的调用存在时序关系,多个进程的调用存在时序关系,某些进程的执行必须先于另一些某些进程的执行必须先于另一些进程。保证进程运行的合理顺。进程。保证进程运行的合理顺。进程通信进程通信 多个进程之间传递消息。多个进程之间传递消息。互斥和
2、同步是进程并发的两个要素概述第1页/共133页ISR xTask yPOSTPEND任务与任务与任务与任务与ISRISR之间的同之间的同之间的同之间的同步(单向)步(单向)步(单向)步(单向)Task xTask yPOSTPENDPOSTPEND任务与任务任务与任务任务与任务任务与任务之间的同步之间的同步之间的同步之间的同步(双向)(双向)(双向)(双向)任务与任务任务与任务任务与任务任务与任务之间的同步之间的同步之间的同步之间的同步(单向)(单向)(单向)(单向)Task xTask yPOSTPEND概述第2页/共133页进程互斥与同步考虑下面一个字符回显的的过程考虑下面一个字符回显的的
3、过程考虑下面一个字符回显的的过程考虑下面一个字符回显的的过程 void echo()void echo()chin=getchar();chin=getchar();chout=chin;chout=chin;putchar(chout);putchar(chout);从键盘获得输入,每击一下键,输入字符就保存在变量从键盘获得输入,每击一下键,输入字符就保存在变量从键盘获得输入,每击一下键,输入字符就保存在变量从键盘获得输入,每击一下键,输入字符就保存在变量chinchin中,然后传送给变量中,然后传送给变量中,然后传送给变量中,然后传送给变量choutchout,并回送显示器,并回送显示器,
4、并回送显示器,并回送显示器任何程序可以重复地调用此过程,接收用户输入,并在用户任何程序可以重复地调用此过程,接收用户输入,并在用户任何程序可以重复地调用此过程,接收用户输入,并在用户任何程序可以重复地调用此过程,接收用户输入,并在用户的屏幕上显示的屏幕上显示的屏幕上显示的屏幕上显示第3页/共133页考虑一个支持单用户单处理器、考虑一个支持单用户单处理器、多道程序设计系统多道程序设计系统l l将其当作一个共享过程,载入到所将其当作一个共享过程,载入到所将其当作一个共享过程,载入到所将其当作一个共享过程,载入到所有应用程序公用的全局存储区中。有应用程序公用的全局存储区中。有应用程序公用的全局存储区
5、中。有应用程序公用的全局存储区中。这样每个应用程序都能使用这个过这样每个应用程序都能使用这个过这样每个应用程序都能使用这个过这样每个应用程序都能使用这个过程,由于每个应用程序只需使用程,由于每个应用程序只需使用程,由于每个应用程序只需使用程,由于每个应用程序只需使用echoechoechoecho过程的一个副本,从而节省空过程的一个副本,从而节省空过程的一个副本,从而节省空过程的一个副本,从而节省空间间间间进程间共享主存是非常有用的,它允许进程间有效而紧进程间共享主存是非常有用的,它允许进程间有效而紧进程间共享主存是非常有用的,它允许进程间有效而紧进程间共享主存是非常有用的,它允许进程间有效而
6、紧密的交互,有利于进程的相互通信。但是,共享也可能密的交互,有利于进程的相互通信。但是,共享也可能密的交互,有利于进程的相互通信。但是,共享也可能密的交互,有利于进程的相互通信。但是,共享也可能会带来一些问题会带来一些问题会带来一些问题会带来一些问题 void echo()void echo()chin=getchar();chin=getchar();chout=chin;chout=chin;putchar(chout);putchar(chout);进程互斥与同步第4页/共133页 getchargetchar()()()()chinchinchoutchout putcharputch
7、ar()()()()P1P2getchargetchar()()XXgetchargetchar()()YYYputcharputchar()()Y YYY Y?echoecho void echo()void echo()chin=getchar();chin=getchar();chout=chin;chout=chin;putchar(chout);putchar(chout);第5页/共133页P1 void echo()void echo()chin=getchar();chin=getchar();chout=chin;chout=chin;putchar(chout);putch
8、ar(chout);调用调用echoecho超时,就绪超时,就绪P2调用调用echoecho资源资源正忙正忙阻塞状态阻塞状态调度运行调度运行释放释放echoecho唤 醒获取资源获取资源就绪状态就绪状态调度运行调度运行第6页/共133页在单处理器平台上,嵌入式操作系统内核提供的同步、互斥与通信机制主要包括:l l信号量信号量(semaphoresemaphore),用于互斥与同步),用于互斥与同步l l事件(组)事件(组)(event groupevent group),用于同步),用于同步l l异步信号异步信号(asynchronous signalasynchronous signal),
9、用于同),用于同步步l l邮箱邮箱(mailboxmailbox)、)、消息队列消息队列(message message queuequeue),用于消息通信),用于消息通信l l管道管道(pipepipe),提供非结构化数据交换和实),提供非结构化数据交换和实现同步现同步 概述第7页/共133页l l忙等待模型忙等待模型 持续检查一个变量,直到它可用为止持续检查一个变量,直到它可用为止l l睡眠睡眠-唤醒模型唤醒模型 通过通过PVPV原语操作保证进程间的互斥原语操作保证进程间的互斥l l消息传递模型消息传递模型 通过消息传送系统实现多进程之间的互斥通过消息传送系统实现多进程之间的互斥进程互斥
10、和同步的经典解决机制第8页/共133页第一节第一节信号量信号量信号量的种类及用途信号量的种类及用途信号量的定义信号量的定义互斥信号量互斥信号量二值信号量二值信号量计数信号量计数信号量信号量机制的主要数据结构信号量机制的主要数据结构典型的信号量操作典型的信号量操作第9页/共133页临界资源和临界区操作系统把一次仅允许一个进程使用的资源操作系统把一次仅允许一个进程使用的资源称为临界资源。称为临界资源。一个进程中访问临界资源的那段程序称为临一个进程中访问临界资源的那段程序称为临界区。界区。第10页/共133页进程进程P1和和P2共享同一打印机资共享同一打印机资源,其操作流程如下:源,其操作流程如下:
11、p1:entry codep1:entry code使用打印使用打印机机exit codeexit code p2:entry code p2:entry code使用打印使用打印机机exit codeexit code系统打印机即为系统打印机即为临界资源临界资源P1和和p2的访问临界资源打印机的访问临界资源打印机的代码即为的代码即为临界区临界区临界资源和临界区第11页/共133页临界区临界资源 进程进程P1 P1 进程进程P2P2 R1 R1 countcount;R2=;R2=countcount;R1+;R2+;R1+;R2+;count=R1;count=R2;count=R1;cou
12、nt=R2;(设count的初始值为5)为互斥地使用临界资源,需保证进程互斥地进入临界区。临界资源和临界区第12页/共133页临界区的进入准则l l空闲让进空闲让进:临界资源空闲时,允:临界资源空闲时,允许进程进入临界区许进程进入临界区l l忙着等待忙着等待:临界资源正在被访问:临界资源正在被访问时,其他需要进入临界区的进程时,其他需要进入临界区的进程必须等待必须等待l l有限等待有限等待:保证进程在有效的时:保证进程在有效的时间内进入临界区,避免间内进入临界区,避免“死等死等”l l让权等待让权等待:当进程不能进入临界:当进程不能进入临界区时,应立即释放处理机,以免区时,应立即释放处理机,以
13、免其它进程其它进程“忙等忙等”临界资源和临界区第13页/共133页进程互斥进入临界区的实现方法l l硬件方法硬件方法 禁止中断禁止中断l l在进程进入临界区之后,禁止该进程在进程进入临界区之后,禁止该进程中断中断 专用机器指令专用机器指令l lTSTS指令,指令,SwapSwap指令指令l l软件方法软件方法 信号量和信号量和PVPV操作操作临界资源和临界区第14页/共133页信号量是一个数据结构,其定义如下:struct semaphore int value;struct PCB *queue;信号量semaphore包括一个整型值和一个等待队列。信号量只能通过P原语和V原语访问。什么是信
14、号量第15页/共133页什么是信号量信号量被定义为一个整形变量,在其上定义了以下三个操作:信号量被定义为一个整形变量,在其上定义了以下三个操作:1 1、可以被初始化一个非负数、可以被初始化一个非负数2 2、waitwait操作(操作(P P操作操作)将信号量的值减)将信号量的值减1 1后,若该值为负,后,若该值为负,则执行则执行waitwait操作的任务等待操作的任务等待3 3、signalsignal操作(操作(V V操作操作)将信号量的值增)将信号量的值增1 1后,若该值为非正,后,若该值为非正,则执行则执行signalsignal操作的任务唤醒操作的任务唤醒 第16页/共133页P 原语
15、 P(S)S:=S-1S:=S-1;如果如果 S =0S =0,则表示有资源,该进程继续执则表示有资源,该进程继续执行;行;如果如果 S 0S 0S=S-1返回返回调用进程进入等待队列调用进程进入等待队列转进程调度转进程调度是否第18页/共133页P原语操作原型 void wait(semaphore s)/s.value=s.value 1;if(s.value 0S 0,则该进程继续执行,则该进程继续执行 如果如果 S S 0 0,说明有进程被挂起,则唤醒一阻塞,说明有进程被挂起,则唤醒一阻塞进程,即从进程,即从S S信号量的等待队列首摘下一个信号量的等待队列首摘下一个PCBPCB,将其置
16、为就绪状态,执行,将其置为就绪状态,执行 V(S)V(S)者继续执行者继续执行6 6P P操作可能会引起进程的阻塞,操作可能会引起进程的阻塞,V V操作不会引起本操作不会引起本身进程状态的变化,但可能唤醒其他进程,使其身进程状态的变化,但可能唤醒其他进程,使其从阻塞状态转变到就绪状态从阻塞状态转变到就绪状态V原语第20页/共133页V原语(1)若信号量S的等待队列中有等待进程,则取队首进程,将其置为就绪状态并返回。(2)否则信号量S加1,并放回V原语原语是否有等待进程是否有等待进程S=S+1返回返回取队首进程置为就绪态取队首进程置为就绪态否是第21页/共133页V原语操作原型 void sig
17、nal(semaphore s)s.value=s.value+1;if(s.value=1)if(value=1)value=value 1;value=value 1;count=value;count=value;/打印一张机票;打印一张机票;else else /显示机票已售完显示机票已售完;V(mutex);V(mutex);临界区信号量实现进程互斥第33页/共133页用信号量实现任务间的互斥var mutex:Shared Semaphore;var mutex:Shared Semaphore;begin begin mutex:=1;mutex:=1;parbeginparbe
18、gin P1:P1:P2:P2:Pi:repeat Pi:repeat Wait(mutex);Wait(mutex);“进进程程PiPi的的临临界代界代码码段段”;Signal(mutex);Signal(mutex);forever forever Pn:Pn:parendparend end endTask1Task2共享资源共享资源第34页/共133页互斥信号量 WaitB(S):WaitB(S):/申请信号量申请信号量申请信号量申请信号量if S.value1;/if S.value1;/当前没有其他任务使用信号量当前没有其他任务使用信号量当前没有其他任务使用信号量当前没有其他任务使
19、用信号量 then then S.value=S.value-1=0/S.value=S.value-1=0/将信号量值修改为将信号量值修改为将信号量值修改为将信号量值修改为0 0,独占共享资源,独占共享资源,独占共享资源,独占共享资源else begin else begin Insert(CALLER,S.L);/Insert(CALLER,S.L);/如果当前有其他任务使用信号量,将该任务放入等待如果当前有其他任务使用信号量,将该任务放入等待如果当前有其他任务使用信号量,将该任务放入等待如果当前有其他任务使用信号量,将该任务放入等待 队列队列队列队列 Block(CALLER);/Blo
20、ck(CALLER);/修改该任务的状态为等待态(阻塞任务)修改该任务的状态为等待态(阻塞任务)修改该任务的状态为等待态(阻塞任务)修改该任务的状态为等待态(阻塞任务)endendSignalB(S):/SignalB(S):/释放信号量释放信号量释放信号量释放信号量if S.L queue is empty;/if S.L queue is empty;/如果等待序列为空,没有其他任务等待使用该共享资源如果等待序列为空,没有其他任务等待使用该共享资源如果等待序列为空,没有其他任务等待使用该共享资源如果等待序列为空,没有其他任务等待使用该共享资源 thenthen S.value=1;/S.v
21、alue=1;/释放信号量释放信号量释放信号量释放信号量else begin else begin Remove(S.L,id);/Remove(S.L,id);/如果有其他任务等待使用该共享资源,则从等待队列中如果有其他任务等待使用该共享资源,则从等待队列中如果有其他任务等待使用该共享资源,则从等待队列中如果有其他任务等待使用该共享资源,则从等待队列中 将该任务移除将该任务移除将该任务移除将该任务移除 wakeup(id);/wakeup(id);/将该任务的状态改为就绪态将该任务的状态改为就绪态将该任务的状态改为就绪态将该任务的状态改为就绪态(唤醒任务唤醒任务唤醒任务唤醒任务)endend
22、第35页/共133页互斥信号量状态图互斥信号量状态图互斥信号量状态图互斥信号量状态图开启开启锁定锁定初始化初始化值为值为1申请并获得申请并获得值为值为0释放释放值为值为1申请申请(递归递归)并获得并获得锁定数加锁定数加1释放释放(递归递归)锁定数减锁定数减1第36页/共133页各种互斥机制比较比较项目比较项目关中断关中断使用测试并置使用测试并置位指令位指令禁止任务禁止任务切换切换使用信号量使用信号量锁定范围锁定范围互互斥斥力力度度最最强强,锁定所有外部可屏蔽中断,凡是以中断形式到达的外部事件以及与之相关联的任务或处理过程均得不到执行凡是使用该指令访问共享资源的代码所有的任务只只影影响响竞竞争争
23、共共享资源的任务享资源的任务对系统响应时对系统响应时间的影响间的影响如果关中断的时间较长,对系统的响应性能有很大影响较小如果禁止切换的时间过长,则影响系统的响应性能对对系系统统响响应应性性能能有有一一定定影影响响,可可能能导导致致优优先先级级反反转转实现时的系统实现时的系统开销开销小小小较大较大注意事项注意事项关关中中断断时时间间要要尽量短尽量短不不是是所所有有的的处处理理器器都都具具备备这这种种指指令令,影影响响可可移移植植性性关关调调度度的的时时间间要尽量短要尽量短需需采采用用一一定定的的策策略略解解决决优优先先级反转问题级反转问题第37页/共133页二值信号量可获得可获得不可获得不可获得
24、申请并获得申请并获得(值为值为0)释放释放(值为值为1)初始化初始化值为值为0二值信号量状态图二值信号量状态图第38页/共133页例如:有两个程序段S1和S2,要求S1先于S2执行。semaphore mutex=0;P1进程:S1;V(mutex);/唤醒进程P2;P2进程:P(mutex);/等待P1执行;S2;二值信号量实现同步 第39页/共133页Task1()执行一些操作执行一些操作;将信号量将信号量sem1置置1;申请信号量申请信号量sem2;Task2()申请信号量申请信号量sem1;执行一些操作执行一些操作;将信号量将信号量sem2置置1;Task2申申请请信信号号量量sem1
25、失失败败,系系统统切换到切换到Task1sem1被被 置置 1后后,Task2得得 到到 sem1并并抢占抢占Task1Task2运运行行到到某某处处时时因因某某种种原原因因被被阻阻塞塞,系系统统切切换换到到Task1用二值信号量实现两个任务之间的双向同步用二值信号量实现两个任务之间的双向同步用二值信号量实现两个任务之间的双向同步用二值信号量实现两个任务之间的双向同步 Task2Task2优先级高于优先级高于优先级高于优先级高于Task1Task1 sem1sem1和和和和sem2sem2的初始值均为的初始值均为的初始值均为的初始值均为0 0二值信号量实现同步 第40页/共133页计数信号量T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实时 操作系统 同步 通信
限制150内