ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:112.62KB ,
资源ID:9778389      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9778389.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统实验.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统实验.docx

1、操作系统实验操作系统实验报告一【实验题目】先来先服务FCFS和短作业优先SJF进程调度算法【实验目的】 通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。【实验内容】问题描述:设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个进程分别在T1, ,Tn时刻到达系统,它们需要的服务时间分别为S1, ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。程序要求如下:1)进程个数n;每个进程的到达时间T1, ,

2、Tn和服务时间S1, ,Sn;选择算法1-FCFS,2-SJF。2)要求采用先来先服务FCFS和短作业优先SJF分别调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间;3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间。实现提示:用C+语言实现提示:1)程序中进程调度时间变量描述如下: static int MaxNum=100;int ArrivalTimeMaxNum; int ServiceTi

3、meMaxNum; int FinishTimeMaxNum; int WholeTimeMaxNum; double WeightWholeTimeMaxNum; double AverageWT_FCFS,AverageWT_SJF; double AverageWWT_FCFS,AverageWWT_SJF;2)进程调度的实现过程如下: 变量初始化; 接收用户输入n,T1, ,Tn,S1, ,Sn;算法选择1-FCFS,2-SJF; 按照选择算法进行进程调度,计算进程的完成时间、周转时间和带权周转时间; 计算所有进程的平均周转时间和平均带权周转时间; 按格式输出调度结果。【实验要求】1)

4、上机前认真复习FCFS和SJF进程调度调度算法,熟悉进程调度的执行过程;2)上机时独立编程、调试程序;3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。【源代码】一、在VisualC+6.0中实现。【程序代码】#include#include#define Number 5void main() int daodaNumber,fuwuNumber,i; for(i=0;iNumber;i+) cout请输入第i+1daodaifuwui; struct statedd /声明结构 bool doneF,doneS; int daoda,fuwu;

5、float wancheng,zhouzhuan,daiquan,wan,zhou,dai; ; statedd processNumber;/声明结构变量,这里为数组 int timeflyF=0,timeflyS=0;/定义两个类似于秒表的变量 int j,k,nextproF,nextproS; / 获取数据 for(i=0;iNumber;i+) processi.doneF = false; processi.doneS = false; processi.wancheng = 0; processi.zhouzhuan = 0; processi.daiquan = 0; proc

6、essi.wan = 0; processi.zhou = 0; processi.dai =0; processi.daoda = daodai; processi.fuwu = fuwui; / 获取最先到达的进程下标first int first=0; for(i=1;idaodai) first=i; processfirst.doneF=true; processfirst.doneS=true; processfirst.wancheng = processfirst.fuwu + processfirst.daoda; processfirst.wan = processfirs

7、t.fuwu + processfirst.daoda; timeflyF += processfirst.daoda+processfirst.fuwu; timeflyS += processfirst.daoda+processfirst.fuwu; / 接下去到达的进程 /* / fcfs * for(j=1;jNumber;j+) nextproF = Number+1; for(k =0 ; kNumber; k+ ) if( !processk.doneF ) if( processk.daoda processk.daoda ) nextproF = k; /获取到达时刻最先的

8、进程 /else /if2 /if1 /for / 处理 processnextproF.wancheng = processnextproF.fuwu + timeflyF; timeflyF += processnextproF.fuwu; processnextproF.doneF=true; / circle2 / SJF * for(j=1;jNumber;j+) nextproS = Number+1; for(k=0 ; kNumber; k+ ) if(!processk.doneS) if( processk.daoda processk.fuwu ) nextproS =

9、k; /获取服务时间最小的进程 /else /if2 /if1 /for / 处理 processnextproS.wan = processnextproS.fuwu + timeflyS; timeflyS += processnextproS.fuwu; processnextproS.doneS=true; / circle2/* float Fz=0,Fdq=0,Sz=0,Sdq=0;/ for(i=0;iNumber;i+) /- processi.zhouzhuan=processi.wancheng-processi.daoda; Fz += processi.zhouzhua

10、n; processi.daiquan=processi.zhouzhuan/processi.fuwu; Fdq += processi.daiquan; /- processi.zhou=processi.wan-processi.daoda; Sz += processi.zhou; processi.dai=processi.zhou/processi.fuwu; Sdq += processi.dai; /=输出=/- couttendl; coutFCFS:endl;coutsetw(10)进程ID ;coutsetw(10)完成时间 ;coutsetw(10)周转时间 ;cout

11、setw(10)带权周转时间 endl;for(i=0;iNumber;i+) coutsetw(10)i+1 ; coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.wancheng ; coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.zhouzhuan ; coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.daiquan endl;cout平均周转时间为: setiosflags(ios:fix

12、ed)setprecision(2)Fz/Numberendl;cout平均带权周转时间为:setiosflags(ios:fixed)setprecision(2)Fdq/Numberendl;/-couttendl; coutSJF:endl;coutsetw(10)进程ID ;coutsetw(10)完成时间 ;coutsetw(10)周转时间 ;coutsetw(10)带权周转时间 endl;for(i=0;iNumber;i+) coutsetw(10)i+1 ; coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.wa

13、n ; coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.zhou ; coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.dai endl;cout平均周转时间为: setiosflags(ios:fixed)setprecision(2)Sz/Numberendl;cout平均带权周转时间为:setiosflags(ios:fixed)setprecision(2)Sdq/Numberendl;couttendl;【效果截图】二、在Visual Studio 2

14、008中基于对话框模式实现,最终生成exe可执行文件。【主要代码】void Csc20101114Dlg:OnBnClickedjisuan() / TODO: 在此添加控件通知处理程序代码 / test /*daodaA=0; daodaB=1; daodaC=2; daodaD=3; daodaE=4; fuwuA=4; fuwuB=3; fuwuC=5; fuwuD=2; fuwuE=4; UpdateData(false);*/ / test struct statedd bool doneF; bool doneS; int daoda; int fuwu; float wanche

15、ng; float zhouzhuan; float daiquan; float wan; float zhou; float dai; ; statedd process5; int timeflyF=0; int timeflyS=0; int circle; int circle2; int nextproF; int nextproS; UpdateData(true); / 获取数据 process0.doneF = false; process0.doneS = false; process0.wancheng = 0; process0.zhouzhuan = 0; proce

16、ss0.daiquan = 0; process0.wan = 0; process0.zhou = 0; process0.dai =0; process0.daoda = daodaA; process0.fuwu = fuwuA; process1.doneF = false; process1.doneS = false; process1.wancheng = 0; process1.zhouzhuan = 0; process1.daiquan = 0; process1.wan = 0; process1.zhou = 0; process1.dai =0; process1.d

17、aoda = daodaB; process1.fuwu = fuwuB; process2.doneF = false; process2.doneS = false; process2.wancheng = 0; process2.zhouzhuan = 0; process2.daiquan = 0; process2.wan = 0; process2.zhou = 0; process2.dai =0; process2.daoda = daodaC; process2.fuwu = fuwuC; process3.doneF = false; process3.doneS = fa

18、lse; process3.wancheng = 0; process3.zhouzhuan = 0; process3.daiquan = 0; process3.wan = 0; process3.zhou = 0; process3.dai =0; process3.daoda = daodaD; process3.fuwu = fuwuD; process4.doneF = false; process4.doneS = false; process4.wancheng = 0; process4.zhouzhuan = 0; process4.daiquan = 0; process

19、4.wan = 0; process4.zhou = 0; process4.dai =0; process4.daoda = daodaE; process4.fuwu = fuwuE; / 最先到达的进程 int minnum=min(daodaA,min(daodaB,min(daodaC,min(daodaD,daodaE); for(circle =0 ; circle5; circle+ ) if( minnum = processcircle.daoda ) processcircle.doneF=true; processcircle.doneS=true; processci

20、rcle.wancheng = processcircle.fuwu + processcircle.daoda; processcircle.wan = processcircle.fuwu + processcircle.daoda; processcircle.zhouzhuan = processcircle.wancheng - processcircle.daoda; processcircle.zhou= processcircle.wan - processcircle.daoda; processcircle.daiquan = processcircle.zhouzhuan

21、/processcircle.fuwu; processcircle.dai = processcircle.zhou/processcircle.fuwu; timeflyF += processcircle.daoda+processcircle.fuwu; timeflyS += processcircle.daoda+processcircle.fuwu; break; / 接下去到达的进程 / fcfs * for( circle2 =0;circle25;circle2+) nextproF = 8; for(circle =0 ; circle5; circle+ ) if( !

22、processcircle.doneF ) if( processcircle.daoda processcircle.daoda ) nextproF = circle; /获取到达时刻最先的进程 / 处理 processnextproF.wancheng = processnextproF.fuwu + timeflyF; processnextproF.zhouzhuan = processnextproF.wancheng - processnextproF.daoda; processnextproF.daiquan = processnextproF.zhouzhuan/proce

23、ssnextproF.fuwu; timeflyF += processnextproF.fuwu; processnextproF.doneF=true; / circle2 / SJF * for( circle2 =0;circle25;circle2+) nextproS = 8; for(circle =0 ; circle5; circle+ ) if(!processcircle.doneS) if( processcircle.daoda processcircle.fuwu ) nextproS = circle; /获取服务时间最小的进程 / 处理 processnextproS.wan = processnextproS.fuwu + timeflyS; processnextproS.zhou= processnextproS.wan - processnextproS.daoda; processnextproS.dai = processnextproS.zhou/processnextpro

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1