操作系统实验报告一
[实验题目]
先来先服务FCFS和短作业优先SJF调度算法
[实验目的]
通过本次实验,加深对进程概念的理解,进一步掌握对进程状态转变、进程调度策略及对系统性能的评价方法。
[实验内容]
编程实现如下内容:
1.先来先服务算法;
2.短进程优先算法;
3.根据调度顺序计算所有作业的平均周转时间及平均带权周转时间。
代码如下:
1. 先来先服务算法
2. 短进程优先算法:
感悟:首先不要畏难,要有勇气去敲这个算法,然后就是按部就班的把该敲得代码,该实现的功能通过自己最熟悉的语言实现出来。
#include <bits/stdc++.h>
using namespace std;
struct tt{
int id;//进程名字
int dt;// 到达时间
int ft;//服务时间
int wt;//完成时间
double z;//周转时间
double d;//带权周转时间
}st[100];
bool cmp(tt x,tt y){//按照到达时间从小到大排序
return x.dt<y.dt;
}
bool cmp1(tt x,tt y){//按照服务时间从小到大排序
return x.ft<y.ft;
}
void wt(int n){//计算完成时间
for(int i=0;i<n;i++){
if(i==0){
st[i].wt=st[i].ft+st[i].dt;
}else{
if(st[i-1].wt<st[i].dt){
st[i].wt=st[i].ft+st[i].dt;
}else{
st[i].wt=st[i-1].wt+st[i].ft;
}
}
}
}
void zt(int n){//计算周转时间
for(int i=0;i<n;i++){
st[i].z=st[i].wt-st[i].dt;
}
}
void dzt(int n){//计算带权周转时间
for(int i=0;i<n;i++){
st[i].d=st[i].z/(st[i].ft*1.0);
}
}
double ave_z(int n){//计算平均周转时间
double sum=0;
for(int i=0;i<n;i++){
sum=sum+st[i].z;
}
return sum/(double)n;
}
double ave_d(int n){//计算平均带权周转时间
double sum=0;
for(int i=0;i<n;i++){
sum=sum+st[i].d;
}
return sum/(double)n;
}
int main()
{
int i;
int n;
int x;
double a=0;
double b=0;
cout<<"请输入作业(进程)个数:(n<=100)"<<endl;
cin>>n;
cout<<"*************************************"<<endl;
cout<<"请输入作业号、到达时间、 服务时间"<<endl;
for(i=0;i<n;i++){
cin>>st[i].id>>st[i].dt>>st[i].ft;
}
cout<<"*************************************"<<endl;
cout<<"请选择算法“1-FCFS,2-SJF”"<<endl;
cin>>x;
if(x==1){
sort(st,st+n,cmp);
wt(n);
zt(n);
dzt(n);
a=ave_z(n);
b=ave_d(n);
printf("进程名 到达时间 服务时间 完成时间 周转时间 带权周转时间\n");
for(int i=0;i<n;i++){
printf(" %2d %2d %2d %2d %2.1lf %2.1f\n",st[i].id,st[i].dt,st[i].ft,st[i].wt,st[i].z,st[i].d);
}
printf("平均周转时间: %lf\n",a);
printf("平均带权周转时间:%lf\n",b);
}else if(x==2){
sort(st,st+n,cmp);
sort(st+1,st+n,cmp1);
wt(n);
zt(n);
dzt(n);
a=ave_z(n);
b=ave_d(n);
printf("进程名 到达时间 服务时间 完成时间 周转时间 带权周转时间\n");
for(int i=0;i<n;i++){
printf(" %2d %2d %2d %2d %2.1lf %2.1f\n",st[i].id,st[i].dt,st[i].ft,st[i].wt,st[i].z,st[i].d);
}
printf("平均周转时间: %lf\n",a);
printf("平均带权周转时间:%lf\n",b);
}else{
cout<<"输入错误,退出程序。"<<endl;
}
}