我试图用到达时间对 SJF 调度算法进行编码,但我的程序忽略了 2 个进程的到达时间相等的情况。谁能帮我找出为什么会这样?
我在这里从这个例子中获取值:
https://www.prepbytes.com/blog/c-programming/sjf-scheduling-program-in-c/
我的代码正在生成输出=>
流程 | 爆发时间 | 等待时间 | 周转时间 |
---|---|---|---|
p1 | 3 | -1 | 1 |
p3 | 2 | 1 | 3 |
p2 | 4 | 2 | 6 |
p4 | 4 | 4 | 8 |
平均等待时间=1.50
平均周转时间=4.50
#include <stdio.h>
void swap(int *arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
int main()
{
int BT[10], AT[10], P[10], WT[10], TAT[10], CT[10], sum = 0, n, totalWT = 0, totalTAT = 0, min, temp;
float avg_wt, avg_tat;
printf("Enter number of process:");
scanf("%d", &n);
printf("\nEnter Burst Time:\n");
for (int i = 0; i < n; i++)
{
printf("Process %d: ", i + 1);
scanf("%d", &BT[i]);
P[i] = i + 1;
}
printf("\nEnter Arrival Time:\n");
for (int i = 0; i < n; i++)
{
printf("Process %d: ", i + 1);
scanf("%d", &AT[i]);
}
// sorting according to arrival time
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (AT[i] == AT[j])
{
if (BT[i] > BT[j])
{
swap(AT, i, j);
swap(BT, i, j);
swap(P, i, j);
}
}
else if (AT[i] > AT[j])
{
swap(AT, i, j);
swap(BT, i, j);
swap(P, i, j);
}
}
}
int run = 0;
for (int i = 0; i < n; i++)
{
if (i == 0)
{
min = i;
}
else
{
// designing a code which gives the process to execute
for (int j = i; j < run - 1; j++)
{
min = j;
for (int k = j + 1; k < run; k++)
{
if (k >= n)
{
goto label;
}
if (BT[min] > BT[k])
{
min = k;
}
}
}
}
label:
sum += BT[min];
CT[i] = sum;
TAT[i] = CT[i] - AT[min];
WT[i] = TAT[i] - BT[min];
totalWT += WT[i];
totalTAT += TAT[i];
run += BT[min];
swap(AT, i, min);
swap(BT, i, min);
swap(P, i, min);
}
avg_wt = (float)totalWT / n;
printf("\nProcess\t\tBurst Time\tWaiting Time\tTurnaround Time");
for (int i = 0; i < n; i++)
{
printf("\np%d\t\t %d\t\t %d\t\t\t%d", P[i], BT[i], WT[i], TAT[i]);
}
avg_tat = (float)totalTAT / n;
printf("\n\nAverage Waiting Time=%.2f", avg_wt);
printf("\nAverage Turnaround Time=%.2f", avg_tat);
}
我的输出: 输入进程数:4
输入突发时间: 过程 1:3 过程 2:4 过程 3:2 过程 4:4
输入到达时间: 过程 1: 1 过程 2:2 过程 3:1 过程 4:4
平均等待时间=1.50 平均周转时间=4.50
我期待:
Average waiting time: 3.000000
Average turnaround time: 6.250000