收藏 分销(赏)

进程管理实验要点.pptx

上传人:精**** 文档编号:8167809 上传时间:2025-02-06 格式:PPTX 页数:20 大小:89.68KB 下载积分:10 金币
下载 相关 举报
进程管理实验要点.pptx_第1页
第1页 / 共20页
进程管理实验要点.pptx_第2页
第2页 / 共20页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,支持多个进程并发运行的简单进程管理模拟系统,本系统的同步机构采用信号量上的,P,、,V,操作的机制;控制机构包括:,(,1),阻塞和唤醒操作;,(,2),时间片中断处理程序模拟时间片中断;,(,3),进程调度程序负责为各进程分配处理机。,系统中涉及了,3,个并发进程。它们之间的关系是:,(,1)3,个进程需要互斥使用临界资源,S2,。,(,2),进程,1,和进程,2,又需互斥使用临界资源,S1,本系统在运行过程中随机打印出各进程的状态变换过程,系统的调度过程及公共变量的变化情况。,题目,系统为进程设置了,5,种运行状态:,e,执行态;,r,高就绪态;,t,低就绪态(执行进程因时间片到限而转入);,w,等待态;,c,完成态。各进程的初始状态均设置为,r.,系统分时执行各进程,并规定,3,个进程的执行概率均为,33,。通过产生随机数,x,来模拟时间片。当进程,process1,访问随机数,x,时,若,x=0.33,;当进程,process2,访问,x,时,若,x=0.66;,当进程,process3,访问,x,时,若,x0.66,,则分别认为各进程的执行时间片到限,产生“时间片中断”而转入低就绪态,t,。,基本思路,进程调度算法采用剥夺式最高优先数法。各进程的优先数通过键盘输入予以静态设置。调度程序每次总是选择优先数最小(优先权最高)的就绪进程投入执行。先从,r,状态进程中选择,再从,t,状态进程中选择。当现行进程唤醒某个等待进程,且被唤醒进程的优先数小于现行进程时,则剥夺现行进程的执行权。,各进程在使用临界资源,S1,和,S2,时,通过调用信号量,sem1,和,sem2,上的,P,、,V,操作来实现同步。阻塞和唤醒操作负责完成从进程的执行态到等待态以及从等待态到就绪态的转换。,系统启动后,在完成必要的系统初始化后便执行进程调度程序。当执行进程因,“,时间片中断,”,,或被排斥使用临界资源,或唤醒某个进程时,立即进行进程调度。当,3,个进程都处于完成状态后,系统退出运行。,基本思路,(,1,)每个进程有一个进程控制块,PCB,,内容包括:,id,进程标识号,,id,0,,,1,,,2,;,status,进程状态,可为,e,,,r,,,t,,,w,,,c,;,priority,进程优先数;,nextwr,等待链指针,指示在同一信号量上等待的下一个进程的标识号。,(,2,)信号量,semaphore,,对应于临界资源,S1,和,S2,分别有,sem1,和,sem2,,均为互斥信号量,内容包括:,value,信号量,初值为,1,;,firstwr,等待链首指针,指示在同一信号量上等待的下一个进程的标识数。,数据结构,(,3,)现场保留区,用数组,savearea34,表示。即每个进程都有一个大小为,4,个单元的保留区,用来保存被“中断”时的现场信息,如通用寄存器的内容和断点地址等。,此外,系统中还用到下列主要全程变量:,exe,执行进程指针,其值为进程标识号;,i,用来模拟一个通用寄存器;,addr,用来模拟程序计数器;,s1,s2,两个公共变量,用作共享临界资源,数据结构,const MAXPRI=100;NIL=-1;,TYPE procp=record,PCB,类型,id:integer;status:char;,进程号,进程状态,nextwr:integer;mess:message;,等待号,消息队指针,inum:integer;addr:char;,运行次数,返回地址,priority:integer;end;,优先数,message=messagetp;,指向消息块指针类型,messagetp=record,消息块类型,(,信息,指针,发送者号,),num:integer;next:message;pro:integer;end;,semaphorel=record,信号量类型,(,信号量,等待队头号,),value:integer;firstwr:integer;end;,VAR,pcb:array1.3 of procb;,PCB,表,sem:array1.2 of semaphorel;,信号量表,addr:char;i,seed,exe:integer;,当前进程地址,运行次数,随机变量,当前运行进程号,program processc(input,output);,var q,p:message;,工作指针,begin new(p);p.num:=snum;,申请消息块,写入缓冲,p.next:=NIL;p.pro:=sender;,下一指针置空,置发送者,writeln(send message to process,receiver);writeln(process,sender,already run,snum,times);q:=pcbreceiver.mess;,q,指向接收者消息等待队列首,if(q=NIL)then pcbreceiver.mess:=p,q,空则,p,插入队首,else begin while(q.nextNIL)do q:=q.next;,q,移到队尾,q.next:=p;,将,p,链接到队尾,end;end;,proc send(sender,receiver,snum:integer);,发送,var p,q:message;,工作指针,begin,p:=pcbreceiver.mess;,p,指向接收者消息等待队列首,while(pNIL)do,begin,显示发送者和接收者信息,writeln(receive message from process,p.pro);,writeln(process,p.pro,is already run,p.num,times);,q=p;,陆续将接收过的的消息块删除并释放,p:=p.next;,dispose(q),end;,pcbreceiver.mess:=NIL;,接收完后消息等待队列置空,end;,proce receive(receiver:integer);,接收,var j:integer;begin for j:=1 to 3 do,初始化各进程控制块,begin,pcbj.id:=j;pcbj.status:=r;,进程号,进程状态,pcbj.nextwr:=NIL;pcbj.mess:=NIL;,等待,消息指针,write(process,j,priority?);,readln(pcbj.priority);,读入优先数,pcbj.inum:=0;pcbj.addr:=0;,运行次数,地址,end;,sem1.value:=1;sem1.firstwr:=NIL;,对信号量初始化,sem2.value:=1;sem2.firstwr:=NIL;exe:=NIL;,当前执行进程号置为空,end;,proce init;,初始化,func random:real;,proc eexit(n:integer);,func random:real;,产生,01,之间的随机数,var m:integer;begin,seed,为,integer,型,实际值在,-32768,到,32767,之间,if seed0 then m:=-seed else m:=-seed;seed:=(,25171,*seed+,13841,)mod 65536;random:=m/32767.0 end;,proce eexit(n:integer);,退出,begin pcbn.status:=c;,本进程置为完成态,writeln(process,n,is completed!);exe:=NIL;,当前执行进程号置空,end;,func find:integer;,选进程,var j,pd,w:integer;begin pd:=NIL;W:=MAXPRI;for j:=1 to 3 do,先在高就绪态中找优先数最小的进程,if pcbj.status=r then,if pcbj.priorityw then begin w:=pcbj.priority;pd:=j end;,if pd=NIL then for j:=1 to 3 do,再在低就绪态中找优先数最小的进程,if pcbj.status=t then,if pcbj.priorityw then,begin w:=pcbj.priority;pd:=j end;,find:=pd,返回进程号,end;,func scheduler:integer;,调度,var pd:integer;begin pd:=find;,找优先进程,if(pdNIL)or(exeNIL)then,begin if pdNIL then,若有就绪进程则,if exe=NIL then,若无当前执行进程则,begin pcbpd.status:=e;exe:=pd;,新进程置执行态,writeln(process,exe,is executing);end else if pcbpd.priority=0 then p:=false,有资源不等待,else begin block(se);,阻塞到,se,等待队列,pcbexe.inum:=i;pcbexe.addr:=ad;,保护现场,exe:=NIL;p:=true,执行进程置空,等待标志置真,end;end;,function v(se:integer;ad:char):boolean;,signal,操作,begin semse.value:=semse.value+1;,信号量加,1,if semse.value0 then v:=false,无等待不重新调度,else begin wakeup(se);,有等待唤醒,se,等待队列的进程,pcbexe.inum:=i;pcbexe.addr:=ad;,保护现场,v:=true,要重新调度,end;end;,function timeint(ad:char):boolean;,模拟时间片中断,var x:real;begin x:=rendom;,x,为,01,之间的随机数,if,(x=0.67)and(exe=3),or(x0.33)and(x0.67)and(exe=2),then timeint:=false,若在各自的时间片不产生中断,else begin,否则产生时间片中断,pcbexe.inum:=i;pcbexe.addr:=ad;,保护现场,pcbexe.status:=t;,置为低就绪态,writeln(Times silce interrupt.);writeln(process,exe,enter into ready);exe:=NIL;,执行进程置空,timeint:=true,中断标志置真,end;end;,procedure process1(var s1,s2:integer);,模拟并发进程,1,label a1,b1,c1,d1,e1,f1,stop1;,begin if addr=a then goto,a1,;if addr=b then goto,b1,;if addr=c then goto,c1,;if addr=d then goto,d1,;if addr=e then goto,e1,;if addr=f then goto,f1,;,while(i=5)then eexit(1);,5,次循环后本进程结束,end;,writeln(process1 calls p on sem1);,if p(1,a)then goto stop1,;,对信号量,1,进行,P,操作返回,a,地址,a1:,writeln(process1 is execution on its cretical section 1.);,入临界区,if timeint(b)then goto stop1,;,若时间片到则重新调度,b1:,s1:=s1+1;writeln(s1=,s1);,s1,是临界资源不是信号量,writeln(process1 calls v on sem1 and quit cretical section 1);,if v(1,c)then goto stop1,;,对信号量,1,进行,V,操作,出临界区,c1:,writeln(process1 calls p on sem2);,if p(2,d)then goto stop1,;,对信号量,2,进行,P,操作返回,d,地址,d1:,writeln(process1 is execution on its cretical section 2.);,if timeint(e)then goto,stop1,;,e1:,s2:=s2+1;writeln(s2=,s2);,s2,是临界资源不是信号量,writeln(process1 calls v on sem1 and quit cretical section 2.);,if v(2,f)then goto,stop1,;,对信号量,2,进行,V,操作,出临界区,f1,:writeln(process1 cyclen count=,i+1);i:=i+1;send(1,2,i);send(1,3,i);readln;,循环次数加,1,发消息,procedure process2(var s1,s2:integer);,模拟并发进程,2,label a2,b2,c2,d2,e2,f2,stop2;begin,if addr=a then goto,a2,;if addr=b then goto,b2,;if addr=c then goto,c2,;if addr=d then goto,d2,;if addr=e then goto,e2,;if addr=f then goto,f2,;while(i=5)eexit(2);end;,procedure process3(var s1,s2:integer);,模拟并发进程,3,label a3,b3,c3,stop3;,begin,if addr=a then goto a3,;,if addr=b then goto b3;,if addr=c then goto c3,;,while(i=5)eexit(3);end;,procedure main;,主程序,label 100;var k,s1,s2:integer;,s1,s2,是临界资源公用计数器,begin writeln(C.O.S.Example one);writeln;init;s1:=0;s2:=0;writeln(s1=,s1,s2=,s2);writeln(p1,p2,p3 are all in ready!);,100:,k:=scheduler;,调用调度程序返回选中进程号,if kNIL then case k of 1:begin process1(s1,s2);goto,100,;end;2:begin process2(s1,s2);goto,100,;end;3:begin process3(s1,s2);goto,100,;end;end;writeln;writeln(s1=,s1,s2=,s2);writeln;writeln(COMPLETED);readln;end;,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服