2016-04-20 10 views
0

Ich entwickle für einen FCFS-Scheduler-Algorithmus. Aber es funktioniert nur mit einem Prozessor. Wie kann die Aufgabe in 6 Prozessoren aufgeteilt werden? Ich würde Warteschlange, fertige Warteschlange, usw. benötigen.First Come First Serve Multiprozessor (6 Prozessoren) Scheduler in C-Code

Jeder Prozessor sollte einzeln arbeiten, wenn ein Prozessor seine Aufgabe beendet, dann würde es die nächste Aufgabe dauern, ohne auf die Fertigstellung aller Prozessoren zu warten.

#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; 
} 
+0

Ist ein Betriebssystem beteiligt? Zum Beispiel, wie erzeugt 'printf()' Ausgabe auf einem Terminal? – wallyk

+0

Ich schlage vor, dass Sie Multithreading verwenden! – skrtbhtngr

+0

Willkommen bei Stack Overflow. Bitte informieren Sie [fragen] nach Informationen, wie Sie Ihre Fragen optimal bearbeiten können. Zum Beispiel scheint diese Frage ein wenig breit zu sein, da Sie fragen, wie man im Grunde eine ganze Bibliothek implementiert. Versuchen Sie, auf eine bestimmte Frage einzugehen, die in einigen Absätzen beantwortet werden kann. – Kateract

Antwort

0

Dies scheint wie Hausaufgaben für Betriebssysteme Klasse.

Da Sie keine Ankunftszeiten der Prezesses haben, nur Dauer, gehen wir davon aus, dass alle zur selben Zeit ankommen, aber in einer Liste geordnet sind.

Ich werde die Begriffe Jobs und CPUs statt Prozesse und Prozessoren aus offensichtlichen Gründen verwenden.

Die ersten sechs Jobs werden allen sechs CPUs zugewiesen. Der nächste Job (7.) wird der CPU zugewiesen, die zuerst beendet wird. Dann wird der nächste 8. Job der CPU zugewiesen, die als nächstes fertig ist (nachdem der 7. gestartet wurde).

Der Algorithmus kann leicht mit Priorität (min) Warteschlange implementiert werden.

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 

Sie können damit herumspielen, um vielleicht durchschnittliche Endzeiten anstelle von durchschnittlichen Wartezeiten zu erhalten.