《计算机操作系统操作系统 (19).pdf》由会员分享,可在线阅读,更多相关《计算机操作系统操作系统 (19).pdf(9页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第六章 进程同步信号量内容信号量概念整型信号量记录型信号量同步信号量和互斥信号量信号量使用2信号量(Semaphore)早期:硬件解决方法程序设计人员:太复杂信号量-软件解决方案保证两个或多个代码段不被并发调用在进入关键代码段前,进程必须获取一个信号量,否则不能运行执行完该关键代码段,必须释放信号量信号量有值,为正说明它空闲,为负说明其忙碌3迪科斯彻(1930-2002)艾兹格 W 迪科斯彻(Edsger WybeDijkstra)信号量信号量和PV原语原语发明者发明者第六章第六章解决了“哲学家就餐哲学家就餐”问题第六章第六章最短路径算法(SPF)和银行家算法银行家算法的创造者-第七章第七章结
2、构程序设计之父THE操作系统操作系统设计者和开发者第二章第二章与D.E.Knuth并称为这个时代最伟大的计算机科学家整型信号量信号量S 整型变量提供两个不可分割的原子操作原子操作访问信号量wait(S):while S 0 do no-op;S-;signal(S):S+;wait(S)又称为P(S)signal(S)又称为V(S)整型信号量的问题:忙等记录型信号量:去除忙等的信号量Wait(semaphore*S)S-value-;if(S-value list;block();Signal(semaphore*S)S-value+;if(S-value list;wakeup(P);记录型
3、信号量定义:记录型信号量定义:typedef struct int value;struct process*list;semaphore信号量类型计数信号量计数信号量变化范围:没有限制的整型值计数信号量=同步信号量二值信号量二值信号量变化范围仅限于0和1的信号量(整型信号量)二值信号量=互斥信号量信号量S的使用S必须置一次且只能置一次初值S初值不能为负数除了初始化,只能通过执行执行P P、V V操作来访问操作来访问S S互斥信号量使用Semaphore*S;/初始化为 1wait(S);CriticalSection()/临界区signal(S);同步信号量使用实现各种同步问题例子:P1和 P2需要 C1比C2先运行semaphore s=0 P1:C1;signal(s);P2:wait(s);C2;C1C2