版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计书系别:计 科系专业:计算机科学与技术班级:题目:处理机调度模拟程序教师:姓名:.设计题目处理机调度模拟程序选择一个调度算法,实现处理机调度、设计要求编写一个进程调度程序,允许多个进程共行的进程调度程序。 进程调度算法采用最高优先数优先的调度算法(即把处理机分配给 优先数最高的进程)和先来先服务算法。每个进程有一个进程控制 块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、 到达时间、需要运行时间、已用 CPLW间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定(也可 以由随机数产生)。进程的到达时间为输入进程的时间。进程的 运行时间以时间片为单位进行计算。每
2、个进程的状态可以是就绪 W(Wait)、运行R( Rur)、或完成F (Finish )三种状态之一。 就绪进程获得CPU后都只能运行一个时间片,用已占用 CPU时间 加1来表示。如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后 进程的已占用CPU时间还未达所需要的运行时间,也就是进程还 需要继续运行,此时应将进程的优先数减 1 (即降低一级),然后 把它插入就绪队列等待CPU每进行一次调度程序都打印一次运行 进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止1 进程调度算法包括:时间片轮转法,短作业
3、优先算法,动 态优先级算法。2可选择进程数量3本程序包括三种算法,执行时在主界面选择算法(可用函 数实现),进入子页面后输入进程数,(运行时间,优先数由随 机函数产生),执行,显示结果。三. 设计目的在多道程序和多任务系统中,系统内同时处于就绪状态的进 程可能有若干个。也就是说能运行的进程数大于处理机个数。为21 了使系统中的进程能有条不紊地工作,必须选用某种调度策略, 选择一进程占用处理机。要求学生设计一个模拟处理机调度算法, 以巩固和加深处理机调度的概念。四. 设计分析1、实现原理首先,编写一个进程调度类Main_PCB, 一个进程信 PCB_block可以创建进程控制块(PCB)表示。进
4、程控制块可以 包含如下信息:进程名、优先数、到达时间、需要运行时间、已 用CPU时间、进程状态等等。对应成员变量是pcb_Name;pcb_ID;i nt pcb_Pro; PCB_Begi ntime(); pcb_Needtime; pcb_Spendtime; pcb_Finishtime;Stringpcb_Statue;成员方法是pcb_Work ();可以实例化多个包含相同信息的进程,一个线程 类Work允许多个进程共行的进程调度创建各自的模拟任务,由 process_Create(int Process_ProcessNum) 方法实现创建 Process_ProcessNu m
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();22(2) 调用方法 process_Create(ProcessNum)创建 ProcessNum个进程一调用 call(method)方法;(a) 如果method =1执行FIFS_method()先来先服务算法,接 着执行创建进程的个子作业线程;(b) 如果method =2执行HIGH_method()最高优先数优先的调 度算法,接着执行创建进程的个子作业线程(3) 输出程序执行的开始,和结束时间。234、实现类图Main_PCBVariable processI
7、D ProcessNumTimePcb_Que excuteQueue processNamePCB_block pcb_Begi ntime pcb_ Fini shtime 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_met
8、hod ()算法,进程的先来先 服务;Process。ProcesslProcessN(2) 堆栈主要完成方法的调用时,先调用的后执行;24FIFS_method ()call ()main ()(3) 数组采用链表主要用来记录进程创建时的信息,为以后观察其创建的初值、 运行过程和执行结果;采用链表数组的好处是可以实现数组的长度动态变化;五. 程序代码Main_PCB 如下:package PCB_c on;import java .Ian g.*;import java .Ian g.Object;import java.io.*;import java.util.*;public clas
9、s Main_PCB public static int variable;25 public 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 in tPcb_Que .len gth;/public static in t sort = new in tProcessNum;publ
10、ic static Strin g processName = new Strin gProcessNum;public static in tprocessld = new in tProcessNum;public static in t processPro =new in tProcessNum;public static in t processBt= new in t2ProcessNum;public static in t processSpt =new in tProcessNum;public static in t processNt =new in tProcessNu
11、m;public static in t processFt =new in tProcessNum;public static String processSta = new Strin gProcessNum;public static Work processWk = new WorkProcessNum;/主调方法public static void main(String args)/int ProcessNum=Integer.parselnt(args0); 命令行输入创建进程的 个数;/int callMethod=Integer.parseInt(args0); 命令行输入调
12、用的算法FIFS值为1或优先级值为2;printSign();System.out.println(” 创建的进程数量是:+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 stat
13、ic void HIGH_method()26System.out.pri ntl n();System.out.println(”);System.out.println(”最高优先数算法被调度 );System.out.println(”);System.out.println(” 公共变量的初值是:+variable);in t sort = new in tProcessNum;for(i nt i=0;isorten gth;i+)sorti=processProi;for(i nt i=0;isorten gth;i+)int temp;for(i nt j=0;jsort .le
14、n gth-1;j+)if(sortjsortj+1)temp=sortj;sortj=sortj+1;sortj+1=temp;System.out.println(” 优先级排序:);for(i nt i=0;isort .len gth;i+)System.out.pri ntl n( sorti);System.out.pri ntl n();System.out.println(”进程被执行的顺序为:”);for(i nt i=0;isort .len gth ;i+)int j=0;while(sorti!=processProj )if (jvprocessPr o.len gt
15、h-1 )j+;System.out.println(Step +i+:执行+processNamej);int sleeptime =(i nt)(Math.ra ndom()*10000);processWkj.workMethod(j,sleeptime);processWki.ru n();System.out.println(” 公共变量的当前值是:+variable);/先来先服务调度方法27public static void FIFS_method()System.out.pri ntl n();System.out.println(”);System.out.println(
16、”先来先服务算法被调度 );System.out.println(”);System.out.println(”进程被执行的顺序为:”);for(i nt i=0; iexcuteQueue .len gth;i+)int j=0;while(excuteQueuei!=processldj ) if(jprocessId .len gth-1 )j+;System.out.println(Step +i+: 执行 +processNamej); /processWki.run();processWkj.workMethod(j) ;输出标志static void printSign()Sys
17、tem.out.pri ntl n(););System.out.pri ntl n(*System.out.pri ntl n(Process11*”);11*”System.out.pri ntl n(); /进程创建方法static void process_Create(int Process_ProcessNum)PCB_block Pcb_Que =new PCB_blockProcess_ProcessNum;in t proID = new in tPcb_Que.le ngth;System.out.pri ntln(”进程刚被创建是的信息如下:);System.out.pr
18、intln();for(int i=0;iPcb_Que.length;i+)PCB_block Process =new PCB_block();processID = i;Process.pcb_Name =process+i;Process.pcb_ID =10*i;Process.pcb_Pro =(i nt) (Math.ra ndom()*100);Process.pcb_Needtime =(i nt)( Math.ra ndom()*1000);28Process.pcb_Spe ndtime =0;Process.pcb_Begi ntime.mi nute = Time.g
19、etMi nu tes();Process.pcb_Begi ntime.sece nd = Time.getSec on ds(); Process.pcb_Statue =Wait;class ProMeth exte nds Workpublic void run()public void workMethod(int id,int sletim)System.out.println();System.out.pri ntl n( Process+id+: Start runnin g!);System.out.pri ntl n();Date date1 = new Date();Sy
20、stem.out.println(” 开始时间:+(date1.toStri ng().substri ng( 10,20);/*帮助调试线程的执行* try * wait();catch(Exception e)System.out.pri ntln (Process+processlD+有异常:+e.toStri ng();*/int sleeptime =sletim;System.out.pri ntln (sleep time+sleeptime);for(i nt i =0;i20;i+)variable=variable+i;try sleep(sleeptime);/sleep
21、(sleeptime);catch(Exception e)System.out.pri ntln( e.toStri ng();System.out.pri ntln( Process+id+: Fini shed!);Date date2 = new Date();System.out.println(” 结束时间:+(date2.toString().substring( 10,20);System.out.println(” 执行后的公共变量是:+variable);System.out.println();29Process.pcb_Work =new ProMeth();记录进程的
22、信息到数组processNamei=Process.pcb_Name; processProi=Process.pcb_Pro;processIdi= Process.pcb_ID; processSpti=Process.pcb_Spe ndtime; processNti=Process.pcb_Needtime; processStai=Process.pcb_Statue; processWki=Process.pcb_Work; processBt0i=Process.pcb_Beg in time. minu te; processBt1i=Process.pcb_Beg in t
23、ime.sece nd;Pcb_Quei = Process;System.out.println(”#Process+i+刚创建时的信息 PCB#);System.out.pri ntl n();System.out.pri ntl n(”Name:+Pcb_Quei.pcb_Name);System.out.pri ntl n(”createTime:+Time.toStri ng();System.out.pri ntl n(”ID:+Pcb_Quei.pcb_ID);System.out.pri ntl n(”Needtime:+Pcb_Quei.pcb_Needtime);Syste
24、m.out.pri ntln(”Pro:+Pcb_Quei.pcb_Pro );System.out.pri ntl n(”Spen dtime:+Pcb_Quei.pcb_Spe ndtime );System.out.pri ntln (”curre nt status:+Pcb_Quei.pcb_Statue);System.out.pri ntl n();proIDi = Pcb_Quei.pcb_ID ;excuteQueue = proID; /被创建进程的存贮数组public static void store_ProcessInfoArray()进程信息类class PCB_b
25、lock30String pcb_Name;in t pcb_ID;int pcb_Pro;PCB_Begi ntime pcb_Begi ntime= new PCB_Begi ntime();int pcb_Needtime;int pcb_Spendtime;int pcb_Finishtime;String pcb_Statue;Work pcb_Work = new Work();进程工作的线程class Work exte nds Threadpublic void run()public static void main(String args)int var=0;Work p=
26、 new Work();System.out.pri ntl n();p.workMethod();p.workMethod(var);void workMethod()void workMethod(i nt sletim)try sleep(sletim);catch(Exception e)System.out.pri ntln( e.toStri ng();void workMethod(i nt id,i nt sletim)class PCB_Begi ntimeint minute;int secend;31先来先服务调度方法:public static void FIFS_me
27、thod()System.out.pri ntl n(););System.out.println(”);System.out.println(”先来先服务算法被调度System.out.println(”);System.out.println(”进程被执行的顺序为:”);for(i nt i=0; iexcuteQueueen gth;i+) int j=0;while(excuteQueuei!=processldj ) if(jprocessIden gth-1 )j+;System.out.println(Step +i+: 执行 +processNamej); /processWk
28、i.run();processWkj.workMethod(j) ;/输出标志static void printSign()System.out.println(*););System.out.pri ntl n( *ProcessSystem.out.pri ntl n(*);System.out.pri ntl n();Process.pcb_Work =new ProMeth();/记录进程的信息到数组processNamei=Process.pcb_Name; processProi=Process.pcb_Pro;processIdi= Process.pcb_ID; process
29、Spti=Process.pcb_Spendtime; processNti=Process.pcb_Needtime; processStai=Process.pcb_Statue; processWki=Process.pcb_Work;processBt0i=Process.pcb_Begintime.minute;32processBt1i=Process.pcb_Begi ntime.sece nd;Pcb_Quei = Process;System.out.println(”#Process+i+冈U 仓U 建时的信息PCB#);System.out.pri ntl n();Sys
30、tem.out.pri ntl n(”Name:+Pcb_Quei.pcb_Name);System.out.pri ntl n(”createTime:+Time.toStri ng();System.out.pri ntl n(”ID:”+Pcb_Quei.pcb_ID);System.out.pri ntl n(”Needtime:+Pcb_Quei.pcb_Needtime);System.out.pri ntl n(”Pro:+Pcb_Quei.pcb_Pro );System.out.pri ntl n(”Spen dtime:+Pcb_Quei.pcb_Spe ndtime );
31、System.out.pri ntln (”curre nt status:+Pcb_Quei.pcb_Statue);System.out.pri ntl n();proIDi = Pcb_Quei.pcb_ID ;excuteQueue = proID;/被创建进程的存贮数组public static void store_ProcessInfoArray()/进程信息类class PCB_blockString pcb_Name;in t pcb_ID;int pcb_Pro;PCB_Begi ntime pcb_Begi ntime= new PCB_Begi ntime();int
32、pcb_Needtime;int pcb_Spendtime;int pcb_Finishtime;String pcb_Statue;Work pcb_Work = new Work();33/进程工作的线程class Work exte nds Threadpublic void run()public static void main( Stri ng args) int var=0;Work p= new Work();System.out.println();/p.workMethod();p.workMethod(var);void workMethod()void workMet
33、hod(int sletim)try sleep(sletim);catch(Exception e) System.out.println(e.toString() );void workMethod(int id,int sletim)/时间的分和时类class PCB_Begi ntimeint minute;int secend;部分程序代码:package PCB_con;import java.lang.*;import java.lang.Object;import java.io.*;import java.util.*;public class Main_PCB public
34、 static int variable;34public 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 in tPcb_Queen gth;/public static in t sort = new in tProcessNum;/被创建进程的存贮数组public static
35、Strin g processName = new Strin gProcessNum;public static in tprocessld = new in tProcessNum;public static in t processPro =new in tProcessNum;public static in t processBt= new in t2ProcessNum;public static in t processSpt =new in tProcessNum;public static in t processNt =new in tProcessNum;public s
36、tatic in t processFt =new in tProcessNum;public static String processSta = new Strin gProcessNum;public static Work processWk = new WorkProcessNum;/主调方法public static void main(String args)/int ProcessNum=Integer.parselnt(args0); 命令行输入创建进程的个 数;/int callMethod=Integer.parselnt(args0); 命令行输入调用的算法 FIFS
37、值为1或优先级值为2;printSign();System.out.println(” 创建的进程数量是:+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
38、 HIGH_method()35System.out.pri ntl n();System.out.println(”);System.out.println(”最高优先数算法被调度 );System.out.println(”);System.out.println(” 公共变量的初值是:+variable);in t sort = new in tProcessNum;for(i nt i=0;isorten gth;i+) sorti=processProi;for(i nt i=0;isort .len gth;i+)int temp;for(i nt j=0;jsort .len g
39、th-1;j+) if(sortjsortj+1) temp=sortj; sortj=sortj+1; sortj+1=temp;System.out.println(” 优先级排序:);for(i nt i=0;isort .len gth;i+)System.out.pri ntl n( sorti);System.out.pri ntl n();System.out.println(”进程被执行的顺序为:”);for(i nt i=0;isort .len gth ;i+)int j=0;while(sorti!=processProj )if (jvprocessPr o.len g
40、th-1 )j+;System.out.println(Step+i+:执行+processNamej);int sleeptime =(i nt)(Math.ra ndom()*10000); processWkj.workMethod(j,sleeptime);processWki.ru n();System.out.println(” 公共变量的当前值是:+variable);36进程创建方法static void process_Create(i nt Process_ProcessNum)PCB_block Pcb_Que =n ew PCB_blockProcess_Process
41、Num;in t proID = new in tPcb_Que.le ngth;System.out.pri ntl n(”进程刚被创建是的信息如下:);System.out.println();for(i nt i=0;iPcb_Que.le ngth;i+)PCB_block Process =new PCB_block();processID = i;Process.pcb_Name =process+i;Process.pcb_ID =10*i;Process.pcb_Pro =(i nt) (Math.ra ndom()*100);Process.pcb_Needtime =(i
42、nt)( Math.ra ndom()*1000);Process.pcb_Spe ndtime =0;Process.pcb_Begi ntime.mi nute = Time.getMi nu tes(); Process.pcb_Begi ntime.sece nd = Time.getSec on ds(); Process.pcb_Statue =Wait;class ProMeth exte nds Workpublic void run()public void workMethod(int id,int sletim)System.out.println();System.ou
43、t.println(Process+id+:Start running!);System.out.println();Date date1 = new Date();System.out.println(” 开始时间:+(date1.toString().substring( 10,20);/*帮助调试线程的执行* try * wait();catch(Exception e)System.out.pri ntln (Process+processlD+有异常:+e.toStri ng();*/int sleeptime =sletim;System.out.println(sleep tim
44、e+sleeptime);for(i nt i =0;i20;i+)variable=variable+i;37try sleep(sleeptime);/sleep(sleeptime);catch(Exceptio n e)System.out.println(e.toString();System.out.pri ntln( Process+id+: Fi nished!); Date date2 = new Date();System.out.println(结束时间:+(date2.toString().substring( 10,20);System.out.println(” 执
45、行后的公共变量是:+variable);System.out.pri ntl n();六、执行结果和结果分析*Process*创建的进程数量是:5进程刚被创建是的信息如下:#Process0 刚创建时的信息 PCB#Name:process0createTime:Thu Dec 15 15:41:14 CST 2005ID:0Needtime:164Pro:9Spen dtime:0curre nt status:Wait#Process1 刚创建时的信息 PCB#Name:process1createTime:Thu Dec 15 15:41:14 CST 2005ID:1038Needtime:636Pro:11Spen dtime:0curre nt status:Wait#Process2 刚创建时的信息 PCB#Name:process2createTime:Th
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 早教老师礼仪培训
- 新学期班级家长会培训
- 《ME人机料法环测》课件
- 珍惜现在把握未来
- 全新海鲜供货合同模板下载
- 二零二四年度物联网技术研发应用合同3篇
- 《如何做好出纳工作》课件
- 房屋买卖合同补充协议书(2篇)
- 《SOP制定与实施》课件
- 《矿井火灾》课件
- GB 12955-2024防火门
- 直播电商代运营服务协议(GMV计费模式)
- 2024-2030年中国城市更新行业发展创新模式及投资规划研究报告
- 2024-2030年中国公路养护行业改革创新模式及未来发展规划分析报告
- 北京市海淀区2024-2025学年高三上学期11月期中考试地理试题 含解析
- 西门子S7-1500 PLC技术及应用 课件 第2章 S7-1500 PLC的系统配置与开发环境
- 2024年中国瓦楞包装纸箱市场调查研究报告
- 语文统编版(2024)一年级上册语文园地七 教案
- 安全培训合同范本3篇
- 2024年电工(高级技师)考前必刷必练题库500题(含真题、必会题)
- 江苏省南通市(2024年-2025年小学四年级语文)人教版能力评测(上学期)试卷及答案
评论
0/150
提交评论