操作系统综合实验.docx
- 文档编号:11564420
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:27
- 大小:102.34KB
操作系统综合实验.docx
《操作系统综合实验.docx》由会员分享,可在线阅读,更多相关《操作系统综合实验.docx(27页珍藏版)》请在冰点文库上搜索。
操作系统综合实验
华北科技学院计算机学院综合性实验
实验报告
课程名称《计算机操作系统》
实验学期2015至2016学年第一学期
学生所在系部计算机系
年级2013专业班级计科B133
学生姓名谢培旗学号201307014319
任课教师王祥仲
实验成绩
计算机学院制
华北科技学院计算机学院综合性实验报告
》课程综合性实验报告《计算机操作系统
年12月4日2015基础二开课实验室:
实验题目
进程调度算法模拟程序设计
一、实验目的
通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。
二、设备与环境
1.硬件设备:
PC机一台
2.软件环境:
安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C
\C++\Java等编程语言环境。
三、实验内容
(1)用C语言(或其它语言,如Java)编程实现对N个进程采用某种进程调度算法(如动态优先权调度算法、先来先服务算法、短进程优先算法、时间片轮转调度算法)调度执行的模拟。
(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:
?
进程标识数ID。
?
进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。
?
进程已占用CPU时间CPUTIME。
?
进程还需占用的CPU时间ALLTIME。
当进程运行完毕时,ALLTIME变为0。
?
进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。
?
进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。
?
进程状态STATE。
?
队列指针NEXT,用来将PCB排成队列。
(3)优先数改变的原则:
?
进程在就绪队列中呆一个时间片,优先数增加1。
?
进程每运行一个时间片,优先数减3。
(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。
页1第
华北科技学院计算机学院综合性实验报告
(5)分析程序运行的结果,谈一下自己的认识。
四、实验结果及分析
本实验设计到三个进程调度,分别是:
先来先服务调度算法,非抢占式短进程调度算法,最高响应比优先调度算法。
以下为本次实验结果截图及分析:
程序运行界面截图:
先来先服务调度算法1.
页2第
华北科技学院计算机学院综合性实验报告
分析:
当在进程调度中采用FCFS算法时,每次调度是从就绪的进程队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。
该进程一直运行到完成或发生某事件而阻塞后,进程调度才将处理机分配给其它进程。
程序计算结果如图,设有5个进程:
a、b、c、d、e在不同时间到达,按其到达时间排序则为:
a->b->c->d->e,即调用先来先服务算法以后进程运行的顺序是:
a->b->c->d->e。
2.非抢占式短进程调度算法
算法是以作业的长短来计算优先级,作业越短,其优先级越高。
作业的长短是以作业所SJF算法可以分别用于作业调度和进程调度。
在把短作业优先调度算SJF要求的运行时间来衡量的。
优先将法用于作业调度时,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,它们调入内存运行。
在不同时间到达,按其所需服务时间长ed、ca程序计算结果如图,设有5个进程:
、b、、,即调用非抢占式短进程优先调度算法以后进程运行的顺序是:
短排序则为:
a->b->e->c->d。
a->b->e->c->d
页3第
华北科技学院计算机学院综合性实验报告
3.最高响应比优先调度算法
(//注:
该截图一小处地方是错的)
如果我们能为每个作业引入一个动态优先级,即优先级是可以改变的,令它随等待时间延长而增加,这将使长作业的优先级在等待期间不断滴增加,等到足够的时间后,必然有机会获得处理机。
该优先级的变化规律可描述为:
优先权=1+等待时间/要求服务时间。
由上式可以看出:
1.如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,因而类似于SJF算法,有利于短作业。
2.当要求服务时间相同时,作业的优先权又决定于其等待时间,因而该算法又类似于FCFS算法。
3.对于长作业的优先级,可以随着等待时间的增加而提高,当期等待时间足够长时,也可以过得处理机。
因此该算法实现了较好的折中。
当然,在利用该算法时,每次要进行调度之前,都需要先做响应比的计算,显然会增加系统开销。
设有5个进程:
a、b、c、d、e在不同时间到达,显然a、b按顺序执行,然后计算c、d、e的优先权,计算得出优先权:
c>d>e,于是c进入进程调度,此时,d、e的等待时间延长,需重新计算d、e的优先权,计算得出优先权e>d,于是e进入进程调度,最后执行d。
实验体会:
进程调度算法的优劣对于系统运行至关重要,进程调度影响着系统运行的速度以及系统开销。
在本次实验,本人早早地开始想如何根据书本进程调度的知识敲代码,但开始做还是最近两天,总的来说比较满意,不足的地方即是运行时界面排版由于精度的问题没有更好的解决。
页4第
华北科技学院计算机学院综合性实验报告
在实验过程中,本人重温了课本上的知识,又锻炼了实践能力。
源代码:
#include
#include
#include
usingnamespacestd;
structfcfs{//先来先服务算法从这里开始
charname[10];
floatarrivetime;
floatservicetime;
floatstarttime;
floatfinishtime;
floatzztime;
floatdqzztime;
};//定义一个结构体,里面包含的有一个进程相关的信息
fcfsa[100];
voidinput(fcfs*p,intN)
{
inti;
cout< printf(请您输入进程的名字到达时间服务时间: (例如: a0 100)\n\n); for(i=0;i<=N-1;i++) { printf(请您输入进程%d的信息: \t,i+1); scanf(\\t\t%s%f%f,&p[i].name,&p[i].arrivetime,&p[i].servicetime); 页5第 华北科技学院计算机学院综合性实验报告 } } voidPrint(fcfs*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,floatzztime,float dqzztime,intN) { intk; printf(\ \n调用先来先服务算法以后进程运行的顺序是: ); printf(%s,p[0].name); for(k=1;k { printf(-->%s,p[k].name); } cout< printf(\ 具体进程调度信息: \n); printf(\进程名到达时间服务时间开始时间结束时间周转时间带权周转时间\n); for(k=0;k<=N-1;k++) { printf(\%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\n,p[k].name,p[k].arrivetime, p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime); } getchar();//此处必须要有这个函数,否则就看不到显示器上面的输出,可以看到的结果只是一闪而过的一个框剪 } 页6第 华北科技学院计算机学院综合性实验报告 voidsort(fcfs*p,intN)//排序 { for(inti=0;i<=N-1;i++) for(intj=0;j<=i;j++) if(p[i].arrivetime { fcfstemp; temp=p[i]; p[i]=p[j]; p[j]=temp; } } voiddeal(fcfs*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,float&zztime,float &dqzztime,intN)//运行阶段 { intk; for(k=0;k<=N-1;k++) { if(k==0) { p[k].starttime=p[k].arrivetime; p[k].finishtime=p[k].arrivetime+p[k].servicetime; } else { p[k].starttime=p[k-1].finishtime; p[k].finishtime=p[k-1].finishtime+p[k].servicetime; } } 页7第 华北科技学院计算机学院综合性实验报告 for(k=0;k<=N-1;k++) { p[k].zztime=p[k].finishtime-p[k].arrivetime; p[k].dqzztime=p[k].zztime/p[k].servicetime; } } voidFCFS(fcfs*p,intN) { floatarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; sort(p,N); deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); getchar(); }//先来先服务算法到此结束 structsjf{//最短进程优先调度算法从这里开始 charname[10]; floatarrivetime;//到达时间 floatservicetime;//运行时间 floatstarttime;//开始时间 floatfinishtime;//完成时间 floatzztime; floatdqzztime; }; sjfa1[100]; voidinput(sjf*p,intN1)//进程信息输入 页8第 华北科技学院计算机学院综合性实验报告 { inti; cout< printf(请您输入进程的名字到达时间服务时间: (例如: a0 100)\n); for(i=0;i<=N1-1;i++) { printf(请您输入进程%d的信息: \t,i+1); scanf(\\t\t%s%f%f,&p[i].name,&p[i].arrivetime,&p[i].servicetime); } } zztime,floatstarttime,floatfinishtime,floatPrint(sjf*p,floatarrivetime,floatservicetime,floatvoid dqzztime,intN1)//最终结果输出{ intk; : );printf(\ \t调用非抢占短作业优先调度算法以后进程的调度顺序为 printf(%s,p[0].name); for(k=1;k {printf(-->%s,p[k].name);} cout< printf(\ 具体进程调度信息: \n); printf(\进程名到达时间服务时间开始时间结束时间周转时间带权周转时间\n); for(k=0;k<=N1-1;k++) { printf(\%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\n,p[k].name,p[k].arrivetime, 页9第 华北科技学院计算机学院综合性实验报告 p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime); } getchar(); } voidsort(sjf*p,intN1)//排序 { for(inti=0;i<=N1-1;i++) for(intj=0;j<=i;j++) if(p[i].arrivetime { sjftemp; temp=p[i]; p[i]=p[j]; p[j]=temp; } } voiddeal(sjf*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,float&zztime,float &dqzztime,intN1)//运行阶段 { intk; for(k=0;k<=N1-1;k++) { if(k==0) { p[k].starttime=p[k].arrivetime; p[k].finishtime=p[k].arrivetime+p[k].servicetime; } else { p[k].starttime=p[k-1].finishtime; 页10第 华北科技学院计算机学院综合性实验报告 p[k].finishtime=p[k-1].finishtime+p[k].servicetime; } } for(k=0;k<=N1-1;k++) { p[k].zztime=p[k].finishtime-p[k].arrivetime; p[k].dqzztime=p[k].zztime/p[k].servicetime; } } voidsjff(sjf*p,intN1) { floatarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; sort(p,N1); for(intm=0;m {if(m==0) p[m].finishtime=p[m].arrivetime+p[m].servicetime; else p[m].finishtime=p[m-1].finishtime+p[m].servicetime; inti=0; for(intn=m+1;n<=N1-1;n++) { if(p[n].arrivetime<=p[m].finishtime) i++; } floatmin=p[m+1].servicetime; intnext=m+1; 页11第 华北科技学院计算机学院综合性实验报告 for(intk=m+1;k { if(p[k+1].servicetime {min=p[k+1].servicetime; next=k+1;} } sjftemp; temp=p[m+1]; p[m+1]=p[next]; p[next]=temp; } deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N1); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N1); getchar(); }//最短进程优先调度算法到这里结束 structjdsjp{//最高响应比优先调度算法从这里开始 charname[10];//作业号 floatarrivetime;//作业到达时间 floatservicetime;//作业要求服务时间 floatwaitime;//等待时间 floatstarttime;//开始运行时间 floatfinishtime;//结束运行时间 floatzztime;//周转时间 带权周转时间//floatdqzztime; };定义一个结构体,里面包含的有一个进程相关的信息// 页12第 华北科技学院计算机学院综合性实验报告 jdsjpa3[100]; voidinput(jdsjp*p,intN3) { inti; cout< printf(请您输入进程的名字到达时间服务时间: (例如: a0 100)\n\n); for(i=0;i<=N3-1;i++) { printf(请您输入进程%d的信息: \t,i+1); scanf(\\t\t%s%f%f,&p[i].name,&p[i].arrivetime,&p[i].servicetime); } } zztime,floatservicetime,floatstarttime,floatfinishtime,floatPrint(jdsjpvoid*p,floatarrivetime,float dqzztime,intN3) { intk; printf(\ \n最高响应比优先调度算法以后进程运行的顺序是: ); printf(%s,p[0].name); for(k=1;k { printf(-->%s,p[k].name); } cout< printf(\ 具体进程调度信息: \n); printf(\进程名到达时间服务时间开始时间结束时间周转时间带权周转时间\n); 页13第 华北科技学院计算机学院综合性实验报告 for(k=0;k<=N3-1;k++) { printf(\%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\n,p[k].name,p[k].arrivetime, p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime); } getchar();//此处必须要有这个函数,否则就看不到显示器上面的输出,可以看到的结果只是一闪而过的一个框剪 } voidsort(jdsjp*p,intN3)//排序 { for(inti=0;i<=N3-1;i++) for(intj=0;j<=i;j++) if(p[i].arrivetime { jdsjptemp; temp=p[i]; p[i]=p[j]; p[j]=temp; } } voiddeal(jdsjp*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,float&zztime,float &dqzztime,intN3)//运行阶段 { intk; for(k=0;k<=N3-1;k++) { 页14第 华北科技学院计算机学院综合性实验报告 if(k==0) { p[k].starttime=p[k].arrivetime; p[k].finishtime=p[k].arrivetime+p[k].servicetime;} else { p[k].starttime=p[k-1].finishtime; p[k].finishtime=p[k-1].finishtime+p[k].servicetime;} } for(k=0;k<=N3-1;k++) { p[k].zztime=p[k].finishtime-p[k].arrivetime; p[k].dqzztime=p[k].zztime/p[k].servicetime; } } voidJDSJP(jdsjp*p,intN3) { floatarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; sort(p,N3); for(intm=0;m { if(m==0) p[m].finishtime=p[m].arrivetime+p[m].servicetime; else p[m].finishtime=p[m-1].fin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 综合 实验
![提示](https://static.bingdoc.com/images/bang_tan.gif)