实时操作系统同步、互斥与通信

上传人:宝路 文档编号:46515418 上传时间:2018-06-27 格式:PPT 页数:134 大小:3.63MB
返回 下载 相关 举报
实时操作系统同步、互斥与通信_第1页
第1页 / 共134页
实时操作系统同步、互斥与通信_第2页
第2页 / 共134页
实时操作系统同步、互斥与通信_第3页
第3页 / 共134页
实时操作系统同步、互斥与通信_第4页
第4页 / 共134页
实时操作系统同步、互斥与通信_第5页
第5页 / 共134页
点击查看更多>>
资源描述

《实时操作系统同步、互斥与通信》由会员分享,可在线阅读,更多相关《实时操作系统同步、互斥与通信(134页珍藏版)》请在金锄头文库上搜索。

1、嵌入式实时操作系统 及应用开发第六章 同步、互斥与通信主要内容概述 信号量 邮箱和消息队列 管道 事件并发的进程之间的协作包括如下类型:进程互斥多个进程不能同时使用同一个资源,某个进程使用该 资源时,其他进程必须等待。保证各个进程不同时进入临 界区,有效访问临界资源。进程同步多个进程的调用存在时序关系,某些进程的执行必须 先于另一些进程。保证进程运行的合理顺。进程通信多个进程之间传递消息。互斥和同步是进程并发的两个要素概述ISR xTask yPOSTPEND任务与任务与ISRISR 之间的同步之间的同步 (单向)(单向)Task xTask yPOSTPENDPOSTPEND任务与任务任务与

2、任务 之间的同步之间的同步 (双向)(双向)任务与任务任务与任务 之间的同步之间的同步 (单向)(单向)Task xTask yPOSTPEND概述进程互斥与同步考虑下面一个字符回显的的过程void echo() chin = getchar() ;chout = chin;putchar(chout) ; 从键盘获得输入,每击一下键,输入字符就保存在变量chin 中,然后传送给变量chout,并回送显示器 任何程序可以重复地调用此过程,接收用户输入,并在用户的 屏幕上显示考虑一个支持单用户单处理器、多道程序设计系统将其当作一个共享过程,载入到所有应用程序公用的全局存储区中。这样每个应用程序都

3、能使用这个过程,由于每个应用程序只需使用echo过程的一个副本,从而节省空间 进程间共享主存是非常有用的,它允许进程间有效而紧密的交互,有利于进程的相互通信。但是,共享也可能会带来一些问题void echo()void echo() chin = getchar() ; chin = getchar() ;chout = chin; chout = chin;putchar(chout) ; putchar(chout) ; 进程互斥与同步getchargetchar()()chinchinchoutchoutputcharputchar()()P1P2getchargetchar()()XX

4、getchargetchar()()YYYputcharputchar()()Y YYY Y?echoechovoid echo()void echo() chin = getchar() ; chin = getchar() ;chout = chin; chout = chin;putchar(chout) ; putchar(chout) ; P1void echo()void echo() chin = getchar() ; chin = getchar() ;chout = chin; chout = chin;putchar(chout) ; putchar(chout) ; 调

5、用调用echoecho超时,就绪超时,就绪P2调用调用echoecho资源资源 正忙正忙阻塞状态阻塞状态调度运行调度运行释放释放echoecho唤 醒获取资源获取资源 就绪状态就绪状态调度运行调度运行在单处理器平台上,嵌入式操作系统内核提供的 同步、互斥与通信机制主要包括:信号量(semaphore),用于互斥与同步事件(组)(event group),用于同步异步信号(asynchronous signal),用于 同步邮箱(mailbox)、消息队列(message queue),用于消息通信管道(pipe),提供非结构化数据交换和实 现同步 概述忙等待模型持续检查一个变量,直到它可用为止

6、睡眠-唤醒模型通过PV原语操作保证进程间的互斥消息传递模型通过消息传送系统实现多进程之间的互斥进程互斥和同步的经典解决机制第一节信号量信号量的种类及用途 信号量的定义 互斥信号量 二值信号量 计数信号量 信号量机制的主要数据结构 典型的信号量操作临界资源和临界区操作系统把一次仅允许一个进程使用的资源称为临界资源。一个进程中访问临界资源的那段程序称为临界区。进程P1和P2共享同一打印机资源,其操作流程如下:p1: entry code使用打印机exit codep2: entry code使用打印机exit code 系统打印机即为临界资源 P1和p2的访问临界资源打印机的代码即为临界区临界资源

7、和临界区临界区临界资源进程P1 进程P2 R1 count; R2 = count;R1+; R2+;count = R1; count = R2; (设count的初始值为5) 为互斥地使用临界资源,需保证进程互斥地进 入临界区。临界资源和临界区临界区的进入准则空闲让进:临界资源空闲时,允许进程进入临界区忙着等待:临界资源正在被访问时,其他需要进入临界区的进程必须等待有限等待:保证进程在有效的时间内进入临界区,避免“死等”让权等待:当进程不能进入临界区时,应立即释放处理机,以免其它进程“忙等”临界资源和临界区进程互斥进入临界区的实现方法硬件方法 禁止中断在进程进入临界区之后,禁止该进程中断

8、专用机器指令TS指令,Swap指令软件方法 信号量和PV操作临界资源和临界区信号量是一个数据结构,其定义如下:struct semaphoreint value;struct PCB * queue;信号量semaphore包括一个整型值和一个等 待队列。信号量只能通过P原语和V原语访问。什么是信号量什么是信号量信号量被定义为一个整形变量,在其上定义 了以下三个操作: 1、可以被初始化一个非负数 2、wait操作(P操作)将信号量的值减1后, 若该值为负,则执行wait操作的任务等待 3、signal操作(V操作)将信号量的值增1后 ,若该值为非正,则执行signal操作的任务 唤醒 P 原语

9、 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 = 1)value = value 1;count = value;/打印一张机票;else/显示机票已售完;V(mutex);临 界 区信号量实现进程互斥用信号量实现任务间的互斥var mutex:Shared Semaphore; begin mutex:=1; parbeginP1:P2:Pi:r

10、epeatWait(mutex);“进程Pi的临界代码段”;Signal(mutex);foreverPn: parendendTask1Task2共享资源互斥信号量 WaitB(S): /申请信号量 if S.value1; /当前没有其他任务使用信号量then S.value=S.value-1=0/将信号量值修改为0,独占共享资源 else begin Insert(CALLER,S.L); /如果当前有其他任务使用信号量,将该任务放入等待队列Block(CALLER); /修改该任务的状态为等待态(阻塞任务)end SignalB(S): /释放信号量 if S.L queue is

11、empty; /如果等待序列为空,没有其他任务等待使用该共享资源thenS.value=1; /释放信号量 else begin Remove(S.L,id); /如果有其他任务等待使用该共享资源,则从等待队列中将该任务移除wakeup(id); /将该任务的状态改为就绪态(唤醒任务) end互斥信号量状态图互斥信号量状态图开启锁定初始化 值为1申请并获得 值为0释放 值为1申请(递归)并获得 锁定数加1释放(递归) 锁定数减1各种互斥机制比较比较项目关中断使用测试并置 位指令禁止任务 切换使用信号量锁定范围互斥力度最强,锁 定所有外部可屏蔽 中断,凡是以中断 形式到达的外部事 件以及与之相关

12、联 的任务或处理过程 均得不到执行凡是使用该指 令访问共享资 源的代码所有的任务只影响竞争共 享资源的任务对系统响应时 间的影响如果关中断的时间 较长,对系统的响 应性能有很大影响较小如果禁止切换的时 间过长,则影响系 统的响应性能对系统响应性能有 一定影响,可能导 致优先级反转实现时的系统 开销小小小较大注意事项关中断时间要 尽量短不是所有的处理器 都具备这种指令, 影响可移植性关调度的时间 要尽量短需采用一定的 策略解决优先 级反转问题二值信号量可获得不可获得申请并获得 (值为0)释放 (值为1)初始化 值为0二值信号量状态图例如:有两个程序段S1和S2,要求S1先于S2执 行。semap

13、hore mutex = 0; P1进程:S1;V(mutex);/唤醒进程P2;P2进程:P(mutex);/等待P1执行;S2;二值信号量实现同步 Task1() 执行一些操作;将信号量sem1置1;申请信号量sem2; Task2() 申请信号量sem1;执行一些操作;将信号量sem2置1;Task2申请信号量 sem1失败,系统 切换到Task1sem1被置1后, Task2得到sem1并 抢占Task1Task2运行到某处时因某种 原因被阻塞,系统切换到 Task1用二值信号量实现两个任务之间的双向同步用二值信号量实现两个任务之间的双向同步 Task2Task2优先级高于优先级高于T

14、ask1Task1 sem1sem1和和sem2sem2的初始值均为的初始值均为0 0二值信号量实现同步 计数信号量Task1Task2共享资源实例nTask m共享资源实例1计数信号量计数信号量状态图可获获得不可获获得初始化 值值大于0申请请并获获得 值为值为 0释释放 值为值为 1申请请并获获得 值值减1释释放 值值加1计数(一般)信号量同步原语Wait(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(entryentry)P P(entryentry)countcount=0=0=1=1v v(entryentry)唤唤 醒醒count=1count=1v v(entryentry)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号