欢迎来到天天文库
浏览记录
ID:52100961
大小:364.00 KB
页数:50页
时间:2020-03-31
《《经典IPC问题》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2.3.4信号量(Semaphore)1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前可用资源的数量。有两种实现方式:1)semaphore的取值必须大于或等于0。0表示当前已没有空闲资源,而正数表示当前空闲资源的数量;2)semaphore的取值可正可负,负数的绝对值表示正在等待进入临界区的进程个数。信号量是由操作系统来维护的,用户进程只能通过初始化和两个标准原语(P、V原语)来访问。初始化可指定一个非负整数,即空闲资源总数。P、
2、V原语作为操作系统内核代码的一部分,是一种不可分割的原子操作(atomicaction),在其运行时,不会被时钟中断所打断;P、V原语包含有进程的阻塞和唤醒机制,因此在进程等待进入临界区时不会浪费CPU时间;P原语:P是荷兰语Proberen(测试)的首字母。申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞;V原语:V是荷兰语Verhogen(增加)的首字母。释放一个被占用的资源(把信号量加1),如果发现有被阻塞的进程,则选择一个唤醒之。信号量和P、V原语的实现信号量结构体类型的
3、定义typedefstruct{intcount;//计数变量structPCB*queue;//进程等待队列}semaphore;P原语:申请一个资源P(semaphoreS){--S.count;//表示申请一个资源;if(S.count<0)//表示没有空闲资源;{该进程进入等待队列S.queue末尾;阻塞该进程;调用进程调度器;}}V原语:释放一个资源V(semaphoreS){++S.count;//表示释放一个资源;if(S.count<=0)//表示有进程被阻塞;{从等待队列S.queue中取出
4、一个进程;把该进程改为就绪状态,插入就绪队列}}Windows2000CreateSemaphore(创建信号量)WaitForSingleObject(P操作)ReleaseSemaphore(V操作)COS-IIosSemCreate(创建信号量)osSemPend(P操作)osSemPost(V操作)利用信号量来实现进程互斥intcount;//共享变量(临界资源)semaphoremutex;//互斥信号量,初始化为??非临界区P(mutex);临界区V(mutex);非临界区P1非临界区P(mutex)
5、;临界区V(mutex);非临界区P2非临界区P(mutex);临界区V(mutex);非临界区P32.3.5进程的同步进程间的同步是指多个进程中发生的事件存在某种时序关系,因此在各个进程之间必须协同合作,相互配合,使各个进程按一定的速度执行,以共同完成某一项任务。同步:合作。互斥:竞争。只考虑基于信号量的同步问题。如何实现A先执行,然后B执行?A;V(S);进程P1P(S);B;进程P2配对先后S初始值为0….A(先);….进程P1信号量S初始值为??….B(后);….进程P2while(1){….A;V(S);
6、….}进程P1S初始值为1while(1){….P(S);B;….}进程P2【例子1】合作进程的执行次序用进程流图来描述各进程合作完成某一任务的次序,其规则如下:用信号量及P、V操作来描述左图1、说明进程的同步关系进程P1、P2可并行执行,P3的执行必须等待P1、P2都完成后才能开始执行。几个同步关系?2、设置信号量,说明含义、初值。S13=0表示进程P1尚未执行完成;S23=0表示进程P2尚未执行完成;main(){//均初始化为0semaphoreS13,S23;cobeginP1;P2;P3;coend}3.写
7、出程序描述P1()//进程P1{…V(S13);}P2()//进程P2{…V(S23);}P3()//进程P3{P(S13);P(S23);…}【例子2】司机与售票员while(上班时间){发动汽车;正常运行;到站停车;}while(上班时间){关闭车门;售票;打开车门;}公车司机售票员1、说明进程的同步关系只有关闭车门以后,才能启动汽车;只有停车以后,才能打开车门。while(上班时间){P(S_DoorClose);发动汽车;正常运行;到站停车;V(S_Stop);}公车司机while(上班时间){关闭车门;V
8、(S_DoorClose);售票;P(S_Stop);打开车门;}售票员semaphoreS_DoorClose;//初始为0semaphoreS_Stop;//初始为0先关门后开车先停车后开门2、设置信号量,说明含义、初值。3.写出程序描述【例子3】共享缓冲区的合作进程的同步设有一个缓冲区buffer,大小为一个字节。Compute进程不
此文档下载收益归作者所有