Во-первых, извинения за возможно простой вопрос и плохой код, как и большинство людей, которые задают вопросы, я очень плохо знаком с рассматриваемым языком.
Назначение кода:
Для создания программы, имитирующей планирование процесса.Этот конкретный пример должен имитировать планирование «первым пришел первым обслужен».Рассматриваемые наборы данных упорядочены (например, PID с 0 по 5, все поступают в последовательности) и неупорядочены (например, 3 могут прибыть до 1 и т. Д.).
Чтобы достичь этого, я попытался найти наименьшую запись в моем прибытиивременной массив, чтобы гарантировать, что записи обрабатываются по порядку.Из-за этого я изменяю массивы по мере их прохождения через цикл for, изменяя наименьшее значение, чтобы оно не запускалось дважды (я думаю, что это может быть моей проблемой, но я не уверен)
Конкретный циклУ меня проблемы с:
for (i = 1; i < processes; i++) {
atperm[position] = at[position];
smallestentry();
wt[position] = btt - at[position]; //wait time = total burst time - arrival time
btt += bt[position]; //total burst time = total burst time + burst time
awt += wt[position]; //average wait time = average wait time + wait time
tat[position] = wt[position] + bt[position]; //turn around time = wait time + burst time
atat += tat[position]; //average turn around time = average turn around time + turn around time
changeline(position);
}
Полный код:
#include <stdio.h>
#include <stdlib.h>
/*
* WT - Wait Time (TAT -BT)
* BT - Bust Time
* AT - Arrival Time
* TAT - Turn Around Time (CT - AT)
* AWT - Average Wait Time
* ATAT - Average Turn Around Time
*/
int wt[10], bt[10], at[10], atperm[10], tat[10], processes, smallest, i, position;
float awt, atat;
void input() {
printf("Enter number of processes:\n");
scanf("%d", &processes);
int i;
for (i = 0; i < processes; i++) {
printf("Enter burst time of process %d:", i + 1); //increase i by 1 but dont save
scanf("%d", &bt[i]);
printf("Enter arrival time of process %d:", i + 1);
scanf("%d", &at[i]);
}
}
void changeline(int position) {
at[position] = 999;
printf("AT\tBT\tWT\tTAT\tAT\n");
for (i = 0; i < processes; i++) {
printf("%3d\t%3d\t%3d\t%3d\t%3d\n", at[i], bt[i], wt[i], tat[i], atperm[i]);
}
}
void smallestentry() {
smallest = at[0];
for (i = 0; i < processes; i++) {
if (smallest > at[i]) {
smallest = at[i];
position = i;
}
}
}
void calculate() {
smallestentry();
wt[position] = 0; //sets the first entry in wait time array to equal 0
atat = tat[position] = bt[position]; //sets the first entries in atat and tat array to equal first bt entry
int btt = bt[position]; //to store total burst time sum
atperm[position] = at[position];
changeline(position);
for (i = 1; i < processes; i++) {
atperm[position] = at[position];
smallestentry();
wt[position] = btt - at[position]; //wait time = total burst time - arrival time
btt += bt[position]; //total burst time = total burst time + burst time
awt += wt[position]; //average wait time = average wait time + wait time
tat[position] = wt[position] + bt[position]; //turn around time = wait time + burst time
atat += tat[position]; //average turn around time = average turn around time + turn around time
changeline(position);
}
atat /= processes; // atat = atat / processes
awt /= processes; // awt = awt / processses
}
int main() {
printf("FCFS CPU Scheduling Algorithm\n");
input();
calculate();
}