《计算机操作系统原理》课外上机
实验报告
题目 名称 院系 指导老师 组长 联系电话 组长 (姓名、学号) 成员(姓名、学号) 进程调度算法模拟 信息学院 班级 完成时间 10月17日 本次实验成绩 邮件地址 主要 任务 主要 任务 主要原理及说参考的资料(包括实验内容及条件) 本实验模拟了进程调度的三种算法:静态优先级的立即抢占式调度算法;动态优先级调度算法;时间片轮转调度算法。 一、静态优先级的立即抢占式调度算法原理:在创建进程时,由系统随机产生该进程的优先数(本实验规定:优先数大者,优先权高),且优先数在生命周期中不再改变。就绪队列中的进程根据优先权高低进行排队,等待CPU运行。在进程运行过程中,如果就绪队列出现优先级更高的进程时(本实验开始运行后系统会在任意时间随机创建一个新的进程,最多共创建7个),则立即进行重新调度,剥夺当前运行进程所占有的CPU,分配给更高优先权的进程使用。 二、动态优先级调度算法原理:在创建进程时,由系统随机产生该进程的优先数(本实验规定:优先数大者,优先权高),但动态优先级的优先数随时间会发生改变。本实验的基本原则是:正在运行的程序每次运行CPU的时间为1000ms时,优先数减1,若在就绪队列中出现优先权高的进程,则剥夺当前进程所占有的CPU,分配给优先权高地进程使用,否则,继续占用CPU,当运行1000ms后,优先数继续减1,重新比较。以此循环,直至所有进程运行完为止。 三、时间片轮转调度算法原理:就绪队列中的每个进程轮流的运行一个时间片(本实验时间片为固定值2000ms),当时间片耗尽时,就强迫当前的运行进程让出处理器,转而排到就绪队列尾部,等候下一轮调度。 本实验中,在创建进程时,就绪队列按照优先权高低进行排队,然后依次从就绪队列取出首个进程根据时间片轮转法进行调度。当进程正在运行时,系统会在任意时间自动创建新的进程(规定:系统自动创建最多7个进程,此后不再创建),并根据优先级高低插入就绪队列中。当某个进程的时间片耗尽时,则排到就绪队列尾部,然后调度就绪队列的首个进程。进程每呆一个时间片,优先数减1。 以上三种算法都是每1000ms显示一次运行结果,并规定每次运行CPU时间为1000ms。 标注:R:代表正在CPU中运行;W:代表正在就绪队列中;F:代表此进程已运行完。 《计算机操作系统原理》课外上机实践 南京农业大学信息学院计算机系 第1页
主程序流程图: 开始 输入进程数,系统自动创 建指定数目的进程PCB 选择进程调度算法: 1.静态优先2.动态优先 级立即抢占级; 主要算法及流程图 (包括实验步骤) 程序结束 静态优先级立即抢占式调度流程图: 静态优先级 立即抢占式 获取进程信息,如运行时间,优先 级等,根据优先级调度进程 调用静态优先级立即抢占 式算法,优先数不改变 运行进程 进程运行完 3.时间片 轮转法 系统自动创建新的进程 《计算机操作系统原理》课外上机实践 南京农业大学信息学院计算机系 第2页
动态优先级调度流程图: 动态优先级 获取进程信息,如进程运行 时间,优先级等。根据优先 级高低进行调度 调用动态优先级算法,占用CPU 时间一次 判断进程是 否运行完 N 优先数减1 Y 判断该进程优 先级是否最高 程序结束 N 《计算机操作系统原理》课外上机实践 南京农业大学信息学院计算机系 第3页
时间片轮转法调度流程图: 时间片轮转法 获取进程信息,本程序按优 先级高低排在就绪队列 取出就绪队列首个进程, 调用时间片轮转法算法 在每个时间片内运行进程 计算各进程 剩余时间 程序运行结束 大于0 《计算机操作系统原理》课外上机实践 南京农业大学信息学院计算机系 第4页
本实验涉及的主要数据结构和函数说明 主要数据结构: PCB类包含的属性与方法: public int id;//进程唯一标识:进程号 public int prio;//进程优先数,随机产生(10以内) String in;//进程进入CPU的时间,格式为hh:mm:ss(当前系统时间) public char state;//进程的状态标志 public int cputime;//进程已在CPU运行的时间 public int needtime;//进程需要运行的时间(开始由系统随机产生,此后每运行一次,相应减少) PCB next;//用来将多个进程PCB块链接为链表 public PCB()//构造函数 {} public PCB(int id)//带参的构造函数 { } LinkList类包含的属性与方法: public static int j=0;//用来标识创建进程的ID public static PCB ready,run,finish;//分别表示运行,就绪,完成,初始化都为NULL; public static void prt3();//输出显示函数,首先输入运行队列进程,其次是就绪队列进程,最后是完成队列的进程; public static void insert(PCB q)// 按优先级高低插入就绪队列 public static void noPrioInsert(PCB q)//插入到就绪队列尾部 public static void creat(int n)//系统自动创建进程 静态优先级立即抢占式类包含的主要方法为: class staticPrio implements Runnable { public void run(){} }// 动态优先级调度算法类包含的主要方法为: class movePrio implements Runnable { public void run(){} } 时间片轮转法调度算法包含的主要方法为: class Timer implements Runnable { public void run(){} } Main方法中: Thread t1=new Thread(new staticPrio()); t1.start();//调用线程类并启动线程执行静态优先级立即抢占式调度算法 Thread t2=new Thread(new movePrio()); t2.start();//调用线程类并启动线程执行动态优先级调度算法 Thread t3=new Thread(new Timer()); t3.start();//调用线程类并启动线程执行时间片轮转法调度算法 this.id=id; 《计算机操作系统原理》课外上机实践 南京农业大学信息学院计算机系 第5页