G
ge4r
Добрый день,нужно накатать 2 таких алгоритма и вычислить параметры их работы сравнить их.
параметры - это различные величины,получаемые из общего времени нахождения процесса в системе(в коде gtime) и времени его непрерывной работы(в коде cburst);
вот FCFS попытался накатать,но он не хочет работать,видимо ошибка в методе fcfs
параметры - это различные величины,получаемые из общего времени нахождения процесса в системе(в коде gtime) и времени его непрерывной работы(в коде cburst);
вот FCFS попытался накатать,но он не хочет работать,видимо ошибка в методе fcfs
C++:
#include <iostream>
#include <stdlib.h>
using namespace std;
int n;
class process {
public:
int stime;
int burst;
int cburst;
int gtime;
int priority;
int completed;
int number;
float M;
float R;
float P;
process() {
this->burst=0;
this->stime=0;
this->priority=0;
}
~process() {};
};
void random (process procs[]){
for (int i=0;i<n;i++) {
procs[i].stime=rand() % 10;
procs[i].burst=rand() % 100 + 1;
procs[i].cburst=procs[i].burst;
procs[i].completed=0;
procs[i].number=i;
procs[i].priority=rand()%4 +1;
}
}
process* min_stime(process procs[]){
int min_time = INT_MAX;
process *min;
for (int i=0;i<n;i++){
if(procs[i].completed==0 && procs[i].stime<min_time){
min_time=procs[i].stime;
min=&procs[i];
}
}
return min;
}
void fcfs (process procs[]){
process *cur=min_stime(procs);
int tick=0;
while(cur!=NULL) {
if (cur->burst==0){
cur->completed=1;
}
if (cur->completed==1){
cur->gtime=tick-cur->stime;
cur=min_stime(procs);
if (cur==NULL) break;
}
if (tick>= cur->stime){
cur->burst--;
}
tick++;
}
}
void count (process procs[]){
for (int i=0;i<n;i++){
procs[i].M=procs[i].gtime-procs[i].cburst;
procs[i].R=procs[i].cburst/procs[i].gtime;
procs[i].P=1/procs[i].R;
}
}
int main(int argc, char *argv[])
{
cout<<"Input n: ";
cin>>n;
process procs[n];
random(procs);
fcfs(procs);
count (procs);
for (int i=0;i<n;i++){
printf("M= ",procs[i].M);
}
system("PAUSE");
return 0;
}