文档详情

操作系统四版课件6分析.ppt

发布:2017-01-06约1.69万字共34页下载文档
文本预览下载声明
这里,存在着两个同步问题要解决:一是GET要与COPY取得同步,一是COPY要与GET取得同步。 试用信号量上的P、V操作,来保证如图所示的GET和COPY两者之间协调地工作。 例: 从文件F取出一个记 录送至输入缓冲区R V(s1) P(s2) P(s1) 将输入缓冲区R里的记录 拷贝到输出缓冲区T里 V(s2) GET COPY 1. 1. 2. 2. 3. 3. Vs1=0 Vs2=0 (信号量初值) 解: (1) (2) COPY中,它要等GET发来“可以拷贝”的消息后,才能进行拷贝。因此COPY中标有“1”的框是一个同步点,它要在此与GET取得同步。GET里,标有“1”的框是为COPY准备同步条件的地方;COPY中,标有“2”的框是为GET准备同步条件的地方。 在GET,它从F中取出一个记录送至R后,要等COPY把R中的记录取走、发来“拷贝结束”的消息后,才能继续运行。这就是说,在GET中,标有“3”的框是同步点,它在此与COPY取得同步。 (3) (4) 既然有两个同步问题,就要设两个不同的信号量来解决。两个信号量分别为S1和S2,初值都为0(因为是用来解决同步问题),用S1处理COPY 与GET取得同步的问题,用S2处理GET与COPY取得同步的问题。 (5) 在用信号量解决同步问题时,要注意P、V操作的安放和配对问题。由于是用信号量S1用来管理COPY与GET取得同步的问题,对S1的P操作应该出现在COPY中,V操作应该出现在GET中;由于是将信号量S2用来管理GET与COPY取得同步的问题,对S2的P操作应该出现在GET里,V操作应该出现在COPY中。 6.2.4 用P、V操作实现资源分配 1. 信号量的物理意义 把信号量S的初值n视为某资源个数,那么进程在S上做一次P操作后,若Vs=0,则表示可给该进程分一个资源;若Vs0,表示现在已没有资源可分配,进程只能阻塞,到队列Vq上去等待,这时Vs的绝对值恰是提出资源请求、但没有分配到资源的进程个数。某进程在S上做一次V操作后,若Vs=0,表示原资源等待队列上有进程等待该资源,故从队列Vq上摘下一个进程,到就绪队列排队;若V操作后Vs0,表示原资源等待队列上没有进程等待,只是收回了一个资源。 2. 简单的“生产者-消费者”问题 生产者: 生产一个产品 P(M) (申请一个缓冲区) 按in指点将物品存入缓冲区 in=(in+1) mod 10 (调整存入指针in) V(N) (向消费者发消息, 缓冲区里已有物品) 消费者: 消费物品 P(N) (等待生产者发来消息) 按out指点从缓冲区取出物品 out=(out+1) mod 10 (调整取出指针out) V(N) (向生产者发消 息,已有空缓冲区) Vm=10 Vn=0 (M,N初值) 若有一个生产者和一个消费者,他们共享10个缓冲区。生产者不断地生产物品,并依次放入缓冲区中。消费者依次从缓冲区里取出物品进行消费。只有在缓冲区有空位时,生产者生产出来的物品才能往里存放;只有在缓冲区有物品时,消费者才能从里面取出物品消费。试用 P、V 操作来协调生产者和消费者间的工作。 设置4个信号量:m为空闲缓冲区的数目;n为已放物品缓冲区的数目;S1控制互斥进入in临界区;S2控制互斥进入out临界区。 6.2.5 互斥/同步样例分析 1. “生产者-消费者”问题 若有 i 个生产者和j 个消费者,共享 k个缓冲区。生产者不断生产物品,并依次放入缓冲区中。消费者依次从缓冲区里取出物品进行消费。只有在缓冲区里有空位时,生产者生产出来的物品才能往里面放;只有在缓冲区里有物品时,消费者才能从里面取出物品进行消费。试用P、V操作协调生产者和消费者之间的工作。 生产者: 生产一个产品 P(M) (申请一个缓冲区) 按in指点将物品存入缓冲区 in=(in+1) mod k (调整存入指针in) V(N) (向消费者发消息, 缓冲区里已有物品) 消费者: 消费物品 P(N) (等待生产者发来消息) 按out指点从缓冲区取出物品 out=(out+1) mod k (调整取出指针out) V(N) (向生产者发消 息,已有空缓冲区) Vm=k,Vn=0 Vs1=1,Vs2=1 (信号量初值) P(S1) (要求进入in 临界区) V(S1) (退出in 临界区) P(S2) (要求进入out 临界区) V(S2) (退出out 临界区) . . 设置两个信号量:MUTEX控制读者
显示全部
相似文档