处理机调度模拟程序

上传人:re****.1 文档编号:558923651 上传时间:2023-07-16 格式:DOCX 页数:23 大小:107.03KB
返回 下载 相关 举报
处理机调度模拟程序_第1页
第1页 / 共23页
处理机调度模拟程序_第2页
第2页 / 共23页
处理机调度模拟程序_第3页
第3页 / 共23页
处理机调度模拟程序_第4页
第4页 / 共23页
处理机调度模拟程序_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《处理机调度模拟程序》由会员分享,可在线阅读,更多相关《处理机调度模拟程序(23页珍藏版)》请在金锄头文库上搜索。

1、课程设计书系另U:计 科 系专业:计算机科学与技术班级:题目:处理机调度模拟程序教师:姓名:一 设计题目处理机调度模拟程序选择一个调度算法,实现处理机调度。二、设计要求编写一个进程调度程序,允许多个进程共行的进程调度程序。 进程调度算法采用最高优先数优先的调度算法(即把处理机分配 给优先数最高的进程)和先来先服务算法。每个进程有一个进程 控制块(PCB)表示。进程控制块可以包含如下信息:进程名、 优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定(也可 以由随机数产生)。进程的到达时间为输入进程的时间。进程的 运行时间以时间片为单位进行

2、计算。每个进程的状态可以是就绪W (Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 就绪进程获得CPU后都只能运行一个时间片,用已占用CPU时间 加1来表示。如果运行一个时间片后,进程的已占用CPU时间已 达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程 的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继 续运行,此时应将进程的优先数减1(即降低一级), 然后把它 插入就绪队列等待CPU。每进行一次调度程序都打印一次运行进 程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止 1进程调度算法包括:时间片轮转法,短作业

3、优先算法, 动态优先级算法。2 可选择进程数量3 本程序包括三种算法,执行时在主界面选择算法(可用 函数实现),进入子页面后输入进程数,(运行时间,优先数由 随机函数产生),执行,显示结果。三设计目的在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为 了使系统中的进程能有条不紊地工作,必须选用某种调度策略, 选择一进程占用处理机。要求学生设计一个模拟处理机调度算法 以巩固和加深处理机调度的概念。设计分析1、实现原理首先,编写一个进程调度类Main_PCB, 个进程信 PCB_block可以创建进程控制块(PCB)表示。进程控制块可以 包

4、含如下信息:进程名、优先数、到达时间、需要运行时间、已 用CPU时间、进程状态等等。对应成员变量是pcb_Name;pcb_ID;int pcb_Pro; PCB_Begintime(); pcb_Needtime; pcb_Spendtime; pcb_Finishtime;String pcb_Statue; 成 员 方 法是 pcb_Work ();可以实例化多个包含相同信息的进程,一个 线程类 Work 允许多个进程共行的进程调度创建各自的模拟任务, 由 process_Create(intProcess_ProcessNum)方法实现创建Process_ProcessNum 个进程。

5、接着,编写进程调度算法(1) 最高优先数优先的调度算法 HIGH_method() (这里采用 把处理机分配给优先数最高的进程);(2) 先来先服务算法 FIFS_method()。以上,两个方法都是Main_PCB的成员方法,由Main_PCB的主调 函数main ()调用call ()方法进行调用。进程的优先数及需要的运行时间这里由由随机数产生。进程 的到达时间为创建进程的时间。进程的运行时间以时间片为单位 进行计算。每个进程的状态可以是就绪W (Wait)、运行R(Run)、或 完成F (Finish)三种状态之一。这里采用线程的睡眠sleep() 方法实现,最后通过进程的开始时间、执行

6、时间和结束时间,观 察进程的执行过程。2、程序执行过程(1)开始执行 Main_PCB 主调方法 main();(2) 调用方法 process_Crea te(ProcessNum)创建 ProcessNum 个进程调用 call(method) 方法;(a) 如果met hod =1执行FIFS_me thod()先来先服务算法,接 着执行创建进程的个子作业线程;(b) 如果method =2执行HIGH_method()最高优先数优先的调 度算法,接着执行创建进程的个子作业线程(3) 输出程序执行的开始,和结束时间。TC23结束4、实现类图Main_PCBVariable process

7、ID ProcessNumTimePcb_Que excuteQueue processNamePCB_blockpcb_Begintime pcb_Finishtime pcb_ID pcb_Name pcb_Needtime pcb_Needtime pcb_Needtime pcb_Needtime+ pcb_Work()+ main ()+ call () +HIGH_method () +FIFS_method () +process_Create () +printSign ()5、实现用到的数据结构根据类图可以分析出所采用的数据结构有:(1)队列主要完成FIFS_method (

8、)算法,进程的先来先 服务;Process0Process1ProcessN2) 堆栈主要完成方法的调用时,先调用的后执行;3) 数组采用链表 主要用来记录进程创建时的信息,为以后观察其创建的初值 运行过程和执行结果; 采用链表数组的好处是可以实现数组的长度动态变化;五程序代码Main_PCB 如下:package PCB_con;import java.lang.*;import java.lang.Object;import java.io.*;import java.util.*; public class Main_PCB public static int variable;publ

9、ic static int processID ;public static int ProcessNum=5;public static Date Time =new Date();public static PCB_block Pcb_Que = new PCB_blockProcessNum; public static int excuteQueue=new intPcb_Que.length;/public static int sort = new intProcessNum;public static String processName = new StringProcessN

10、um; public static intprocessId = new intProcessNum;public static int processPro =new intProcessNum;public static int processBt= new int2ProcessNum;public static int processSpt =new intProcessNum;public static int processNt =new intProcessNum;public static int processFt =new intProcessNum;public stat

11、ic String processSta = new StringProcessNum; public static Work processWk = new WorkProcessNum;/主调方法public static void main(String args)/int ProcessNum=Integer.parseInt(args0);/Z命令行输入创建进程的 个数;/int callMethod=Integer.parseInt(args0);命令行输入调用的算法FIFS 值为 1 或 优先级值为 2;printSign();System.out.printlnC创建的进程数量

12、是:+ProcessNum);System.out.println();process_Create(ProcessNum);call(1);call(2);/call方法static void call(int callmeth)if (callmeth=1) FIFS_method();else if (callmeth=2) HIGH_method();elseSystem.out.println(”没有进程的调度算法被执行! !); /最高优先数优先调度public static void HIGH_method()System.out.println();System.out.pri

13、ntln(-);System.out.println(最高优先数算法被调度 );System.out.println(-);System.out.printlnC公共变量的初值是:+variable); int sort = new intProcessNum;for(int i=0;isort.length;i+) sorti =processProi;for(int i=0;isort.length;i+) int temp;for(int j=0;jsort.length-1;j+) if(sortjsortj+1) temp=sortj;sortj=sortj+1; sortj+1=t

14、emp;System.out.println( 优先级排序: ) ;for(int i=0;isort.length;i+)System.out.println(sorti);System.out.println();System.out.printlnC进程被执行的顺序为:”); for(int i=0;isort.length ;i+)int j=0; while(sorti!=processProj ) if (jprocessPro.length-1 )j+;System.out.println(Step +i+:执行+processNamej); int sleeptime =(in

15、t)(Math.random()*10000); processWkj.workMethod(j,sleeptime) ;/processWki.run();System.out.println(公共变量的当前值是:+variable);/先来先服务调度方法public static void FIFS_method()System.out.println();System.out.println( );System.out.println(先来先服务算法被调度 );System.out.println( );System.out.printlnC进程被执行的顺序为:”); for(int i=0; iexcuteQueue.length;i+) int

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号