2022年实验一单处理器调度算法的实现 .pdf
实验一单处理器调度算法的实现班级:计算机04-1 班学号: 04034040112 姓名:汀芷约成绩: _ _ 日期: _ 2006-11-02 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 6 页实验一单处理器调度算法的实现一、实验目的在多道程序或多任务系统中,系统同时处于就绪态的进程有若干个。为了使系统中的各进程能有条不紊地运行,必须选择某种调度策略,以选择占用处理机。要求学生设计一个模拟单处理机调度的算法,以巩固和加深处理机调度的概念。二、实验内容设计一个按时间片轮转法调度的算法。提示:1、假设系统有5 个进程,每个进程用一个进程控制块PCB 来代表。 PCB的格式如图所示。其中,进程名即是进程标识。链接指针:指出下一个到达进程的进程控制块首地址。按照进程到达的顺序排队。系统设置一个队头和队尾指针分别指向第一个和最后一个进程。新生成的进程放队尾。2、为每个进程任意确定一个要求运行时间和到达时间。3、 按照进程到达的先后顺序排成一个循环队列。再设一个队首指针指向第一个到达进程的首地址。4、执行处理机调度时,开始选择队首的第一个进程运行。另外再设一个当前运行进程指针,指向当前正运行的进程。5、由于本实验是模拟实验,所以对被选中进程并不实际启动运行,而是执行:一是估计运行时间减1;二是输出当前运行进程的名字。用这两个操作来模拟进程的一次执行。6、进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示应运行进程。同时还应该判断该进程的剩余运行是否为0。若不为0,则等待下一轮精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 6 页的运行; 若该进程的剩余时间为0,则将该进程的状态置为C,并退出循环队列。7、若就绪队列不空,则重复上述的(5)和(6)步骤直到所有进程都运行为止。8、在所设计的调度程序中,应包含显示或打印语句。以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。三、实验说明1、 程序中使用的数据结构及符号说明:数据结构:数组data 符号说明: 每个进程的状态是就绪 W (Wait )、运行 R ( Run)、或完成 C (Complete )三种状态之一。2、程序流程图:四、实验源程序import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ShiJianPianDiaoDu / 调度算法static void diaoDuSuanFa(Object data) int count = 0, i1 = 0; Object t; for (int i = 0; i data.length; i+) i1 += (Integer) datai2; 输入 name,arrivetime,runtime State 到数组 data 调用 paiXu() 方法调用 diaoDuSuanFa()方法精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 6 页for (int j = 0; j i1; j+) if (data03 != C) t = data0; data02 = (Integer) data02 - 1; if (Integer) data02 = 0) data03 = C; for (int i = 0; i data.length - 1; i+) datai = datai + 1; datadata.length - 1 = t; println(data); System.out.println(-); count+; else for (int i = 0; i data.length - 1 - count; i+) datai = datai + 1; datadata.length - 1 - count = t; println(data); System.out.println(-); static void paiXu(Object data) / 排序 Object t; for (int i = 0; i data.length - 1; i+) for (int j = 0; j (Integer) dataj + 11) t = dataj; dataj = dataj + 1; dataj + 1 = t; static void println(Object data) / 打印 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 6 页for (int i = 0; i data.length; i+) System.out.println( + datai0 + t + datai1 + t + datai2 + t + datai3); public static void main(String args) int n = 0, count = 1; String s; System.out.println(时间片为 1); System.out.print(输入进程数 :); try BufferedReader br = new BufferedReader(new InputStreamReader( System.in); s = br.readLine(); n = Integer.parseInt(s); catch (IOException e) /dataname,arrivetime,runtime,state Object data = new Objectn4; for (int i = 0; i n; i+) try System.out.print(请输入第 + count + 个进程的名字 :); BufferedReader br = new BufferedReader(new InputStreamReader( System.in); datai0 = br.readLine(); System.out.print(到达时间 (s):); s = br.readLine(); datai1 = Integer.parseInt(s); System.out.print(运行时间 (s):); s = br.readLine(); datai2 = Integer.parseInt(s); catch (Exception e) datai3 = R; count+; paiXu(data); System.out.println(namet+arrivetimet+runtimet+state); diaoDuSuanFa(data); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 6 页五、运行结果六、实验体会为了使系统中的各进程能有条不紊地运行,必须选择调度策略,而进程调度算法有 FIFO,优先数调度算法,时间片轮转调度算法,本次实验运用的是时间片轮转调度算法。通过本次实验,我巩固和加深处理机调度的概念,为操作系统这门课程打下了坚实的基础。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 6 页