版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
进程同进程同步的基本概 2.3进程同
VARtop:integer=-1stack:array[0..n-1]ofProgramAwhile(TRUEtop:=(top+1)mod stack[top]:=x endProgramBwhile(TRUEtop:=(top+1)mod stack[top]:=y endwhile 2.3进程同
VARtop:integer=-1ProgramAwhileProgramAwhile(TRUEtop:=(top+1)modstack[top]:=xend 如何实现临界资源的互
ProgramBwhile(TRUEtop:=(top+1)modstack[top]:=yendwhile201arend2.3进程同 临界资 互临界 互
VARtop:integer=-1stack:array[0..n-1]ofitem;ProgramA:while(TRUEtoptop:=(top+1)modn;stack[top]:=x;endwhileProgramB:while(TRUEtoptop:=(top+1)modn;stack[top]:=y;
end201arend2.3进程同criticalsectioncriticalsectionremaindersectionuntil
entrycriticalsection;exitsection;remaindersection;untilfalse空闲让进:当无进程处于临界区忙则等待:当已有进程进入临界有限等待:对要 临界资源进程,保证能在有限时间内进入临界让权等待:当进程不能进入临界区时,应释放处理机 2.3进程同
VARfree:boolean:=false实现进程同步的早期软件解法1资源空闲标志:free=false:Free=true:
Programwhile(while(free)free:=truefree:=falsefree:=falseuntilProgramwhile(while(free)free:=truefree:=falsefree:=false
remaindersectionuntilfalse82.3进程同
VARturn:integer:=12.3.2实现进程同步的早期
Programwhile(while(turn=2)turn:=2turn:=2remaindersectionuntil严格限制资 顺
Programwhile(while(turn=1)turn:=1turn:=1
remaindersectionuntilfalse92.3进程同
VARpturn,qturn:boolean:=false,false2.3.2实现进程同步的早期方Programpturn:=truepturn:=truewhile(qturn)
criticalsection;remaindersection;pturn:=falsepturn:=falseProgramqturnqturn:=truewhile(pturn)criticalsectionqturnqturn:=falseremaindersection;untilfalse
12.3进程同2.3.2实现进程同步的早期方#defineFALSE#define
Programenter_region(0enter_region(0criticalsection intint
进程的个 数组,初始值均为
remaindersectionuntilvoidenter_regionintprocessprocess0或{int //另外一个进程的进程other=1- interested[process]=TRUE表明本进程turn= 设置标志while(turn==process&&interested[other]==}voidleave_region(int{interested[process]= //本进程已离开
Programenter_region(1);criticalsection;remaindersection;untilfalseVARlock:boolean:=VARlock:boolean:=falseProgramcriticalsectionremaindersectionuntilfalseProgramcriticalsection;remaindersection;untilenter_region(lock2.3.2实现进程同步的早期方//交换锁lock//交换锁lock和key的functionSWAP(lock,key){vartmp:boolean:=lock;lock:=key;key:=tmp}functionfunctionenter_region(varlockbooleanVarkey:boolean;//局部变量key:=functionleave_region(varlock:booleanlock:=false;进程同实现进程同步的早期方 信号量机制的提出荷兰计算机科学家EdsgerWybeDijkstra; 第一个Algol60编译器的设计者 VARS:integer:=1VARS:integer:=1;ProgramP1:criticalsectionremaindersection;untilfalseProgramcriticalsectionremaindersectionuntil信号量机整数信号量S; P/VfunctionfunctionWait(varS:integerwhile(S<=0)dono_op();S:=S-1;functionSignal(varS:integer)S:=VARS:semaphore:=1;ProgramP1:VARS:semaphore:=1;ProgramP1:criticalsection;remaindersection;untilfalseProgramcriticalsection;remaindersection;untilwait(S两个原子操作 P/Vtypesemaphore=value:integerL:listofprocess
//阻塞进程队functionwait(varS:Semaphore)S.value:=S.value-if(S.value<0)thenblock(S.L);functionsignal(varS:SemaphoreS.value:=if(S.value<=0)thenwakeup(S.L);2.3进程同(2)资源,因此描述为S.value:=S.value-1;当S.value<0时,表源,故S.value:=s.value+1操作表示资源数目加1。若加1后仍S.value:S.value>=0:资源数量;S.value<0: |S.value|合肥工业大学操作系统课程组 2.3进程同信号量的应例1:2
VARtop:integer=-1stack:array[0..n-1]ofmutex:semaphore:=1ProcessProcessP1while(TRUEtop:=(top+1)modstack[top]:=xendsignal(mutex)wait(mutex)ProcessProcessP2while(TRUEtop:=(top+1)modn;stack[top]:=y;endwhilesignal(mutex)wait(mutex)
2.3进程同(1)河河河河 ProcessN2SProcessN2Sgoacrossthebridgeuntilsignal(mutex)wait(mutex)ProcessS2Ngoacrossthebridge;untilfalsesignal(mutex)wait(mutex)VARmutex:semaphore=1ProcessN2Sgoacrossthebridge;untilfalseProcessS2Ngoacrossthebridge 2.3进程同(2)B VARS1,S2:VARS1,S2:semaphore=1,0ProcessPIreadxfromI/OB:=xuntilProcessPOy:=Bprint(y);untilfalsesignal(S1)wait(S2)signal(S2)wait(S1)ProcessPOy:=Bprint(y)untilProcessPIreadxfromI/O;B:=x;until组组 进程同(2)B3:IEBI负责产生随机数B中,当B中数据为奇数时由O负责打印,当B中数B ProcessProcessPEy:=Bprint(y);untilfalseProcessPOz:=Bprint(z);untilfalseProcessPIgeneratexB:=xuntilvarS,SO,SE:semaphoreProcessPEy:=B;signal(S);print(y);ProcessPOz:=Bsignal(S);print(z);untilProcessPIgeneratexB:=xif(xisodd)signal(SO); signal(SE)until组组 经典进程同步问生产者-消费者问循环缓冲
出队操 VARempty,full:semaphore:=n,0;in,out:integer:=0,0;Buffer:array[0..n-1]ofitemproduceaniteminnextp;wait(empty);Buffer(in):=nextp;in:=(in+1)modn;signal(full)untilwait(full)nextc=out:=(out+1)modn课程组课程组
signal(empty)consumetheitemnextc;untilflasein,out:integerin,out:integer:=0,0Buffer:array[0..n-1]ofitem produceaniteminnextpBuffer(in):=nextp;in:=(in+1)modn;untilnextc=out:=(out+1)modnconsumetheitemnextc;untilflase
VARmutex,VARmutex,empty,full:semaphore:=1,n,0in,out:integer:=0,0Buffer:array[0..n-1]ofitem;produceaniteminnextp;wait(empty);wait(mutex);Buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);untilwait(full);wait(mutex);nextc=out:=(out+1)modnsignal(mutex);signal(empty)consumetheitemnextc;untilflase (2)
合肥工业大学操作
VARmutex,empty,full:semaphore:=1,n,0in,out:integer:=0,0;Buffer:array[0..n-1]ofitem;produceaniteminnextpwait(empty)wait(mutex);Buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);untilflasewait(full)wait(mutex);nextc=Buffer(out);out:=(out+1)modnsignal(mutex);signal(empty)consumetheitemnextcuntilflase(2)
VARmutex,empty,full:semaphore:=1,n,0in,out:integer:=0,0;Buffer:array[0..n-1]ofitem;produceaniteminnextpwait(empty)wait(mutex);Buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);untilflasewait(full)wait(mutex)nextc=out:=(out+1)modnsignal(mutex);signal(empty)consumetheitemnextcuntil合肥工业大学操作
(2)
VARmutex,empty,full:semaphore:=1,n,0;in,out:integer:=0,0;Buffer:array[0..n-1]ofitemproduceaniteminnextp;wait(empty);Buffer(in):=nextp;in:=(in+1)modn;
signal(full)untilwait(full)nextc=out:=(out+1)modn合肥工业大学操作系统
signal(empty);consumetheitemnextc;程组 程组 (2)
同例VARempty,full:VARempty,full:semaphore:=1,0in,out:integer:=0,0;Buffer:array[0..n-1]ofitem;produceaniteminnextp;wait(empty);Buffer(in):=nextp;in:=(in+1)modn;signal(full);untilwait(full)nextc=out:=(out+1)modn;signal(empty);consumetheitemnextc;until(2)
VARmutex,empty,full:semaphore:=1,n,0in,out:integer:=0,0;Buffer:array[0..n-1]ofitem;produceaniteminnextpwait(empty)wait(mutex);Buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);untilflasewait(full)wait(mutex);nextc=Buffer(out);out:=(out+1)modnsignal(mutex);signal(empty)consumetheitemnextc系统课程组 系统课程组 合肥工业大学操
(2)
VARmutexC,mutexP,empty,full:semaphore:=1,1,n,0;in,out:integer:=0,0;Buffer:array[0..n-1]ofitemproduceaniteminnextp;wait(empty);wait(mutexP);Buffer(in):=nextp;in:=(in+1)modn;signal(mutexP);signal(full);untilwait(full)wait(mutexC);nextc=Buffer(out);out:=(out+1)modnsignal(mutexC);signal(empty);consumetheitemnextc;操作系统课程组 操作系统课程组 合肥工业大
(2)
VARmutex,empty,full:semaphore:=1,n,0in,out:integer:=0,0;Buffer:array[0..n-1]ofitem;produceaniteminnextpwait(empty)wait(mutex);Buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);untilflasewait(full)wait(mutex);nextc=Buffer(out);out:=(out+1)modnsignal(mutex);signal(empty)consumetheitemnextc作系统课程组 作系统课程组 合肥工业大学
(2)
合肥工业大学
VARmutex,empty,full:semaphore:=1,n,0in,out:integer:=0,0;Buffer:array[0..n-1]ofitem;produceaniteminnextpwait(mutex);Buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);untilflasewait(full)wait(mutex);nextc=Buffer(out);out:=(out+1)modnsignal(mutex)consumetheitemnextc;untilflase作系统课程组作系统课程组 (2)
合肥工业大学
VARmutex,empty,full:semaphore:=1,n,0in,out:integer:=0,0;Buffer:array[0..n-1]ofitem;produceaniteminnextpwait(mutex)wait(empty);Buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);untilflasewait(full)wait(mutex);nextc=Buffer(out);out:=(out+1)modnsignal(mutex);signal(empty)consumetheitemnextcuntil作系统课程组作系统课程组 (2)
合肥工业大学
VARmutex,empty,full:semaphore:=1,n,0in,out:integer:=0,0Buffer:array[0..n-1]ofitem;produceaniteminnextpwait(empty)wait(mutex);Buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);untilflasewait(mutex)wait(full)nextc=out:=(out+1)modnsignal(mutex)signal(empty);consumetheitemnextc;until作系统课程组作系统课程组 (2)
VARmutex,empty,full:semaphore:=1,n,0in,out:integer:=0,0;Buffer:array[0..n-1]ofitem;produceaniteminnextpwait(mutex)wait(empty);Buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);untilflasewait(mutex)wait(full)nextc=out:=(out+1)modnsignal(mutex);signal(empty)consumetheitemnextcuntil合肥工业大学4操作系统end组(2)VARmutex,empty,full:semaphore:=1,n,0in,out:integer:=0,0;Buffer:array[0..n-1]ofitem;produceaniteminnextpwait(empty);wait(mutex)Buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);untilflasewait(full)wait(mutex);nextc=Buffer(out);out:=(out+1)modnsignal(empty);signal(mutex)consumetheitemnextcuntil合肥工业大学4操作系统end组(2)
VARVARmutex,empty,full:semaphore:=1,n,0in,out:integer:=0,0;Buffer:array[0..n-1]ofitem;produceaniteminnextpwait(empty)wait(mutex);Buffer(in):=nextp;in:=(in+1)modn;signal(mutex);signal(full);untilflasewait(full)wait(mutex);nextc=Buffer(out);out:=(out+1)modnsignal(mutex);signal(empty)consumetheitemnextcuntil 合肥工业大学2.4经典进程同步问读者-写者问
读写读写 VARVARwmutex:semaphore:=1wait(wmutex);performreadoperation;signal(wmutex);untilflasewait(wmutex);performwriteoperation;signal(wmutex);untilflase VARVARwmutex:semaphore:=1readcount:integer:=0if(readcount=0)wait(wmutex);readcount:=readcount+1;performreadoperation;readcount:=readcount-1if(readcount=0)signal(wmutex);untilflasewait(wmutex);performwriteoperation;signal(wmutex);until
VARVARwmutex:semaphore:=1;readcount:integer:=0;if(readcount=0)wait(wmutex);readcount:=readcount+1;performreadoperation;readcount:=readcount-1if(readcount=0)signal(wmutex);untilflasewait(wmutex);performwriteoperation;signal(wmutex);untilVARrmutex,wmutex:semaphore:=1,1;readcount:integer:=0;wait(rmutex)VARrmutex,wmutex:semaphore:=1,1;readcount:integer:=0;wait(rmutex)if(readcount=0)wait(wmutex);readcount:=readcount+1;signal(rmutex);performreadoperationwait(rmutex)readcount:=readcount-1if(readcount=0)signal(wmutex)signal(rmutex)untilwait(wmutex);performwriteoperation;signal(wmutex);untilflase VARrmutex,wmutex:VARrmutex,wmutex:semaphore:=1,1readcount:integer:=0;wait(rmutex)if(readcount=0)wait(wmutex);readcount:=readcount+1;signal(rmutex);performreadoperationwait(rmutex)readcount:=readcount-1if(readcount=0)signal(wmutex)signal(rmutex)untilwait(wmutex);performwriteoperation;signal(wmutex);untilflase 2.4经典进程同步问哲学家进餐问 哲学家进程:互斥(筷子 VARVARchopsticks:array[0..4]ofsemaphore:=1,1,1,1,1wait(chopsticks[i])wait(chopsticks[(i+1)mod5]eatsignal(chopsticks[i])signal(chopsticks[(i+1)mod5]untilflase 0 2
VARVARchopsticks:array[0..4]ofsemaphore:=1,1,1,1,1philosopher0-wait(chopsticks[i])wait(chopsticks[(i+1)mod5]);eat;signal(chopsticks[i])signal(chopsticks[(i+1)mod5]untilflasewait(chopsticks[(i+1)mod5]wait(chopsticks[i]);eat;signal(chopsticks[i])signal(chopsticks[(i+1)mod5]untilflase4 0 2 经典进程同步问理发师问题(课后思考题(1) 2.4经典进程同步问信号量集机 2.4.5信号量集机typesemaphore=value:integerL:listofprocess;
//阻塞进程队functionSwait(varS1,S2,..,Sn:Semaphoreif(S1>=1and…andSn>=1)fori:=1tondoSi:=Si-1PlacetheprocessinthequeueassociatedwiththefirstSifoundwithSi<1,gotothebeginningoffunctionSsignal(varS1,S2,..,Sn:Semaphorefo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 氧化铝基负载型金属催化剂邻位氢中心构筑及加氢性能研究
- 秸秆回收加工厂项目可行性研究报告
- 2025版物业管理区域绿化安全管理服务合同3篇
- 基于相似理论的船用耐压设备缩比模型设计方法研究
- 2025版高校食堂营养膳食承包合作协议2篇
- 异地办公与远程工作管理
- 二零二五年度仓储物流用地买卖合同样本3篇
- 2025版选矿厂承包合同附设备更新改造计划书3篇
- 营销行业助理职责概述
- 热情温暖的社区活动中心三篇
- 2025年洗浴中心品牌战略规划与市场拓展合同3篇
- 《钢筋焊接及验收规程》(JGJ18)
- 江西省港口集团有限公司招聘笔试冲刺题2025
- 火灾安全教育观后感
- 农村自建房屋安全协议书
- 医药高等数学知到智慧树章节测试课后答案2024年秋浙江中医药大学
- 2024年潍坊工程职业学院单招职业适应性测试题库完美版
- GB/T 44823-2024绿色矿山评价通则
- 子女放弃房产继承协议书
- 氧化还原反应配平专项训练
- 海外资管机构赴上海投资指南(2024版)
评论
0/150
提交评论