《嵌入式操作系统》进程管理-教学课件(非AI生成).ppt
邮箱通信算法描述:deposit(m)remove(m)beginlocalxbeginlocalxP(fromnum)P(mesnum)选择空格x选择满格x将消息m放入空格x把满格x中的消息取到m置格x的标志为满置格x的标志为空V(mesnum)V(fromnum)Endend*邮箱通信使用原语:①send(receiver,message):将信息message发给receiver;②receiver(send,message):接收由send发来的信息message;解决生产者—消费者的问题。RepeatRepeatProduceanitemnextpreceiver(Producer, nexts);Send(consumer,nextp);consumeanitemnextsUntilfalseUntilfalse***************************进程同步用P、V原语操作实现进程的直接制约(同步)例子:设进程和通过缓冲区队列传送数据(如图3.13),PA为发送进程,PB为接收进程;PA发送数据时调用发送过程deposit(data),PB接收数据时调用过程remove(data)。且数据的发送与接收过程满足如下条件:1)在PA至少送一块数据入一个缓冲区之前,PB不可能从缓冲区中取出数据(假定数据块长等于缓冲区长度)。*进程同步2)PA往缓冲队列发送数据时,至少有一个缓冲区是空的;3)由PA发送的数据块在缓冲队列中按先进先出(FIFO)方式排列。PABuff1buff2buff3….BuffnPB*进程同步 我们按如下三步描述过程deposit(data)和remove(data)1)设Buf-empty为进程PA的私用信号量,表示缓冲区是否有空;Buf-full为进程PB的私用信号量,表示缓冲区是否有数可取;2)Buf-empty的初始值为n(n为缓冲队列的缓冲区个数),Buf-full的初始值为0;*进程同步3)算法描述如下:PA:deposit(data)Beginlocalx;P(Buf-empty);按FIFO方式选择一个空缓冲区Buf(x);Buf(x)data;Buf(x)置满标记;V(Buf-full);End.*进程同步PB:remove(data)Beginlocalx;P(Buf-full);按FIFO方式选择一个装满数据的缓冲区Buf(x);dataBuf(x);Buf(x)置空标记;V(Buf-empty);End.*进程同步这里,局部变量x用来指明缓冲区的区号;给Buf(x)置标志位是为了便于区别和搜索空缓冲区与非空缓冲区。比较互斥与同步的两个例子:互斥同步①设置信号量S(公用)设置信号量S1,S2 (私用)②信号量初值S=1信号量初值 S1=n.,S2=0。*进程同步③算法描述:P1P1Beginbegin