版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华北科技学院计算机学院综合性实验报告PAGE 第1页华北科技学院计算机学院综合性实验实验报告课程名称计算机操作系统实验学期2014至2015学年第一学期学生所在系部计算机学院年级2012专业班级计科B121学生姓名张传辉学号201207014117任课教师王祥仲实验成绩计算机学院制
《操作系统》课程综合性实验报告开课实验室:基础六2014年11月30日实验题目进程调度算法模拟程序设计一、实验目的通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。二、设备与环境1.硬件设备:PC机一台2.软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C\C++\Java等编程语言环境。三、实验内容用C语言(或其它语言,如Java)编程实现对N个进程采用某种进程调度算法(如动态优先权调度算法、先来先服务算法、短进程优先算法、时间片轮转调度算法)调度执行的模拟。(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:进程标识数ID。进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。进程已占用CPU时间CPUTIME。进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。进程状态STATE。队列指针NEXT,用来将PCB排成队列。(3)优先数改变的原则:进程在就绪队列中呆一个时间片,优先数增加1。进程每运行一个时间片,优先数减3。(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。(5)分析程序运行的结果,谈一下自己的认识。}for(i=0;i<process_number;i++){ System.out.print(completion_time[i]+"\t");}System.out.println("\n周转时间是:");for(i=0;i<process_number;i++){turn_around_time[i]=completion_time[i]-arrival_time[i];}for(i=0;i<process_number;i++){System.out.print(turn_around_time[i]+"\t");}add1=0;for(i=0;i<process_number;i++){ add1=add1+turn_around_time[i];}System.out.println("\n平均周转时间是:"+add1/process_number);System.out.println("\n带权周转时间是:");for(i=0;i<process_number;i++){right_turn_around_time[i]=turn_around_time[i]*1.0/services_time[i];}for(i=0;i<process_number;i++){System.out.print(right_turn_around_time[i]+"\t");}System.out.println("\n平均带权周转时间是:");add2=0;for(i=0;i<process_number;i++){add2=add2+right_turn_around_time[i];}System.out.println(add2/process_number);}privatevoidSJF(){System.out.println("\n===SJF:短作业优先算法===");System.out.println("\n到达时间是:");for(i=0;i<process_number;i++){ System.out.print(arrival_time[i]+"\t");}System.out.println("\n服务时间是:");for(i=0;i<process_number;i++){ System.out.print(services_time[i]+"\t");}System.out.println("\n开始时间是:");m[0]=0;for(i=0;i<process_number-1;i++){ if(arrival_time[i]>arrival_time[i+1]) m[0]=i+1;}for(i=0;i<process_number;i++){ n[i]=services_time[i]; m[i+1]=i;}for(i=0;i<process_number-1;i++){ for(j=i+1;j<process_number;j++){ if(n[i]>n[j]){ temp=n[i]; n[i]=n[j]; n[j]=temp; temp=m[i+1]; m[i+1]=m[j+1]; m[j+1]=temp; } }}for(i=1;i<process_number+1;i++){ if(m[0]==m[i]){ for(j=i;j<process_number;j++){ m[j]=m[j+1]; } }}start_time[m[0]]=arrival_time[m[0]];for(i=1;i<process_number;i++){ if(arrival_time[m[i]]<start_time[m[i-1]]+services_time[m[i-1]]) start_time[m[i]]=start_time[m[i-1]]+services_time[m[i-1]]; else start_time[m[i]]=arrival_time[m[i]];}for(i=0;i<process_number;i++){ System.out.print(start_time[i]+"\t");}System.out.println("\n完成时间是:");for(i=0;i<process_number;i++){ completion_time[i]=start_time[i]+services_time[i];}for(i=0;i<process_number;i++){ System.out.print(completion_time[i]+"\t");}System.out.println("\n周转时间是:");for(i=0;i<process_number;i++){turn_around_time[i]=completion_time[i]-arrival_time[i];}for(i=0;i<process_number;i++){System.out.print(turn_around_time[i]+"\t");}add3=0;for(i=0;i<process_number;i++){ add3=add3+turn_around_time[i];}System.out.println("\n平均周转时间是:"+add3/process_number);System.out.println("\n带权周转时间是:");for(i=0;i<process_number;i++){right_turn_around_time[i]=turn_around_time[i]*1.0/services_time[i];}for(i=0;i<process_number;i++){System.out.print(right_turn_around_time[i]+"\t");}System.out.println("\n平均带权周转时间是:");add4=0;for(i=0;i<process_number;i++){add4=add4+right_turn_around_time[i];}System.out.println(add4/process_number);}publicstaticvoidmain(String[]args)throwsException{System.out.println("请输入进程数:");FCFSANDSJFwo=newFCFSANDSJF();BufferedReaderbuf=null;buf=newBufferedReader(newInputStreamReader(System.in));Stringstr1=null;str1=buf.readLine();cess_number=Integer.parseInt(str1);wo.arrival_time=newint[cess_number];wo.services_time=newint[cess_number];wo.start_time=newint[cess_number+1];pletion_time=newint[cess_number+1];wo.turn_around_time=newint[cess_number+1];wo.right_turn_around_time=newdouble[cess_number+1];wo.m=newint[cess_number+1];wo.n=newint[cess_number];Stringstr=null;Stringstr2=null;System.out.println("\n请输入各进程到达时间");for(i=0;i<cess_number;i++){str=buf.readLine();wo.arrival_time[i]=Integer.parseInt(str);}System.out.println("\n请输入各个进程服务时间");for(i=0;i<cess_number;i++){str2=buf.readLine();wo.services_time[i]=Integer.parseInt(str2);}System.out.println("该进程数为"+cess_number);System.out.println("\n到达时间为");for(i=0;i<cess_number;i++){System.out.print(wo.arrival_time[i]+"\t");}System.out.println("\n服务时间为:");for(i=0;i<cess_number;i++){System.out.print(wo.services_time[i]+"\t");}System.out.println("\n======先来先服务【0】========");System.out.println("\n======短作业优先【1】========");System.out.println("\n======退出系统【2】========");Stringstr3=null;str3=buf.readLine();i=Integer.parseInt(str3);while(i!=2){ switch(i){ case0: wo.FCFS(); break; case1: wo.SJF(); break; default: System.out.println("\n输入有误,请重新输入"); } System.out.println("\n======先来先服务【0】========"); System.out.println("\n======短作业优先【1】========"); System.out.println("\n======退出系统【2】========"); str3=buf.readLine(); i=Integer.parseInt(str3);}System.out.println("系统已退出!");}}实验结果及分析运行结果分析FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进度调度。当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房间卫生责任制度
- 护理二级质控责任制度
- 招商引资审查责任制度
- 掘进工种岗位责任制度
- 搅拌站各领导责任制度
- 收粮责任制度
- 政府人员保密责任制度
- 教学安全责任制度
- 教职员工责任制度
- 敬老院财务管理责任制度
- 部编版五年级下册《道德与法治》全册表格式教案
- 2025国家国防科技工业局某事业单位招聘15人历年高频重点提升(共500题)附带答案详解
- 环境应急管理知识培训
- 2024年抚州职业技术学院单招职业适应性测试题库带答案
- 混凝土新业务员培训教材
- 湖北中小学生命安全教育课程标准
- 光伏发电工程建设标准工艺手册(2023版)
- 职业技术学校兽医临床诊疗技术教案
- 小学组织管理与运行
- MOOC 颈肩腰腿痛中医防治-暨南大学 中国大学慕课答案
- 曲面造型中基于网格曲面的建模与分析技术
评论
0/150
提交评论