2012-02-28 5 views
0

При программировании планирования процессора в ANSI C для среды linux я не смог вычислить время ожидания для каждого процесса в очереди. В принципе, мне нужно запустить 20+ процессов с 4 процессорами и измерить время, которое требуется для каждого процесса, среднее время, которое требуется, потребление процессора и т. Д.Расчет времени ожидания для первого появления в ANSI C

Вот аналогия для процесса, который я пытаюсь выполнить :

Click me for the image

изображение Я нарисовал пытался упростить мои проблемы ... , но это первый пришел первый служить schedualer CPU, счетчик а взрыв процессора, счетчик B является Выброс устройства, строка 1 является готовой очередью, строка 2 - очередь устройств ...

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

У каждого человека структура имеет «время прибытия» и может быть изменена в любое время Каждая структура человека также имеет массив времени, требуемый для каждого счетчика «timeRequired []», он чередуется, индекс 0 для счетчика А, индекс 1 равен для счетчика B индекс 2 снова для A. У каждого человек структуры есть указатель массива для timeRequired [], «arrayPointer»

картины, которую я нарисовал говорит секунды, но это на самом деле любая единица времени, целое число, я действительно не нужен фактические time clock ...

Что я сделал до сих пор, я создал 2 функции нити, 1 для counterA и 1 для counterB, и когда когда-либо Готовая подача человека в линию, A наполнит человека до линии B, , когда когда-либо B закончил человека, он запишет его в линию A.

Я чувствую, что все есть для меня уже, но я действительно не знаю, что мне нужно делать дальше рассчитанным их время ожидания ...

Или есть простое решение, чем использование потоков?

Профессор дал нам 2 файла

на вспомогательные методы

[http://pastebin.com/qF7nQsUR]

заголовочный файл

[http://pastebin.com/nQQNXnmq]

+0

Так что - какой ответ вы принимаете? –

+0

К сожалению, ни один из ответов ниже, я не спросил одноклассников, и они сказали сделать цикл, и подсчитать i + 1, чтобы получить время ожидания. – Hiko

ответ

0

Я бы подойти так:

Выяснить, как кодировать входной сигнал. Программа должна иметь доступ к ней «человек 1 нуждается ...».
Эти определения могут работать:

struct need { 
    int person_id, counter_id, duration 
}; 
struct need needs[] = { 
    { 1, COUNTER_A, 500 }, 
    { 1, COUNTER_B, 200 }, 
... 
}; 

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

struct person_activity { 
    int person_id; 
    struct need *activity; 
    int start_time; 
} 

Массив из них можно описать то, что каждый делает в любом галстука

+0

Ugoren, большое спасибо за ваш ответ! Фактически, «потребности», упомянутые в вашем коде, «потребность в структуре» зависят от ввода процесса, поэтому он зависит от данных, которые подаются. То, что я только пытаюсь сделать, - это измерить время, необходимое для завершения процесса в процессе обработки CPU с 4 процессами cpus и 29, так как каждый из 29 процессов должен стоять в очереди в порядке FCFS. – Hiko

0

gettimeofday (2).

где-то внутри процесса STRUCT

struct timeval bornon; /* time this process was born */ 

, а затем вызвать gettimeofday на него в вашем пути выделения

if (gettimeofday(&process->bornon, NULL) == -1) 
    err(1, "ohnoes! gettimeofday!"); 

, а затем вызвать его еще раз, когда ваш процесс выполняется

struct timeval doneon; 
int secs, usecs; 

gettimeofday(&doneon, NULL); 
secs = doneon.tv_secs - process->bornon.tv_secs; 
usecs = doneon.tv_usecs - process->bornon.tv_usecs; 

, а затем совершать конверсии в течение секунд/микросекунд.

+0

Я не думаю, что он интересуется настоящими часами. Он делает симуляцию, поэтому симуляция 500-секундного ожидания не означает, что программа работает в течение 500 секунд. – ugoren

+0

Применяется основной принцип, независимо от того, что «часы» в конечном счете: время рождения, вычитаемое из времени смерти. И, в качестве бонуса, каждый узнает, что такое gettimeofday, босс-стиль;) – tbert

+0

В основном вы описываете, как использовать 'gettimeofday', что приятно, но, конечно, не то время, которое требуется здесь. – ugoren

Смежные вопросы