




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、淮海工学院计算机工程学院实验报告书课程名: 操作系统原理A 题 目: 进程调度 班 级: 计算机142 学 号: 2014122778 姓 名: 陈韦迪 评语:成绩: 指导教师: 批阅时间: 年 月 日 大型数据库系统概论实验报告 - 11 -1、 目的与要求进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用Java或C/C+语言编写一个进程调度模拟程序,至少使用先来先服务、短进程优先、最高优先权优先或时间片轮转法四种算法中的两种算法来实现进程调度。通过本实验可加深对进程调度算法的理解。2、 实验内容1、设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示
2、。2、模拟调度程序至少使用先来先服务、短进程优先、最高优先权优先或时间片轮转法四种算法中的两种算法来实现进程调度。3、程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。3、 实验步骤程序包括主函数、FCFS算法函数、SJF算法函数、输出函数; 主函数流程:输入文件中的数据显示各进程数据选择算法调用相应算法的函数输出结果。算法流程图: 1.FCFS先来先服务算法流程图:YN开 始按顺序执行判断上一个进程的完成时间是否大于下一个进程的到达时间上个进程的开始时间从下个进程的完成时间开始下个进程的开始时间从它到达的时间开始更新各数据循环累加,求总的周转时间,总的带权周转时间求平均
3、周转时间,带权周转时间输出结果调用结束2.SJF短作业优先算法流程图:YN开 始按顺序执行判断上一个进程的完成时间是否大于下一个进程的到达时间上个进程的开始时间从下个进程的完成时间开始下个进程的开始时间从它到达的时间开始更新各数据循环累加,求总的周转时间,总的带权周转时间求平均周转时间,带权周转时间输出结果调用结束4、 测试数据与实验结果(可以抓图粘贴)测试数据:用“text.txt文件在同一目录输入相关数据,并选择相应算法输出。测试格式: 5 0 1 2 3 4 2 3 4 5 2输入结果:FCFS:SJF:五、结果分析与实验体会1、遇到的问题:一开始没有设置判断进程是否到达,导致短进程优先
4、运行错误,后来加上判断语句后就解决了该问题。2、算法性能分析及改进: 应该让进程没有到达先后顺序也依然能算出结果,即加入循环,判断各个进程的先后,组成有序数列。3、 实验体会: 通过本次实验,我加深了对先来先服务算法和短作业优先算法的理解,培养了自己的编程能力,通过实践加深了记忆。附源代码:#include<iostream> #include<iomanip> #include<sstream> #include<fstream> using namespace std; const int MaxNum=100; int ArrivalTim
5、eMaxNum; /到达时间 int ServiceTimeMaxNum; /服务时间 int FinishTimeMaxNum; /完成时间 int WholeTimeMaxNum; /周转时间 double WeightWholeTimeMaxNum; /带权周转时间 double AverageWT_FCFS,AverageWT_SJF; /平均周转时间 double AverageWWT_FCFS,AverageWWT_SJF; /平均带权周转时间 void FCFS(int n); /先来先服务 void SJF(int n); /短作业优先 void print(int n,int
6、 array); void print(int n,double array); void printproceed(int n); /输出FCFS进程运行状态 void main() int n,i,j; /n:进程数;i、j:循环计数变量 ifstream in("text.txt");/读文件 string s; for(i=0;i<3,getline(in,s);i+) /当i=0读入进程数n ;i=1读入各进程到达时间 ;i=2读入各进程服务时间 istringstream sin(s); switch(i) case 0: sin>>n; br
7、eak; case 1: for(j=0;j<n;j+) sin>>ArrivalTimej; break; case 2: for(j=0;j<n;j+) sin>>ServiceTimej; break; /显示各进程数据 cout<<setfill(' ')<<setw(7)<<"进程名"<<setw(1)<<"" char ch='A' for(i=0;i<n;i+) cout<<setw(3)<
8、<char(ch+i); cout<<endl<<"到达时间" for(i=0;i<n;i+) cout<<setw(3)<<ArrivalTimei; cout<<endl<<"服务时间" for(i=0;i<n;i+) cout<<setw(3)<<ServiceTimei; cout<<endl; /选择算法:先来先服务FCFS->1 短作业优先SJF->2 关闭->0 cout<<"
9、请选择算法: FCFS->1 SJF->2 退出->0"<<endl<<"选择:" int choice; cin>>choice; while(choice!=0) /直到输入值为0跳出循环,结束程序 while(choice!=1 && choice !=2 && choice!=0 ) cout<<"Please enter 0, 1 or 2!"<<endl; cin>>choice; if(choice=0) re
10、turn; if(choice=1) FCFS(n); /进行先来先服务FCFS算法 else SJF(n); /进行短作业优先服务SJF算法 cout<<endl<<"请选择: FCFS->1 SJF->2 退出->0"<<endl<<"选择:" cin>>choice; return; /-先来先服务- void FCFS(int n) /第一个进程先服务 FinishTime0=ArrivalTime0+ServiceTime0; WholeTime0=FinishTim
11、e0-ArrivalTime0; WeightWholeTime0=double(WholeTime0)/double(ServiceTime0); for(int i=1;i<n;i+) if(FinishTimei-1>ArrivalTimei) /如果上一个进程的完成时间大于下一个进程的到达时间 FinishTimei=FinishTimei-1+ServiceTimei;/那么下一个进程的开始时间从上一个进程的完成时间开始 else FinishTimei=ArrivalTimei+ServiceTimei;/否则,下一个进程的开始时间从它本身的到达时间开始 WholeTi
12、mei=FinishTimei-ArrivalTimei; WeightWholeTimei=double(WholeTimei)/double(ServiceTimei); double totalWT=0,totalWWT=0; for(int j=0;j<n;j+) /循环累加,求总的周转时间,总的带权周转时间 totalWT+=WholeTimej; totalWWT+=WeightWholeTimej; AverageWT_FCFS=totalWT/double(n); AverageWWT_FCFS=totalWWT/double(n); /输出各结果 cout<<
13、;"-先来先服务FCFS-"<<endl; cout<<"完成时间分别为:" print(n,FinishTime); cout<<"周转时间分别为:" print(n,WholeTime); cout<<"带权周转时间分别为:" print(n,WeightWholeTime); cout<<"平均周转时间:"<<AverageWT_FCFS<<endl; cout<<"平均带权周转时间:
14、"<<AverageWWT_FCFS<<endl; printproceed(n); /-短作业优先- void SJF(int n) int Short; /存放当前最短作业的序号 int Finish=0; /存放当前完成时间 double totalWT=0,totalWWT=0; for(int a=0;a<n;a+) /初始化完成时间为0 FinishTimea=0; int i; /循环计数累加变量 for(i=0;i<n;i+) int tag=0; /用于标记当前完成时间内,是否找到短作业 int Max=10000; for(in
15、t j=0;j<n;j+) if(FinishTimej=0 && ArrivalTimej<=Finish && ServiceTimej<=Max) Max=ServiceTimej; Short=j; tag=1; if(tag=1) /找到短作业 FinishTimeShort=Finish+ServiceTimeShort; if(tag=0) /未找到 for(int k=0;k<n,FinishTimek=0;k+) /直接进入下一未完成进程 Short=k; break; FinishTimeShort=ArrivalTi
16、meShort+ServiceTimeShort; Finish=FinishTimeShort; for(i=0;i<n;i+) /计算周转时间、带权周转时间 WholeTimei=FinishTimei-ArrivalTimei; WeightWholeTimei=double(WholeTimei)/double(ServiceTimei); for(int j=0;j<n;j+) /计算总的周转时间、总的带权周转时间 totalWT+=WholeTimej; totalWWT+=WeightWholeTimej; AverageWT_FCFS=totalWT/double(
17、n); AverageWWT_FCFS=totalWWT/double(n); /输出各值 cout<<"-短作业优先SJF-"<<endl; cout<<"完成时间:" print(n,FinishTime); cout<<"周转时间:" print(n,WholeTime); cout<<"带权周转时间:" print(n,WeightWholeTime); cout<<"平均周转时间:"<<AverageW
18、T_FCFS<<endl; cout<<"平均带权周转时间:"<<AverageWWT_FCFS<<endl; printproceed(n); void print(int n,int array) /打印int型数组 for(int i=0;i<n;i+) cout<<arrayi<<" " cout<<endl; void print(int n,double array) /打印double型数组 for(int i=0;i<n;i+) cout<<arrayi<<" " cout<<endl; void printproceed(int n) /打印各时刻各进程的运行情况 char ch='A' for(int i=0;i<n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中药新药研发策略优化:2025年现代化进程与市场潜力预测
- 宠物保健品市场细分需求研究:2025年宠物消费与产品创新深度报告
- 远程医疗在偏远地区医疗服务中的患者满意度调查与分析报告
- 咸阳师范学院《舞蹈V》2023-2024学年第一学期期末试卷
- 数字化时代银行零售业务营销策略优化报告
- 江西省吉安市遂州县2025届初三联合调研考试(语文试题理)试题含解析
- 家具生产工艺与设计考题试题及答案
- 山东外事职业大学《立法学》2023-2024学年第二学期期末试卷
- 江西省彭泽县市级名校2025年中考模拟考试试题数学试题试卷含解析
- 上海市徐汇区名校2024-2025学年下学期初三数学试题期末教学质量检测试题含解析
- DB32-T 2665-2014机动车维修费用结算规范-(高清现行)
- 2022年新高考湖南化学高考真题(word版含答案)
- Product Monitoring产品监视与测量程序(中英文)
- 压力管道安全检查表参考范本
- SB∕T 10170-2007 腐乳
- 外贸进出口流程图
- 部编人教版小学五年级下册语文文言文阅读理解课后专项练习
- 皮肤管理--ppt课件
- 双向气动插板门使用说明书
- 水利水电工程毕业设计---水闸设计
- (完整版)2019年高考数学浙江卷(附答案)
评论
0/150
提交评论