Планировщик First Come First Serve Multiprocessor (6 процессоров) в коде C

Я разрабатываю алгоритм планировщика FCFS. Но это работает только с одним процессором. Как можно разделить задачу на 6 процессоров? Мне понадобится очередь ожидания, очередь готовности и т.д.

Каждый процессор должен работать индивидуально, если один процессор закончит свою задачу, то он возьмется за следующую задачу, не дожидаясь завершения всех процессоров.

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

person creativeguitar    schedule 20.04.2016    source источник
comment
Задействована ли операционная система? Например, как printf() производит вывод на терминал?   -  person wallyk    schedule 20.04.2016
comment
Я предлагаю вам использовать многопоточность!   -  person skrtbhtngr    schedule 20.04.2016
comment
Добро пожаловать в Stack Overflow. Пожалуйста, проверьте Как спросить, чтобы узнать, как получить максимальную отдачу от ваших вопросов. Например, этот вопрос кажется немного широким, поскольку вы спрашиваете о том, как реализовать в основном целую библиотеку. Постарайтесь сузить круг до конкретного вопроса, на который можно ответить в нескольких абзацах.   -  person Kateract    schedule 20.04.2016
comment
да, я использую Ubuntu для компиляции своего кода,   -  person creativeguitar    schedule 20.04.2016
comment
как мне реализовать многопоточность в этом примере, не могли бы вы мне помочь? не могли бы вы использовать многопоточность, например, для демонстрации 4 процессоров?   -  person creativeguitar    schedule 20.04.2016
comment
Есть несколько способов сделать это. Один из них — использовать fork() и создать новый процесс. Другой способ — использовать pthreads. Чего вы хотите достичь?   -  person wallyk    schedule 21.04.2016


Ответы (1)


Это похоже на домашнее задание для класса операционных систем.

Поскольку у вас нет времени прибытия прецессий, а только продолжительность, мы предполагаем, что все они приходят одновременно, но упорядочены в некотором списке.

Я буду использовать термины «задания» и «процессоры», а не «процессы» и «процессоры» по очевидным причинам.

Первые шесть заданий будут назначены всем шести процессорам. Следующее задание (7-е) будет назначено процессору, который закончит первым. Затем следующее 8-е задание будет назначено процессору, который завершится следующим (после запуска 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

Вы можете поиграть с этим, возможно, чтобы получить среднее время завершения вместо среднего времени ожидания.

person dimm    schedule 20.04.2016