2023年操作系统实验报告

上传人:沈*** 文档编号:206765455 上传时间:2023-05-04 格式:PDF 页数:54 大小:5.39MB
收藏 版权申诉 举报 下载
2023年操作系统实验报告_第1页
第1页 / 共54页
2023年操作系统实验报告_第2页
第2页 / 共54页
2023年操作系统实验报告_第3页
第3页 / 共54页
资源描述:

《2023年操作系统实验报告》由会员分享,可在线阅读,更多相关《2023年操作系统实验报告(54页珍藏版)》请在装配图网上搜索。

1、徐州工程学院管理学院实验报告实验课程名称:计算机操作系统实验地点:南主楼七楼机房2023 年 2 月至 2023 年 4月专 业 信息管理与信息系统班 级 11信管2班学生姓名 _ _ _ _ _ _ _ _ _ _ _ _ _x XX_学 号_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _指导老师刘一男实验报告实验项目:分时系统实验学时:2实验日期:2023-2-2 8实验规定:加深学生对多道系统中进程管理的理解,了解进程的各种状态及其转换过程,分时系统中时间片的设立及进程在时间片开始和结束时的调度过程。实验内容:(1)运用程序设

2、计语言模拟分时系统中多个进程准时间片轮转调度算法进行进程调度的过程;(2)假设有五个进程A,B,C,D,E,它们的到达时间及规定服务的时间分别为:进程名ABCDE到达时间01234服务时间43424时间片大小为1,运用程序模拟A,B,C,D,E五个进程准时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。(3)修改时间片大小为2,运用程序模拟A,B,C,D,E五个进程准时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。(4)修改时间片大小为4,运用程序模拟A,B,C,D,E五个进程准时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。G:操作系统,新建文件

3、1r u n EA请输入进程到达时间r u n Cr u n Brun run 1EC请输入进程服务时间4B h a u e d o n e?t u r n _ a r o u n d _ t i n e:9run 1run EC请输入进程名B请输入进程到达时间1请输入进程服务时间w e i _ t u i*n _ a i*o u n d _ t i m e:3M M M M M M M i r M M M M M M M M M M M M C haine done?r u n DD h a u e d o n e!turn,we i_ i_artu round_tine:14n_aroun

4、d_time:3.53请输入进程名Ct u r n _ a r o u n d _ t i m e:8wei.t u r n.a r o u n d.t i m e:4run EXWWX K X X M X,兴 X M X M X X1请输入进程到达时间2请输入进程服务时间4请输入进程名Dr u n AA h a u e d o n e?t u i*n _ a i*o u n d _ t i n e :1 2E haue done?t urn _aro un d_t ine:13wei_turn_around_t ime:3.25w e i _ t u r n _ a r o u n d _

5、t i m e:3请按任意键继续.请输入进程到达时间请输入进程服务时间聋输入进程名:C:D o c u i e n t s a n dESWr-请输入进程到达时间请输入进程服务时间请输入进程名请输入进程到达时间请献进程服务时间王口王口王口王口王tmI:-0S e t t i n g s A d i厂 潞一.;c C:D o c u e n t s a n d请输入进程服务时间2请输入进程名褊入进程到达时间褊入进程服务时间褊入进程名t th进程C进程D进程E逋0 t i n e ar u n An e w p r o c e s sp r o c e s s1 t i n e a n e w p

6、 r o c e s sa i v e r u n AL t i n e a n e w p r o c e s sr u n A2 t i n e a n e w p r o c e s sa r r i v e r u n B2 t i n e a n e w p r o c e s s3 t i n e a n e w p r o c e s sa r r i v e r u n BC:D o c u i e n t s a n d S e t t i n g s AS e t t i n g s A d i-i _ t u r n _ a r o u n d _ t i n e:3.5

7、a r r i v er u n Er u n Er u n BB h a v e d o n e?t u r n _ a r o u n d _ t i n e:1 2w e i _ t u r n _ a r o u n d _ t i n e:4r u n Cr u n CC h a v e d o n e?t u r n _ a r o u n d _ t i n e:1 3w e i _ t u r n _ a r o u n d _ t i n e:3.2 5a r r i v er u n Ea r r i v er u n Ea r r i v eE h a u e d o n

8、 e?t u r n _ a r o u n d _ t i n e:1 3a r r i v ew e i _ t u r n _ a r o u n d _ t i n e:3.2 54 t i n e a n e w p r o c e s s请 按 任 懿 嶙.A请输入进程名v e i _ t u r n _ a r o u n d _ t i m e :4请输入进程到达时间褊入进程服务时间褊入进程名B请输入进程到达时间A进程B求程C涉程D进程E进程0 t i m e a n e w p r o c e s s a r r i u er u n AMMMMMMXMMMMXMMMMMMM

9、*口 h a u e d o n e!t u r n _ a r o u n d _ t i n e:1 2u e i _ t u r n _ a r o u n d _ t i m e:3褊入进程服务时间r u n A1 t i n e a n e w p r o c e s s a r r i v er u n Er u n C言输入进程名r u n B2 t i n e a n e w p r o c e s s a r r i v er u n Er u n C请输入进程到达时间r u n A3 t i n e a n e w p r o c e s s a r r i u eC h

10、a u e d o n e?3输入进程服务时间r u n C4 t i m e a n e w p r o c e s s a r r i v et u r n _ a r o u n d _ t i m e:1 4v i e i _ t u r n _ a r o u n d _ t i n e :3.5褊入进程名D请输入进程到达时间褊入进程服务时间5输入进程名Er u n Br u n Dr u n Ar u n Er u n Cr u n B*X*X*X X,X X M X X X X X X X X XB h a v e d o n e!t u r n _ a i o u n d _

11、t i n e :9r u n EE h a u e d o n e?t u r n _ a r o u n d _ t i n e:1 3w e i _ t u r n _ a r o u n d _ t i n e:3.2 5时间片的大小对计算机的性能产生什么影响?在时间片轮转算法中,时间片的大小对系统性能有很大的影响,如选择很小的时间片将有助于段作业,由于它能较快地完毕,但会频繁地发生中断、进程上下文的切换,从而增长系统的开销,减少了CP U效率;反之,如选择太长的时间片,使得每个进程都能在一个时间片内完毕,时间片轮转算法便退 化为FC FS算法,无法满足交互式用户的需求。一个较为可取的

12、大小是,时间片略大于一次典型的交互所需要的时间。这样可使大多数进程在一个时间片内完毕。源代码:#i n c lude st d io.h#i ncl u de s tdl i b.hu#incl u d e i ostream.hn#inclu d e c s td 1 i b Hs t rue t proc e ss(o c h ar name;int arri_ t i me;/ar r i ved t ime。int s e r v_ t i me;/serve r ed t i me。in t have_d o n e_ t im e;已经运营时间i nt done_ t ime;完毕

13、时间。i n t lurn_a r oinid_lime;/周转时间fl o at wei_turn_ a r ound_time;/带权周转时间。s truct p ro c ess*ne x t;);int t ime=-l;int t i me_ si i c e=4;/时间片初始值为1I semp t y(s t ruct proc e ss 火 head)if(h e ad-n ext=NUL L)r e turn tr u e;e Ise ret u r n f alse;)v o id pu s hline(stru c t p rocess*he a d,stru c t pr

14、oc e s s*r n)(。i f(rn=NUL L)nex t!=NULL)(x=x-n e xt;x-nex t=m;vo i d popl i ne(s t ruct pro c ess*h e a d,struct p r o c e s s*x)if(!Is e m p ty(he a d)(o*x=head-n ex t;head-n e xt=(*x)-n ex t;。(*x)-next=N ULL;)v oid isnewc o me(struct p ro c es s*h e a d,s tru c t pr o cess*r e ady 1 ine)(struc t p

15、 r ocess*x;i f(h ead ne x t=NUL L)”e turn;。i f(head-ne x t-arr i _time=time&head-ne x t!=NULL)(co u ttim e M tim e n ”a new process ar r ive”next=NUL L;in t i;st r uc t p ro c e s s*r ight n o w;s t ruct proc e s s*p;/*s true t process*n;*/head=(s t ruct p r o ces s*)malloc(s i z e of(process);e if(

16、!he a d)(。cou t 内存分派错误 V v e ndl;)。h e ad-n e xt=N ULL;e t ail=h e a d;。w h ile(1)6。newn o de=(s truct p rocess*)mall o c(sizeof(process);o co u t ”请输入进程名 newn o de-n ame;。if(ne w nod e name=#)b r e ak;8 co u t ”请输入进程到达时间”new n ode arri_time;。co u t 请输入进程服务时间”se r v_tim e;。newnode d o ne_tim e=0;g n

17、ewnode-tu r n_around_time=0;。ne wno d e-wei_turn_a r ound_ t i me=0.0;new nod e-ha v e_ d on e _time=0;。/tai 1 -ne x t=ne wn o de;newnod e-n e xt=NUL L;。/1 ail=newn o de;push lin e (h e a d,new n ode);)。p=hea d-next;。whil e(p!=NULL)(。coutnamene x t;6)s s:whil e(tim e 200)(g t im e+;/cout 当前 TIME”Vti

18、meVen d 1;。isnewcome(h e ad,r e a d y 1 i n e);。if(time!=0)。pu s hline(r e a dyline,ri g htno w);。i=t ime_sl ic e;。/couthav e _ do n e _ t im e+;g ri g htnow-d o n e _ t im e=tim e;。co u t nrun n am ee n dl;if(r ightnowhave_done_t i me=ri g h tnow-s erv_time)。ri g h t n ow-turn_aroun d _time=ri g h

19、tno w-d o ne_time-righ t now-arr i_ t ime+1 ;g 。s ri g ht n ow-wei_tur n _aro u nd_time=(fl o a t)righ t n ow-t u rn_aro u nd_time/rightn o w-serv_ time;o e o o c o u t ”*endlri g h t n o w-name h ave don e!u t u rn_ aro u nd_timee n dl;。o o co u tnwe i _ t um_ a r o u nd_ t im e:n wei_tu r n _ ar o

20、 und_timeendl;0 *”v h ave_ d o ne_time+;3 r ightnow-done_ time=time;。co u t nrun n nam ee n d 1 ;Q i f(rightnow have_ d on e _time=r i gh t no w serv_ t im e)(righ t n o w-turn_ar o und_ t ime=r i g h t n ow-done_ time-r i ghtn o w-a rri_time+1。6 r i gh t no w wei_tur n _a r o u n d_ tim e=(float)ri

21、ghtnow-tu r n_ ar o und_ time/ri gh t n ow-s e rv_time;o o c o u t *e n d lrig h tnow-n a m eM have d o ne!V endl;。c o u t t um_arou n d _ti me endl;。c o u tw e i_tur n _around_timeendl;cout*”next;h e ad=read y lin e-n e x t;p=readyline;。r e ad y line=re a dyl i n e-ne x t;while(1)6 t ime_s 1 ice=l;

22、w h i l e (t i me_ s 1 i ce!=O)6(。t i me+;q=headnex t;while(q!=NULL)8 if(q-a r r i_time=time)6(n=r e adyline;3 wh i le(n-n ext!=NULL)00 o n=nnext;。n-nex t=q;/加入就绪队列d 0|e ls e q=q-nex t;。便利链表将到达进程加入就绪队列t i m e _s 1 i c e ;。p-h ave_ do n e_ t ime+;i f(p-ha v e_ d o n e _time=p done_t i m e)bb。c o u t

23、nam e 完毕vnane 殳ta te we nt ime rt line 在队列可停留时间Ipl IR 11 19 阳 12x x x 当前就绪队列状态为:nnne sta te queue nt ime rtinic 在队列可停 15时间:p2:u:1:10:0:2nane sta te queue nt ime rtim e 在队列可停 留时间:p3 2 11 IS IA 12nane st te queue nt ime rt i m e在队列可停留时间:p4:u:1 IS:0:2按i牌濡加新进程.假其他任帝却维续运行 Vhe execute nane:p2Ibe execute n

24、one:pl”“当前正在运行的进程是3.*当前正在运行的进程是:P2 _mane state queue ntine Mine 在队列。ace sta te queue nt ime rt Ine 田队列可停留时间,p l,R 11 19 11 11 8p2 IR 11 110 10 12M W O T M当 亩,就 入列状态为:当前强队列状态为:nane state queue nt Ine Mine 在队列,p2,u 11,1 0,0,2 iane s ta te queue nt ime rt ie 在队列可停留时间none state queue ntine rtiiw 在 队 列 己

25、 p3 i W !1 5 0*2:p3 2 :1 15:B:2 S t.t.qu.ME l n.在队列 e ta te queue n tin e M in e 在队列可停留时间:p4 iw:i is to 12 IjH lw 11 IS 18 12睫泰加新迸程_ _ _ _ 按其他任意键能争运行.The execute nane:p3商体入进程日勺个数”*当前正在运行的进程是:P3 迸程号Ho1:ncme stA te queue n tin e r tin e 入迸程名:里:2 :R;3;5;4;4的人迸根运行0t问,3*当前就绪队列状态为:Jname sta te queue n tin

26、 e r tin e 在队当“京 盆 尸:;:烹:上上:m。在队于:p4 Iw 13 IS M M 小0 K 8 R 1 1 1 3,o 1 2当的到黯队列状态为:m e stA te queue n tin e rt ime 硒1 Q u e u e 岂 Ipl tw 14 19 18 18 ipx 2 y e Awe s七 c 七。quctie nfc im Tt imcname sta te quouo ntimo r t ime 在队 a ,w ,i B 1 8 1 8*p2*W ;4 10 ifl 18 Tne o/atCo queue nC m t K*4 IM 14 IS 14

27、IH源代码:#inc 1 u d e#incl u de#define g e t jch(t y P e)(type*)ma 1 1 o c(sizeo f(t y p e)#de f i ne N 1 0st r uct jcb /*定义作业控制块PCB*/ch ar name10;f loat n e ed t im e;/*运营时间*/float arri v e t ime;/*提交时刻*/f 1 oat stora g e N;/*系统资源*/str u c t jcb*li n k;*read y=N U LL,*pb=NULL,*p;typ e de f struct jcb

28、JCB;f 1 oatTc,Ti,Wi,T=0;/*完毕时刻,周转时间,带权周转时间,时间量*/f lo atT i Sum=0,WiSum=0;/*平均周转时间,带权a 平均周转时间*/f loat sourc e N;int n;void inpu t();/*输入作业信息*/i n t s p a c e();/*返回就绪队列中作业的数目*/v o id fcfs();/*先来先服务算法*/void d is p(JCB*pr);/*显示相应的作业*/v o i d runni n g();/*运营作业组夫/v o id des t roy();/*撤消作业*/void i npu t(

29、)/*建立作业控制块函数*/(int i,k,n u m;乎rint f(”请输入所拥有的资源种类:”);scan f(%d ,&n);printf(输入系统所拥有资源数:n );f o r (i=0;in;i+)。gpr i n tf(资源%d:,i);a s c a nf(u%fH,&s o u rce i);printf(u n 输入作业数量:);os c anf(”d*&num);f or(i=0;iname);。prin t f(输入提交时间:”);s canf(%F,&p-arri v e time);。p rin tf(输入运营时间:”);esc a n f(M%f,&p nee

30、dtime);。p r intf(输入所需资源数:n);for(k=0;ksto r a g e k );)。prin t f(n*);o p-link=NULL;of C fs();)i nt sp a c e()(i n t 1 =0;J CB*pr=r e ad y;wh i le(pr!=NULL)(。1 +;pr=prlink;re t u rn(1 );)vo i d d i s p(JCB*pr)/*建立作业显示函数,用于显示当前作业*/(int i;pri n tf(nn%6st%6st%6s t 作业名“,“运营时间7 提交时刻)ofor(i=0;iname,pr-needt

31、ime,p r-a rrive t i me);ofo r(i=0;i stor a g ei);。p r i nt f(“n”);void d e s troy()/文建立作业撤消函数(作业运营结束,撤消作业)*/(of r ee(p);)voi d ch e c k()(eJCB*p;i n t fla g=0,i,t e s t=0;fi r st=p b;twhile(first&(T=first-arri v et i me)&(f 1 ag=O)(for(i=O;i=f i rst-storage L i)。oos o u rcei=sou r c e i-first-s t o

32、rage i;o el s eg t e s t=l;)o“f(t e st=O)g(8。p=f i r s t;first=first-l i nk;p-link=NULL;if(ready=NULL)8 re a d y=p;o o e Is e0 0 f i r=read y;。whi 1 e(fir-link 1 =N U LL)0 0 g fir=f i r-1 in k;。)。f ir-li n k=p;0)。e Isef lag=l;)、p b=first;)void f c fs()JC B secon d;int ins=0;i f(P b=NULL)|(p-arrivet

33、i me a r r i v e t i me)(。p-1 i n k=pb;叩 b二p;。照1 seo f ir s t=pb;a s e c o nd=f ir s t-lin k;whil e(s e con d!=NU LL)if(p arrivetime a r rive t ime)6 p-lin k=s e cond;。a s e c o nd=NULL;gf i r s tlink=p;Q in s=1;8oelse0 0 1s f irs t=fi r st-link;“。second=sec o nd-link;if(ins=0)。first-l i n k=p;)v o

34、id r u n n ing()(。J CB*pr;i nt i;叩r i n tf(正在运营的作业是:s n,p-n ame);edis p(p);i f(ready!=NULL)(P rintf(就绪队列如下:n);p r=r e ady;。while(pr!=NULL)。(。e d is p(p r);g pr=pr-link;)els e。pdntf(就绪队列为空队列!n );oif(pb!=NULL)叩rin t f(后备队列如下:n);8 P r=pb;wh i 1 e(pr!=NUL L)o“d i sp(pr);。p r=p r-1 ink;。els e。日的(后备队列为空队列

35、!11);oprinlf(作业s 的开始运营时刻 T:%4.2 f np-nam e,T);Tc=T+p n ee d t ime;T=Tc;eTi=Tc-p-a r r i vetime;Wi=T i/(p-ne e d tim e);of o r(i=0;isto r agei;oprintf(”完毕时亥ijTc:%4.2Rn”,T c);oprintf(“周转时间 T i:%4.2fnH,Ti);p r i ntf(带权周转时间 W i:%4.2fn,W i);T i Sum+=Ti;WiSum+=Wi;d e stroy():)main()/主函数(i n 11 e n;cha r c

36、 h;in p u t();a r riv e time;check();len=spa c e();while(l e n!=0)&(ready!=NULL)。sy s tem(pa u s e);。叩 二 ready;r e ady=p-link;p-1 ink=NU L L;。r unni n g();i f(p b!=NULL)。(i f(ready=NULL)g i f(Tarri v etim e)T=pb-a r r ivetime;6 ch e ck();。len=s p ace();1。p rin tf(n 该作业组的平均周转时间:4.2fn,Ti S um/len);pri

37、ntf(该作业组的带权平均周转时间:4.2 f n,W i S u m/len);c h=getcha r();)实验项目:PV操作-生产者与消费者实验学时:2实验日期:2023-3 1 4实验规定:实验内容:1.由用户指定要产生的进程及其类别,存入就绪队列。2.调度程序从就绪队列中提取一个就绪进程运营。假如申请的资源被阻塞则进入相应的等待队列,调度程序调度就绪队列中的下一个进程。进程运营结束时,会检查相应的等待队列,激活队列中的进程进入就绪队列。运营结束的进程进入over链表。反复这一过程直至就绪队列为空。3 .输入两个进程,分别为生产者和消费者,按照先生产后消费顺序输入,观测并记录运营结果

38、;调整输入进程的顺序,观测并记录运营结果4 .输入多个进程,随机分派为生产者和消费者,按(1)两种进程数量相同、(2)生产者多于消费者、(3)生产者少于消费者三种情况,观测并记录运营结果5.多次输入多个进程,随机分派为生产者和消费者,使缓冲区中产品最后都被消费完,观测并记录运营结果输入两个进程,分别为生产者和消费者,按照先生产后消费顺序输入,观测并记录运营结果班 更 后,它 是 球2个进程一 的 二 个 生 产*.算至一不徜费需u国面魅乐 资 蕉 作 结 取,取效型“需 窜 发 商 进 程调整输入进程的顺序,先消费后生产,观测并记录运营结果 欢迎光临输入多个进程,随机分派为生产者和消费者,按不

39、同情况观测并记录运营结果(1)两种进程数量相同(2)生产者多于消费者“XJtMMXXXXXtWM 欢迎光临:请物入迸程个数:?:您善产生的进程是生产者,它是第1个进程:请藉入您要该进程产生的字符:该近程产生的音是:铲苞它是第2个进程:您吴产生的进程再生产者,它是第3个进程:请介入您要该进覆产生的字符(3)生产者少于消费者多次输入多个进程,随机分派为生产者和消费者,使缓冲区中产品最后都被消费完,观测并记录运营结果源代码:您襄产生的进程看生产奔它是和0个进程瞬 入 您 要 该 进 爵;生 群 符一F-逅一wr瑞关入该输输煲1;)产M华的进i程f是f蹄者,它是第12个进程 产I:;iW I守者,它是

40、第13个进程#in c 1 ude s t dio.h,#i nclude#inc 1 ude#i nclude i o s t re a m.h”#d e fin e NULLO#define OK 1#def i neERRORO#d e fine buff e rsi z e 3#d efi n e get p ch(type)(type*)mall o c(si z eo f(t y p e)in t produ c t n um=0;产品数量int pr o ce s snum=0;进程计数器int f ull=0;int em p t y=buffersize;/semaphor

41、ech a r b uffer L b u f fersize;/缓冲区i n t b u f f e rpoint=0;/缓冲区指针s t r u c t p c b /*定义进程控制块PC B*/-in t flag;/flag=1 表达生产者;fl a g=2 表达消费者in t numl a bel;/进程编号char pro d uc t;产品char stat e;进程状态岭 t ruct p c b*pr o c e ssl i nk;*e x e=NULL,*over=NULL;“over 链表typedef s true t peb P C B;P C B*rea d y h

42、 ea d=NULL,*r e a dytail=NULL;/就绪队列PCB*c on s umerhea d=NULL,*co n sumertail=NUL L;消费者队歹UPCB*p r o d u cerhe a d=N U L L,*producertai 1 =NULL;生产者队列i nt I n it Q ueue(PC B*h ead,PC B*t ail)/初始化队列if(!h e ad)。e xit(O);head-p r oc e s s link=NU LL;r e tur n 0 K;)b o ol h a s E leme n t(PCB*p ro)/判断队列是否为

43、空if(p r o-p rocessl i nk=NU L L)return fals e;e Isereturn tru e;)void lin k qu e u e(PCB*pro c e s s ,PCB*tail)/把就绪队列里的进程放入生产者队列的尾。(*t a i l)-p ro c e ss 1 ink=pr o cess;p r ocess 1 ink;。free(p);。r e t urn;)PCB*getq(P C B*he a d,PCB*tail)出队oPCB*p;p=head-pr o c e ssli n k;if(p!=N ULL)he a d-p r ocess

44、link=p-p r oces s lin k;p-p ro c esslink=NU L L;if(head-pro c ess 1 i n k=NULL)(*tai 1 )=head;。el s e。ret u m NU L L;”e t ur n p;voi d linklis t(PCB*p,PC B*listhea d)(P CB*cu r s o r=1 is t he a d;w h i l e (cur s o r-process 1 i n k!=NULL)。(c u rsor=cu r sor-process!in k;)cu r s o rprocesslink=p;)i

45、 n t p r o c e ssproc()/给 PC B 分派内存。in t i,f,num;ch a r ch;oPCB*p=N U L L;c o ut end 1 e n d 1 ;op r in tf(:)请输入进程个数:”);o c i n n um;for(i=0;i n um;i+)。/产生相应的的进程:。c o u tn:)输 入 1 生产者进程”endl;cout”:)输入2 消费者进程”endl;osc a nf(%dn,&f);Age t c h a r();。p=(PCB*)m a lloc(sizeof(PC B);i f(!p)。第 0 u t fl a g=f

46、;/进程标志,1为生产者,2 为消费者eepro c e s s n u m+;进程计数器加1叩一n u ml a bel=p roce s snum;进程编号记为进程计数器o p-state=w /置为等待p-processlin k=NULL;if(p-flag=1)/输 入 1为生产者进程;-co u t (:)您要产生的进程是生产者,它是第yvprocessnum“个进程Vendl;c o u tH:)请输入您要该进程产生的字符 v p roduct=ch;g叩r o ductnum+;。c o u t :)该进程产生的内容是 p productnumlab e 1 ”个进程yendl

47、;0)。1 i nkqu e ue(p,&readyta i 1);并把这些进程放入就绪队列中。re t urn t r ue;bool w aitempt y()/假如缓冲区满,该进程进入生产者等待队列;i f(e mpty n u m l abelVV”缓冲区存数,该进程进入生产者等待队列“vnumlabe 1 e nd 1 ;empty+;b ool waitful 1 ()/I i nkqu e ue(e x e,&co n s umertail);/if(f ul 1 =0)。假如缓冲区空co u t n:)进程 vnumlabelels e(。f u 1 1 ;。retur n t

48、 rue;-)v o id sig n a 1 fu 1 1()将等待中的消费者进程进入就绪队列PCB*p;if(h a sElem e n t(c onsumer h e a d)U。p=g e t q(c ons u mer h ead,&c o ns u me r ta il);1 i nkqueue(p,&read y tail);co u t H:)等待中的消费者进程进入就绪队列,它的进程号是 n u m label endl;。full+;)v o id p r o d u c e r r un()/进程运营if(!wa i t empty()/缓冲区为空oretur n;/缓冲区

49、不为空,执行消费者进程c o u t :)进程”num 1 ab e I v v”开始向缓冲区存数 pro d u c t e n d l;buff e r b uf f erpoint=e x e-p r o d u c t;放入缓冲区obuff e rpoin t+;/缓冲区指针后移cout:)进 程”exe-numlabe 1 V V”向缓冲区存数操作结束”We n d 1;sign a If ull();/等待的消费队列进入就绪队列link 1 i st(e x e,ov e r);)v oid com suer r u n()oif(!wa i t f u 1 1()/缓冲区不为空r

50、etu r n;c o u tM:)进程 V n umlab e 1”开始向缓冲区取数”vprodu c t=buff e rbufferpoint_1;。b uffe r po i nt;c o u t u:)进程Vve x enum 1 ab e 1 ”向缓冲区取数操作结束,取数是 V produ c t proce s si i nk;h ile(p!=NULL)。(sprint f(u:)进程d,它是一个,p-n u mlabel);叩-f lag=l?c o utV V”生产者”en d 1:c o utp r ocesslink;)v o id main()照 har c,ch;b

51、o o 1 eleme n t;in t Fla g=1 ;cout”t t*i卬 3t M 页 *”o v e r-processlink=NULL;while(F lag)(。if(!p r oce s spro c()/给 PCB 分派空间ebr e ak;gel e me n t=hasEleme n t(re a dyh e a d);oewhil e(e leme n t)。oexe=g etq(re a dyhe a d,&r e ad y ta i 1 );。叩rintf(:)进程d 申请运营,它是一个二exe-n umlabel);。exe-flag=l?cou t V“生产

52、者 vVendl:c o u t V V 消费者”f 1 a g=1)。p r od u cer r un();。o e 1 s eg ocoms u erru n();。照 1 ement=h a s E lemen t(re a d y h e ad);)8 c o u t :)就绪队列没有进程V e ndl;8“f(h asElement(consum e r h e a d)0 o u t 1:)消费者等待队列中有进程:u e n dl;o d i s p lay(co n sumerhead);)。e Ise。(if(hasE 1 e m e nt(pr o d u c er h e

53、a d)O D 。coutn:)生产者等待队列中有进程:e n d l;。d isp 1 ay(p ro d u c erh e a d);0)eel s e8。c o u t (:)生产者等待队列中没有进程”V e n dl;。ocout”:)想继续吗?(y/n)”endl;。c=ge t c har();。o c h=g etcha r();。if(c=y 11 C=,Y,)e“oFlag=1;。e 1 se。i f(c=,n*|c=N)gFIag=0;。else0 ob eoF 1 ag=0;。dcout:)输入有误 endl;e 8 实验项目:银行家算法实验学时:2实验日期:2 0 2

54、3-3-21实验规定:实验内容:1.由用户指定要产生的进程及其类别,存入就绪队列。2.调度程序从就绪队列中提取一个就绪进程运营。假如申请的资源被阻塞则进入相应的等待队列,调度程序调度就绪队列中的下一个进程。进程运营结束时,会检查相应的等待队列,激活队列中的进程进入就绪队列。运营结束的进程进入over链表。反复这一过程直至就绪队列为空。3.输入两个进程,分别为生产者和消费者,按照先生产后消费顺序输入,观测并记录运营结果;调整输入进程的顺序,观测并记录运营结果4.输入多个进程,随机分派为生产者和消费者,按(1)两种进程数量相同、(2)生产者多于消费者、(3)生产者少于消费者三种情况,观测并记录运营

55、结果5.多次输入多个进程,随机分派为生产者和消费者,使缓冲区中产品最后都被消费完,观测并记录运营结果(1)系统是安全的。系统可用资源a b c:9 8 6满足进程1,进 程1完毕后,释 放1 2 2,可用资源变为:a b c:10 10 8,满足进程0,进程0完毕后,释 放10 1,可用资源变为:a b c:l 1 109,满足进程2,由于所有进程均可以执行,所以系统安全。系统是安全的。系统可用资源a b c:9 8 6满足进程1 ,进 程1完毕后,释 放1 2 2,可用资源变为:ab 0:1 0 10 8,满足进程0,进程0完毕后,释 放10 1,可用资源变为:ab c:l 1 10 9,满

56、足进程2,由于所有进程均可以执行,所以系统安全。(3)系统可用资源a b c:9 8 6满足进程1,进 程1完毕后,释 放1 2 2,可用资源变为:a bc:1 0 10 8,满足进程0,进程。完毕后,释 放10 1,可用资源变为:ab c:1 1 10 9,满足进程2,由于所有进程均可以执行,所以系统安全。请选择功能号:4嫌 簿 管 海 簿 鬻 号 (小2用祠人近性2甲席的负屈:a:lb:lc:0系统目前可用的资源 A ualiablel:a b c8 7 60 11 9 7 1 B 1 10 9 61 9 10 8 1 2 2 8 8 62 10 10 9 1 2 0 9 8 9Max A

57、 llocation Need进程名 a b c a b c a b c(4)系统是不安全的。由于系统目前可用资源为a b c:8 7 6不满足任何一个进程,资源不够。kcM M X M M M M M M M M M M M M M M M M M M K M M M M M M M M M M M M M M M M M M X M M精选 择 功 能 号,_(5)系统不安全。由于在(1)的基础上增长1 个作业,资源需求为(11 198 6,通过进程1 后,变 为 1 0 10 8,由于满足进程0,运营进程0,进程2,运营进程2,结束后,可用资源变成11 II 9,由于增长了行不能继续运营

58、,所以系统不安全。采用措施:修改资源,修改可用资源数量为(9 8 8)如下:1 1 1 ),可用资源a b c:可用资源变为11 10 9,满足1 个作业,所以不满足进程3,进系统安全。源代码:#i nc 1 ud e#include#inc 1 u d e#d ef i n e Fai s e 0#defi n e Tru e 1in t Max10010 0=0:/各进程所需各类资源的最大需求in t A val i ablet 100=0;/系统可用资源ch a r name100=0 ;资源的名称i nt A 1 lo c ation 1 00100=0;/系统 A 分派资源intNe

59、ed100100=0;/还需要资源in t Req u e st 1 0 0=0;请求资源向量i n 11 e mp10 0 =0;存放安全序列in t Work 1 00=0 ;存放系统可提供资源in t M=1 00;作业的最大数为100in t N=10 0;/资源的最大数为100void s h o wda t a()显示资源矩阵(i n t i,j;cou t V”系统目前可用的资源A v a liable:endl;fo r(i=0;iN;i+)coutname i ;c outendl;f o r(j=0;j N;j+)coutAvaliableju n;/输出分派资源coute

60、ndl;c o u t*Max Alloc a t i on Nee d en d 1 ;coutV”进程名”;for(j=0;j 3;j+)fo r(i=0;iN;i+)c o u tnameic o u t n;)coute nd 1 ;for(i=0;i M;i+)cou t H i n”;f or(j=O;jN;j+)cou t M a x i j M H;cout;fo r(j=O;jN;j+)co u t A ll o cationij ;coutH”;for(j=0;j N;j+)c outNeedi U l ;co u tendl;)i nt cha n gda t a(i n

61、t i)/进行资源分派in t j;fo r(j=0;jM;j+)Av a lia b lej=A v a 1 iable j-Reques t j;Alloca t ion i j=A11 o cationfi j+Requ e s t j ;Need i j=Ne e d i j-R e questfj;)r e turn 1;)int safe。/安全性算法i nt i,k=O,m,appl y,F i n is h 100=0;int j;int flag=0;Wo r kO=Av a 1 i ableO;W o rk 1 =Avaliable 1;Wo r k 2=Avaliab 1

62、 e 2;for(i=0;iM;i+)ap p 1 y=0;for(j=0;jN;j+)if(F inish i=Fals e&Ne e d Workfj)ap P ly+;i f(a p ply=N)for(m=0;mN;m+)Workm=Workm+A 1 loca t i o ni m;变分派数Fini s h i=T ru e;temp k=i;i=-l;k+;flag+;)for(i=0;iM;i+)if(Fi n i s h i=False)c o u t ”系统不安全”(Ven d 1;/不成功系统不安全retu r n-1;)co u tV ”系统是安全的!”vendl;/假如

63、安全,输出成功coutvv”分派的序列:”;fo r(i=0;i VM;i+)输出运营进程数组cout t e mpi;i f(in;)c o u tend 1 ;return 0;)v o id share。/运用银行家算法对申请资源对进行鉴定(c h a r ch;i n t i=0,j=0;ch=y;c o u t 请输入规定分派的资源进程号(0 ;cin i;/输入须申请的资源号cout”请 输 入 进 程 申 请 的 资 源:endl;fo r(j=0;j N;j+)(cou t namej:;c i nRequest j ;/输入需要申请的资源for(j=O;jNeedi j )判

64、断申请是否大于需求,若大于则犯错(cou t 进 程 申 请 的 资 源 大 于 它 需 要 的 资 源 ;cout 分派不合理,不予分派!Ava 1 iablefj)/判断申请是否大于当前资源,若大于则/犯错cout 进 程 申 请 的 资 源 大 于 系 统 现 在 可 运 用 的 资 源”;c o u t 分派犯错,不予分派!en d 1 ;ch=n;br e a k;)i f(ch=,y)chang d ata(i);/根据进程需求量变换资源sh o w d ataO,根据进程需求量显示变换后的资源safe(),根据进程需求量进行银行家算法判断)vo i d ad d re s o u

65、 r c e s ()/添力口资源in t n,flag;cou t n:flag=N;N=N+n;for(int i=0;i n;i+)co u tv名称:;c i nnam e f 1 a g ;c o utw 数量:;cinA v a 1 i abl e f 1 a g+;s h ow d a t a();s a fe();)v oid delr e sour c es()/删除资源char m i ng;i n t i,f lag=1;co utV”请输入需要删除的资源名称:”;d ocinm i ng;for(i=0;iN;i+)if(m i n g=n a me i )fl a g

66、=0;b reak;)if(i=N)COUtVV”该资源名称不存在,请重新输入:”;)while(f la g);fo r(in t j=i;j N-l;j+)(n ame j=namefj+l;Avali able fj=A v a 1 iable j+l;)N=N-1;s how d ata();s a f e ();)vo i d chan g e re s o u r c e s ()修改资源函数c out”系统目前可用的资源Avaliab 1 e:e ndl;for(i nt i=0;iN;i+)c out n amei u:Aval i abl e i e n dl;co u t V Av a lia b 1 e 0 A v a liablelAva 1 iab 1 e 2;cou t ”经 修 改 后 的 系 统 可 用 资 源 为 e n d l;for(i n t k=0;kN;k+)coutnam e k:A val i able k endl;showd a t a();s a f e();)void a d d p r ocess()添加作业int f l a

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!