0

私は FCFS スケジューラ アルゴリズムを開発しています。ただし、1 つのプロセッサでしか機能しません。タスクを 6 つのプロセッサに分割するにはどうすればよいですか? 待機キュー、準備完了キューなどが必要です。

各プロセッサは個別に動作する必要があり、1 つのプロセッサがタスクを終了すると、すべてのプロセッサが終了するのを待たずに次のタスクを実行します。

#include<stdio.h>

int main()
{

    int n,bt[20],wt[20],tat[20],avwt=0,avtat=0,i,j;
    printf("Enter total number of processes(maximum 20):");
    scanf("%d",&n);

    printf("\nEnter Process Burst Time\n");
    for(i=0;i<n;i++)
    {
        printf("P[%d]:",i+1);
        scanf("%d",&bt[i]);
    }

    wt[0]=0;    //waiting time for first process is 0

    //calculating waiting time
    for(i=1;i<n;i++)
    {
        wt[i]=0;
        for(j=0;j<i;j++)
            wt[i]+=bt[j];
    }

    printf("\nProcess\t\tBurst Time\tWaiting Time\tTurnaround Time");

    //calculating turnaround time
    for(i=0;i<n;i++)
    {
        tat[i]=bt[i]+wt[i];
        avwt+=wt[i];
        avtat+=tat[i];
        printf("\nP[%d]\t\t%d\t\t%d\t\t%d",i+1,bt[i],wt[i],tat[i]);
    }

    avwt/=i;
    avtat/=i;
    printf("\n\nAverage Waiting Time:%d",avwt);
    printf("\nAverage Turnaround Time:%d",avtat);

    return 0;
}
4

1 に答える 1

0

これは、オペレーティング システム クラスの宿題のようです。

歳差の到着時間はなく、継続時間しかないため、すべてが同時に到着すると仮定しますが、いくつかのリストで順序付けされています。

明らかな理由から、プロセスとプロセッサの代わりに、ジョブと CPU という用語を使用します。

最初の 6 つのジョブは、6 つの CPU すべてに割り当てられます。次のジョブ (7 番目) は、最初に終了する CPU に割り当てられます。その後、次の 8 番目のジョブが、次に終了する CPU に割り当てられます (7 番目のジョブが開始された後)。

このアルゴリズムは、優先 (最小) キューを使用して簡単に実装できます。

p := new priority queue
for 1 to 6
    insert 0 in p

total_wait_time = 0

for j in jobs
    top := pop from p
    end_time := top + j
    total_wait_time += top
    insert end_time in p

avg_wait = total_wait_time / num_of_jobs

平均待ち時間の代わりに平均終了時間を取得するために、これをいじることができます。

于 2016-04-20T20:24:03.697 に答える