(完整word版)实验一单处理器调度算法的实现.doc
上传人:纪阳****公主 上传时间:2024-09-10 格式:DOC 页数:6 大小:63KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

(完整word版)实验一单处理器调度算法的实现.doc

(完整word版)实验一单处理器调度算法的实现.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验一单处理器调度算法的实现班级:计算机04-1班学号:04034040112姓名:汀芷约成绩:___________日期:_2006-11-02实验一单处理器调度算法的实现实验目的在多道程序或多任务系统中,系统同时处于就绪态的进程有若干个。为了使系统中的各进程能有条不紊地运行,必须选择某种调度策略,以选择占用处理机。要求学生设计一个模拟单处理机调度的算法,以巩固和加深处理机调度的概念。实验内容设计一个按时间片轮转法调度的算法。提示:1、假设系统有5个进程,每个进程用一个进程控制块PCB来代表。PCB的格式如图所示。其中,进程名即是进程标识。链接指针:指出下一个到达进程的进程控制块首地址。按照进程到达的顺序排队。系统设置一个队头和队尾指针分别指向第一个和最后一个进程。新生成的进程放队尾。2、为每个进程任意确定一个要求运行时间和到达时间。3、按照进程到达的先后顺序排成一个循环队列。再设一个队首指针指向第一个到达进程的首地址。4、执行处理机调度时,开始选择队首的第一个进程运行。另外再设一个当前运行进程指针,指向当前正运行的进程。5、由于本实验是模拟实验,所以对被选中进程并不实际启动运行,而是执行:一是估计运行时间减1;二是输出当前运行进程的名字。用这两个操作来模拟进程的一次执行。6、进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示应运行进程。同时还应该判断该进程的剩余运行是否为0。若不为0,则等待下一轮的运行;若该进程的剩余时间为0,则将该进程的状态置为C,并退出循环队列。7、若就绪队列不空,则重复上述的(5)和(6)步骤直到所有进程都运行为止。8、在所设计的调度程序中,应包含显示或打印语句。以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。三、实验说明程序中使用的数据结构及符号说明:数据结构:数组data[][]符号说明:每个进程的状态是就绪W(Wait)、运行R(Run)、或完成C(Complete)三种状态之一。2、程序流程图:输入name,arrivetime,runtimeState到数组data[][]调用paiXu()方法调用diaoDuSuanFa()方法四、实验源程序importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassShiJianPianDiaoDu{//调度算法staticvoiddiaoDuSuanFa(Objectdata[][]){intcount=0,i1=0;Objectt[];for(inti=0;i<data.length;i++){i1+=(Integer)data[i][2];}for(intj=0;j<i1;j++){if(data[0][3]!="C"){t=data[0];data[0][2]=(Integer)data[0][2]-1;if((Integer)data[0][2]==0){data[0][3]="C";for(inti=0;i<data.length-1;i++){data[i]=data[i+1];}data[data.length-1]=t;println(data);System.out.println("------------------------------");count++;}else{for(inti=0;i<data.length-1-count;i++){data[i]=data[i+1];}data[data.length-1-count]=t;println(data);System.out.println("------------------------------");}}}}staticvoidpaiXu(Objectdata[][])//排序{Objectt[];for(inti=0;i<data.length-1;i++){for(intj=0;j<data.length-i-1;j++)if((Integer)data[j][1]>(Integer)data[j+1][1]){