实验一 进程调度报告.docx
- 文档编号:30495440
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:13
- 大小:142.48KB
实验一 进程调度报告.docx
《实验一 进程调度报告.docx》由会员分享,可在线阅读,更多相关《实验一 进程调度报告.docx(13页珍藏版)》请在冰豆网上搜索。
实验一进程调度报告
昆明理工大学信息工程与自动化学院学生实验报告
(2011—2012学年第二学期)
课程名称:
操作系统开课实验室:
信自楼4452012年04月10日
专业、年级、班
计科103
学号
201010405331
姓名
赵颜
成绩
实验项目名称
作业(进程)调度算法
指导教师
舒国锋
教
师
评
语
教师签名:
年月日
一、实验目的:
通过编写进程调度的算法,要求学生掌握整个进程调度的各种算法,进程的数据结构描述,以及进程的各种状态之间的转换。
以加深对进程的概念及进程调度算法的理解,并且提高链表的应用能力,达到提高编程能力的目的。
在本实验中采用短作业优先算法和先来先服务算法实现。
二、实验原理及设计方案
1、实验原理;
由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。
作业调度算法:
1.先来先服务算法:
按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。
2.最短作业优先算法:
是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。
三、实验原理及流程图:
实验原理:
用C语言或C++语言开发。
需要定义PCB的数据结构,用链表的形式管理进程,采用多级反馈队列调度的算法模拟进程的控制。
基本技术路线图:
先来先服务:
先来先服务:
三、所用仪器、材料(设备名称、型号、规格等):
计算机一台、VC++6.0。
四、源程序:
#include
#include
#defineNumber5
voidmain()
{
intn;
intdaoda[Number],fuwu[Number],i;
cout<<"请依次输入各个进程的到达时间并以空格间隔:
";
for(i=0;i { cin>>daoda[i]; } cout<<"请依次输入各个进程的服务时间,并以空格间隔: "; for(i=0;i { cin>>fuwu[i]; } cout<<"请输入n=1选择FCFS或者n=2选择SJF或者n=3同时调用FCFS和SJF,n="; cin>>n; while(n<1||n>3){ cout<<"输入的n有误,请重新输入n,n="; cin>>n; } structstatedd//声明结构 { booldoneF,doneS; intdaoda,fuwu; floatwancheng,zhouzhuan,daiquan,wan,zhou,dai; }; stateddprocess[Number];//声明结构变量,这里为数组 inttimeflyF=0,timeflyS=0;//定义两个类似于秒表的变量 intj,k,l,nextproF,nextproS; //获取数据 for(i=0;i { process[i].doneF=false; process[i].doneS=false; process[i].wancheng=0; process[i].zhouzhuan=0; process[i].daiquan=0; process[i].wan=0; process[i].zhou=0; process[i].dai=0; process[i].daoda=daoda[i]; process[i].fuwu=fuwu[i]; } //获取最先到达的进程下标first intfirst=0; l=first; for(i=1;i { if(daoda[first]>daoda[i]) first=i; } process[first].doneF=true; process[first].doneS=true; process[first].wancheng=process[first].fuwu+process[first].daoda; process[first].wan=process[first].fuwu+process[first].daoda; timeflyF+=process[first].daoda+process[first].fuwu; timeflyS+=process[first].daoda+process[first].fuwu; //接下去到达的进程 //************************************************************* //fcfs******************************************************** for(j=1;j { nextproF=Number+1; for(k=0;k { if(! process[k].doneF) { if(process[k].daoda<=timeflyF)//到达 { if(nextproF==Number+1) nextproF=k; else { if(process[nextproF].daoda>process[k].daoda) nextproF=k;//获取到达时刻最先的进程 }//else }//if2 }//if1 }//for //处理 process[nextproF].wancheng=process[nextproF].fuwu+timeflyF; timeflyF+=process[nextproF].fuwu; process[nextproF].doneF=true; }//circle2 //SJF********************************************** for(j=1;j { nextproS=Number+1; for(k=0;k { if(! process[k].doneS) { if(process[k].daoda<=timeflyS)//到达 { if(nextproS==Number+1) nextproS=k; else { if(process[nextproS].fuwu>process[k].fuwu) nextproS=k;//获取服务时间最小的进程 }//else }//if2 }//if1 }//for //处理 process[nextproS].wan=process[nextproS].fuwu+timeflyS; timeflyS+=process[nextproS].fuwu; process[nextproS].doneS=true; }//circle2 //**************************************************************** floatFz=0,Fdq=0,Sz=0,Sdq=0;// for(i=0;i {//---------------------------------------------------- process[i].zhouzhuan=process[i].wancheng-process[i].daoda; Fz+=process[i].zhouzhuan; process[i].daiquan=process[i].zhouzhuan/process[i].fuwu; Fdq+=process[i].daiquan; //---------------------------------------------------- process[i].zhou=process[i].wan-process[i].daoda; Sz+=process[i].zhou; process[i].dai=process[i].zhou/process[i].fuwu; Sdq+=process[i].dai; } //=========================输出================================== //------------------------------------------------------------------- if(n==1||n==3){ cout<<"\t"< cout<<"FCFS: "< for(i=0;i { if(i<1) { cout<<"时刻"< 进程"< } else { cout<<"时刻"< 进程"< } } cout< cout< cout< cout< for(i=0;i { cout< cout< : fixed)< (2)< cout< : fixed)< (2)< cout< : fixed)< (2)< } cout<<"平均周转时间为: "< : fixed)< (2)< cout<<"平均带权周转时间为: "< : fixed)< (2)< } //------------------------------------------------------------------- if(n==2||n==3){ cout<<"\t"< cout<<"SJF: "< for(i=0;i { if(i<1) { cout<<"时刻"< 进程"< } else { cout<<"时刻"< 进程"< } } cout< cout< cout< cout< for(i=0;i { cout< cout< : fixed)< (2)< cout< : fixed)< (2)< cout< : fixed)< (2)< } cout<<"平均周转时间为: "< : fixed)< (2)< cout<<"平均带权周转时间为: "< : fixed)< (2)< cout<<"\t"< } } 五、运行结果截图: 先来先服务算法: 最短作业优先: 六、实验总结: 操作系统是位于硬件层之上,所有其他系统软件层之下的一个系统软件,是计算机系统中必不可少的一种系统软件,它使得管理系统中的各种软件和硬件资源得以充分利用,方便用户使用计算机。 此外,操作系统还是计算机系统中各种资源的管理者和各种活动的组织者、指挥者。 它采用时间片法调度进程,使系统资源得到充分利用,用户可以花更少的时间完成过多的工作。 通过这次实验,将以前只会做题的过程转化外程序执行的过程,模拟了在单处理机情况下的处理及调度问题,体会到了程序执行的过程,加深了对进程调度的理解。 并深刻体会到进程控制块是进程存在的标志。 还明白了进程控制块是标志进程存在的数据结构,其中包含系统对进程进行管理所需要的全部信息。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验一 进程调度报告 实验 进程 调度 报告