Добрый день,нужно накатать 2 таких алгоритма и вычислить параметры их работы сравнить их. параметры - это различные величины,получаемые из общего времени нахождения процесса в системе(в коде gtime) и времени его непрерывной работы(в коде cburst);
вот FCFS попытался накатать,но он не хочет работать,видимо ошибка в методе fcfs
| Код | #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; }
|
|