操作系统实验报告(二)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include”jcb.h”
void mian()
{
JCB jobArray[MaxNumber];
数据输入;
调用三种算法并输出调度结果;
}
四、实验方法与步骤
先用一个数组来存放进程的信息,让不同的算法来调用。具体如下:
#include <stdio.h>
struct ff{
char name[10];
scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);
/* printf("input the %dth process's arrivetime:\n",i+1);
scanf("%f",&p[i].arrivetime);
printf("input the %dth process's servicetime:\n",i+1);
char JobName[8];

};
2、定义数据结构装载后备作业
JCB JobArray[MaxNumber];
3、三种调度算法的设计
4、 C++语言描述顺序
建立文件:jcb.h;其中存放:
最大作业数;
定义数据结构JCB;
三个作业调度函数;
建立主函数,其中包含:
#include<iostream.h>
int next=m+1;//m+1=n
for(int k=m+1;k<m+i;k++)
{
if(p[k+1].servicetime<min)
{min=p[k+1].servicetime;
next=k+1;}
}
ff temp;
temp=p[m+1];
p[m+1]=p[next];
p[next]=temp;
存储空间
开始时间
完成时间
等待时间
1
JA
02:40
20
30
2
JB
02:50
30
15
3
JC
02:55
10
90
4
JD
03:00
24
10
5
JE
03:05
6
60
2、按先来先服务(FCFS)的原则进行调度,输出作业调度的顺序及各自的等待时间。
3、按最短作业优先(SJF)的原则进行调度,输出作业调度的顺序及各自的等待时间。
}
(**此算法在程序中没有实现,此程序只实现了先到先服务和最小作业的两种调度算法**)
五、实验结果与数据处理
六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)
七、所附实验输出的结果或数据
2、实验要求(黑体,小4号字)
本实验模拟单处理器系统的作业调度,加深对作业调度算法的理解。用某种语言编写和调试一个作业调度的算法程序,有一些简单的界面,能够运行,仿真操作系统中作业调度的原理和过程。
1、在后备作业队列中输入5道作业各自需要的时间及存储空间。数据输入格式如下:
作业编号
作业名称
提交时间
运行时间
{int k;
printf("run order:");
printf("%s",p[0].name);
for(k=1;k<N;k++)
{printf("-->%s",p[k].name);
}
printf("\nthe process's information:\n");
printf("\nname\tarrive\tservice\tstart\tfinish\tzz\tdqzz\n");
if(p[i].store<p[j].store)
{
fftemp;
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);
Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);
void xzyff*p,intN)
{
float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;
sort(p,N);
for(int i=0;i<=n-1;i++)
for(int j=0;j<=i;j++)
}
deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);
Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);
}
3.按最小作业(存储空间)优先的原则进行调度,输出作业调度顺序及各自的等待时间的程序如下:
else
p[m].finishtime=p[m-1].finishtime+p[m].servicetime;
int i=0;
for(int n=m+1;n<=N-1;n++)
{if(p[n].arrivetime<=p[m].finishtime)
i++;
}
float min=p[m+1].servicetime;
float arrivetime;
float servicetime;
float starttime;
float finishtime;
float zztime;
float dqzztime;
};
ff a[100];
再建立一个算法实现将进程的信息由键盘输入,并存放在建好的数组内。具体短发如下:
void input(ff *p,int N)
deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);
Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);
}
2.按最短作业优先(SJF)的原则进行调度,输出作业调度的顺序及各自的等待时间的程序如下:
XXXX大学
实 验 报 告
|
|
实验名称实验二 作业调度实验
课程名称操作系统
|
|
专业班级:学生姓名:
学 号:成 绩:
指导教师:实验日期:
一、实验目的及要求
1、实验目的(黑体,小4号字)
模拟作业调度算法,学习作业在操作系统中的调度过程,加深对作业管理的理解。特别是作业调度的概念、作业调度与进程调度的区别。培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解,拓宽学生的知识领域,锻炼学生的实践技能。
/*
printf("\nname:%s\t",p[k].name);
printf("\narrivetime:%-.2f\t",p[k].arrivetime);
printf("\nservicetime:%-.2f\t",p[k].servicetime);
printf("\nstarttime:%-.2f\t",p[k].starttime);
需要指出的是:(1)在作业调度和进程调度中同时出现的算法,如FCFS、RR、优先数法,其使用原理是基本相同的;(2)作业调度算法和进程调度算法应严格与存储管理中的“请求淘汰换页算法”相区别,注意不要混淆。
实验提示
1、根据作业输入数据,定义JCB结构;
struct JCB{
char JobNum[2];
for(k=0;k<=N-1;k++)
{ printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);
printf("\nfinishtime:%-.2f\t",p[k].finishtime);
printf("\nzztime:%-.2f\t",p[k].zztime);
printf("\ndqzztime:%-.2f\t\n",p[k].dqzztime);*/
}
}
将三不同的调度算法的计算方式用三段程序来编写,但同时都是用已经建立并输入数据的数组来执行。
{ int i;
printf("intput the process's name & arrivetime & servicetime:\nfor exmple: a 0 100\n");
for(i=0;i<=N-1;i++)
{
printf("input the %dth process's information:\n",i+1);
1.先来先服务(FCFS)的原则进行调度,输出作业调度的顺序及各自的等待时间的程序如下:
void FCFS(ff *p,int N)
{
float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;
sort(p,N);
void sjff(ff *p,int N)
{float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;
sort(p,N);
for(int m=0;m<N-1;m++)
{if(m==0)
p[m].finishtime=p[m].arrivetime+p[m].servicetime;
4、按最小作业(存储空间)优先的原则进行调度,输出作业调度顺序及各自的等待时间。
5.建立3个子函数对应3种算法,在主函数中调用它们并按格式输出相关信息;
6.按调度顺序输出作业,输出格式为:
作业编号、作业名、提交时间、运行时间、存储空间、等待时间
二、所用仪器、设备
PC机
三、实ቤተ መጻሕፍቲ ባይዱ原理
作业调度算法和进程调度算法。其中作业调度算法主要有先来先服务法FCFS、短作业优先法SJF、最高响应比优先法HRN、定时轮转法和优先数法。在进程调度算法中主要介绍了先来先服务法FCFS、轮转法RR、多级反馈轮转法和优先数法。
scanf("%f",&p[i].servicetime);
*/
}
}
void Print(ff *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N)
相关文档
最新文档