操作系统计划性实验报告_第1页
操作系统计划性实验报告_第2页
操作系统计划性实验报告_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统设计性实验报告20132014学年第二学期进程调度一、实验目的与要求1、选用优先数法或简单轮转法对n个进程进行调度。2、用高级语言编写和调试一个简单的进程调度程序。3、上机调试程序,撰写实验报告。二、实验条件(所需场地、设备、实验耗材等)计算机机房,微型计算机,TurboC(或VC+软件。三、实验设计的内容1、设计一个有n个进程(可假定系统有五个进程)共行的进程调度程序。每一个进程用一个进程控制块PCB来代表。PCB中应包含下列信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间及进程的状态等,且可按调度算法的不同而增减。各进程的优先数或轮转时间片数,以及进程运行需要的时间片

2、数,均由伪随机数发生器产生。2、调度程序应包含2到3种不同的调度算法,运行时可任选一种。3、每个进程处于运行R、就绪W和完成F三种状态之一,假定初始状态都为就绪状态W4、系统能显示或打印各进程状态和参数的变化情况。四、实验设计的步骤及结果测试为便于处理,程序中进程的运行时间以时间片为基本计算单位。1、进程控制块PCB的格式为:进程标识数链指针优先数/轮转时间片数占用CPU时间片数进程所需时间片数进程状态2、优先数算法:进程就绪链按优先数大小排列,链首首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3,理由是该进程如果在一个时间片中完成不了,优先

3、数应降低一级。接着比较现行进程和就绪链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续运行,否则,调度就绪链的链首进程投入运行。原运行进程再按照其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。简单轮转法:进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相应于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改

4、变它们的进程状态,直至所有进程完成各自的时间片。3、随即函数rand()通常的使用方法:rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。如果你要产生010的10个整数,可以表达为:intN=rand()%11;这样,N的值就是一个010的随机数,如果要产生110,则是这样:intN=1+rand()%11;总的来说,可以表示为:a+rand()%n;其中的a是起始值,n是整数的范围。若要01的小数,则可以先取得010的整数,然后均除以10即可得到随机到十分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到0100的10个整数

5、,然后均除以100,其它情况依此类推。通常rand()产生的随机数在每次运行的时候都是与上一次相同的,这是有意这样设计的,是为了便于程序的调试。若要产生每次不同的随机数,可以使用srand(seed)函数进行随机化,随着seed的不同,就能够产生不同的随机数。此外,还可以包含time.h头文件,然后使用srand(time(0)来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒)。五、程序代码及运行结果程序代码:#include<stdio.h>#include<dos.h>#include<stdl

6、ib.h>#include<conio.h>#include<iostream.h>#include<windows.h>#defineP_NUM5enumstateW,R,block,F;structpcbcharname4;intpriority;intcputime;intneedtime;intcount;intround;stateprocess;pcb*next;pcb*get_process()pcb*q;pcb*t;pcb*p;inti=0;cout<<"inputnameandtime"<<

7、endl;while(i<P_NUM)q=(structpcb*)malloc(sizeof(pcb);cin>>q->name;cin>>q->needtime;q->cputime=0;q->priority=20+rand()%31;q->process=W;q->next=NULL;if(i=0)p=q;t=q;elset->next=q;t=q;i+;returnp;voiddisplay(pcb*p)cout<<"name"<<""<<

8、"cputime"<<""<<"needtime"<<""<<"priority"<<""<<"state"<<endl;while(p)cout<<p->name;cout<<""cout<<p->cputime;cout<<""cout<<p->need

9、time;cout<<""cout<<p->priority;cout<<""switch(p->process)caseW:cout<<"W"<<endl;break;caseR:cout<<"R"<<endl;break;caseblock:cout<<"block"<<endl;break;caseF:cout<<"F"<<en

10、dl;break;p=p->next;intprocess_F(pcb*q)intbl=1;while(bl&&q)bl=bl&&q->needtime=0;q=q->next;returnbl;voidcpuexe(pcb*q)pcb*t=q;inttp=0;while(q)if(q->process!=F)q->process=W;if(q->needtime=0)q->process=F;if(tp<q->priority&&q->process!=F)tp=q->prior

11、ity;t=q;q=q->next;if(t->needtime!=0)t->priority-=3;t->needtime-;t->process=R;t->cputime+;voidpriority_cal()pcb*p;system("cls");p=get_process();intcpu=0;system("cls");while(!process_F(p)cpu+;cout<<"cputime:"<<cpu<<endl;cpuexe(p);displa

12、y(p);Sleep(2);printf("Allprocesseshavefinished,pressanykeytoexit");getch();voiddisplay_menu()cout<<"CHOOSETHEALGORITHM:"<<endl;cout<<"1PRIORITY"<<endl;cout<<"2POUNDROBIN"<<endl;cout<<"3EXIT"<<endl;pcb*g

13、et_process_round()pcb*q;pcb*t;pcb*p;inti=0;cout<<"inputnameandtime"<<endl;while(i<P_NUM)q=(structpcb*)malloc(sizeof(pcb);cin>>q->name;cin>>q->needtime;q->cputime=0;q->round=0;q->count=0;q->process=W;q->next=NULL;if(i=0)p=q;t=q;elset->next=

14、q;t=q;i+;returnp;voidcpu_round(pcb*q)q->cputime+=2;q->needtime-=2;if(q->needtime<0)q->needtime=0;q->count+;q->round+;q->process=R;pcb*get_next(pcb*k,pcb*head)pcb*t;t=k;dot=t->next;while(t&&t->process=F);if(t=NULL)t=head;while(t->next!=k&&t->process

15、=F)t=t->next;returnt;voidset_state(pcb*p)while(p)if(p->needtime=0)p->process=F;if(p->process=R)p->process=W;p=p->next;voiddisplay_round(pcb*p)cout<<"NAME"<<""<<"CPUTIME"<<""<<"NEEDTIME"<<"&qu

16、ot;<<"COUNT"<<""<<"ROUND"<<""<<"STATE"<<endl;while(p)cout<<p->name;cout<<""cout<<p->cputime;cout<<""cout<<p->needtime;cout<<""cout<<p

17、->count;cout<<""cout<<p->round;cout<<""switch(p->process)caseW:cout<<"W"<<endl;break;caseR:cout<<"R"<<endl;break;caseF:cout<<"F"<<endl;break;p=p->next;voidround_cal()pcb*p;pcb*r;system

18、("cls");p=get_process_round();intcpu=0;system("cls");r=p;while(!process_F(p)cpu+=2;cpu_round(r);r=get_next(r,p);cout<<"cpu"<<cpu<<endl;display_round(p);set_state(p);Sleep(5);voidmain()display_menu();intk;scanf("%d",&k);switch(k)case1:prio

19、rity_cal();break;case2:round_cal();break;case3:break;display_menu();scanf("%d",&k);运行结果:D:VC+6.0Debugm*.exe'CHOOSETHEALGORrTHM:1 PRIORITY2 POUNDROBIN3 EKIT*DAVC+6,0Debugkifftt谡度exe'xnpu'tnameandl±iiFierRX2A342<3"D:VC+6.0Debug®S®.exeB,ir0i於p304ae4114350431pu±ime":2曰fbecpujitj_rneneedl;xnscputnameAl0ine:4needtxnestateLnrtputinehamecputimeneediniepvioritjistate40cputins:6rieedtineprioritystate23040R82

温馨提示

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

评论

0/150

提交评论