操作系统实验_第1页
操作系统实验_第2页
操作系统实验_第3页
操作系统实验_第4页
操作系统实验_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南通大学信息科学技术学院操作系统实验报告书实验名称低级进程调度算法班级学号姓名指导教师日期2019.06.03成绩实验2低级进程调度算法一、实验目的模拟实现作业调度算法(包括先来先服务调度算法和短作业优先调度算法)掌握在编译环境(VisualStudio或DEVC++或Eclipse)中调试程序。二、实验任务本实验要求用C/C++/Java语言编写一个进程调度模拟程序,使用不同算法实现进程调度。具体要求如下:编写一个进程调度程序,允许多个进程并发执行。采取多种进程调度算法(先来先服务(FCFS)调度算法,短作业优先(SJF)调度算法,分析比较各个算法的优缺点。三、实验要求复习低级进程调度算法的原理,做好实验预习,完成算法分析和流程图绘制。使用不同算法实现进程调度(包括先来先服务调度算法和短作业优先调度算法),利用编程软件编译调试程序并测试其正确性,最后给出测试结论。实验完毕,写出实验报告。实验报告必须包含的内容如下(可以根据实验任务增加其他内容):(1)实验目的。(2)实验预习内容:算法文字描述、流程图、实验方法与实验步骤等。(3)在编译环境中调试程序。(4)运行结果的分析。(5)实验体会与小结。四、实验预习内容1.算法分析(1)先来先服务算法(FCFS)FCFS是最简单的调度算法,既可以用作作业调度,也可以用作进程调度。这种算法优先考虑系统中等待时间最长的作业(进程),而不管作业所需执行时间长短。做法是从后备队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配资源和创建进程,然后放入就绪队列。进程调度中使用此算法时,每次都从就绪的进程队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行,该进程会一直运行到完成或者因发生某事件而阻塞后,进程调度程序才会把处理机分配给其他进程。(2)短作业优先算法(SJF)由于在实际情况中短作业(进程)所占比例很大,为了让它们比长作业优先执行,就有了此算法。SJF顾名思义以作业长短来确定优先级,作业越短优先级越高,作业的长短用作业所需的运行时间来衡量,此算法一样也可以用做进程调度,它将从外存的作业后备队列中选择若十个估计运行时间最短的作业,优先将它们调入内存运行。2.算法流程图(1)先来先服务算法(FCFS)(2)短作业优先算法(SJF)输出进程各参

数并计算平均

I周篱M间I实验核心代码#include<iostream>usingnamespacestd;intArrivalTime[20];doubleServiceTime[20],FinishTime[20],WholeTime[20],AveWholeTime[20],AveWeightWholeTime[20],WeightWholeTime[20],FCFS_AverageT,SJF_AverageT,FCFS_AverageWT,SJF_AverageWT,AllTime,WeightAllTime;doublea[20];intb[20],c[20],d[20];voidFCFS()(intProcessNum;cout<<"先来先服务算法"<<endl;cout<<"请输入进程个数:";cin>>ProcessNum;cout<<"输入进程到达时间:"<<endl;for(inti=0;i<ProcessNum;i++){cin>>ArrivalTime[i];}cout<<"请输入进程服务时间:"<<endl;for(inti=0;i<ProcessNum;i++){cin>>ServiceTime[i];}cout<<endl;for(inti=0;i<ProcessNum;i++){FinishTime[i]=ServiceTime[i];}for(inti=0;i<ProcessNum;i++){FinishTime[i+1]=FinishTime[i]+FinishTime[i+1];}for(inti=0;i<ProcessNum-1;i++){cout<<"时刻"<<FinishTime[i]<<":第”<<i+2<<”个进程开始运行。"<<endl;}cout<<endl;cout<<"FCFS完成时间:”;for(inti=0;i<ProcessNum;i++){cout<<FinishTime[i]<<"";}cout<<endl;cout<<"FCFS周转时间:”;for(inti=0;i<ProcessNum;i++){WholeTime[i]=FinishTime[i]-ArrivalTime[i];}for(inti=0;i<ProcessNum;i++){cout<<WholeTime[i]<<"";}cout<<endl;for(inti=0;i<ProcessNum;i++){AveWholeTime[i]=WholeTime[i];}for(inti=0;i<ProcessNum;i++){AveWholeTime[i+1]=AveWholeTime[i]+AveWholeTime[i+1];AllTime=AveWholeTime[i+1];}FCFS_AverageT=AllTime/ProcessNum;cout<<"FCFS平均周转时间:"<<FCFS_AverageT<<endl;for(inti=0;i<ProcessNum;i++){WeightWholeTime[i]=WholeTime[i]/ServiceTime[i];}for(inti=0;i<ProcessNum;i++){AveWeightWholeTime[i]=WeightWholeTime[i];}for(inti=0;i<ProcessNum;i++){AveWeightWholeTime[i+1]=AveWeightWholeTime[i]+AveWeightWholeTime[i+1];WeightAllTime=AveWeightWholeTime[i+1];}FCFS_AverageWT=WeightAllTime/ProcessNum;cout<<"FCFS平均带权周转时间:"<<FCFS_AverageWT<<endl;}voidSJF(){intProcessNum;cout<<"短作业优先算法"<<endl;cout<<"请输入进程个数:"<<endl;cin>>ProcessNum;cout<<"输入进程到达时间:"<<endl;for(inti=0;i<ProcessNum;i++){cin>>ArrivalTime[i];}cout<<endl;cout<<"请输入进程服务时间:"<<endl;for(inti=0;i<ProcessNum;i++){cin>>ServiceTime[i];cout<<endl;for(inti=0;i<ProcessNum;i++){a[i]=ServiceTime[i];}for(inti=1;i<ProcessNum-1;i++){doublet;for(intj=i+1;j<ProcessNum;j++){if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}}}FinishTime[0]=ServiceTime[0];for(inti=1;i<ProcessNum;i++){for(intj=1;j<ProcessNum;j++){if(a[i]==ServiceTime[j]){b[i]=j;break;}}}for(inti=1;i<ProcessNum;i++){if(FinishTime[b[i-1]]<ArrivalTime[b[i]]){inttemp;temp=b[i];b[i]=b[i+1];b[i+1]=temp;}a[i]=ServiceTime[b[i]];a[i]=a[i-1]+a[i];FinishTime[b[i]]=a[i];}for(inti=0;i<ProcessNum-1;i++){cout<<"时刻"<<FinishTime[i]<<":第”<<i+2<<”个进程开始运行。"<<endl;}cout<<endl;cout<<"SJF完成时间:";for(inti=0;i<ProcessNum;i++){cout<<FinishTime[i]<<"";}cout<<endl;cout<<"SJF周转时间:";for(inti=0;i<ProcessNum;i++){WholeTime[i]=FinishTime[i]-ArrivalTime[i];for(inti=0;i<ProcessNum;i++){cout<<WholeTime[i]<<"";}cout<<endl;for(inti=0;i<ProcessNum;i++){AveWholeTime[i]=WholeTime[i];}for(inti=0;i<ProcessNum;i++){AveWholeTime[i+1]=AveWholeTime[i]+AveWholeTime[i+1];AllTime=AveWholeTime[i+1];}SJF_AverageT=AllTime/ProcessNum;cout<<"SJF平均周转时间:"<<SJF_AverageT<<endl;for(inti=0;i<ProcessNum;i++){WeightWholeTime[i]=WholeTime[i]/ServiceTime[i];}for(inti=0;i<ProcessNum;i++){AveWeightWholeTime[i]=WeightWholeTime[i];}for(inti=0;i<ProcessNum;i++){AveWeightWholeTime[i+1]=AveWeightWholeTime[i]+AveWeightWholeTime[i+1];WeightAllTime=AveWeightWholeTime[i+1];}SJF_AverageWT=WeightAllTime/ProcessNum;cout<<"SJF平均带权周转时间:"<<SJF_AverageWT<<endl;}intmain(){charn;cout<<”1、先来先服务FCFS算法."<<endl;cout<<"2、短作业优先SJF算法.”<<endl;cout<<"请选择算法的序号:"<<endl;cin>>n;switch(n){case'1':FCFS();break;case'2':SJF();break;default:cout<<endl;cout<<"您输出有误!”<<endl;break;}cout<<endl;

return0;}六・实验结果:47:46时间:9.周禺时间12102:2.714111915(1)先来先服务算法运行结果::47:46时间:9.周禺时间12102:2.714111915(1)先来先服务算法运行结果:到烫Jl刻成唇均(2)短作业优先算法运行结果:UwtfMdinin\De-&ktQp\111\bin\Debug\111,ewegsA口A口时时开开乎牙口王口口王口王5g2g3第第----.・.•・■「••・】4ix7It—It—IC:\IJsers\adeinVDesktap\111\bim\Debug\111.exeL2、it2_蕾输入进程个数:5输入进程到达时间:01234七.实验小结通过这次实现低级调度算法的模拟实验,让我更加深刻的理解了低级调度算法的内容和运行原理,让我对之前忽略的内容有了补充,其中的一些模糊的知识也明晰起来了。以下是对进程的调度算法的总结。进程调度的原因:在操作系统中,由于进程综述多于处理机,它们必然竞争处理机,为了充分利用计算机系统中的CPU资源,让计算机系统能够多快好省的完成我们让它做的各种任务,所以需要进程调度。进程的调度的概念:进程调度也称为低级调度(CPU调度),是按照某种调度算法(或原则)从就绪队列中选取进程分配CPU,主要是协调对CPU的争夺使用。通常有以下两种调度方式:1)非剥夺调度方式,又称非抢占方式是指当一个进程正在处理机上执行时,即使有某个更

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论