Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МиАПО / SIMC_dorab.doc
Скачиваний:
13
Добавлен:
07.02.2016
Размер:
756.22 Кб
Скачать

2.5 Блокировка транзактов

2.5.1 Функцияwait

Продвижение транзакта в модели может быть приостановлено до наступления заданного события. Для этой цели предназначена функция void wait(event е), гдеe- номер ожидаемого события. Если событиеeуже произошло, то транзакт продолжает продвигаться по модели, иначе транзакт, на который указывала ссылкаtrans, помещается в список по ссылкеwaitl[e] последним в своем классе приоритетов. При этом значение ссылкиtransустанавливается равнымnil. После выполнения событияeтранзакт, первый в спискеwaitl[e], пере­водится в списокcurrent.

Пример 5.1. Использование функцииwaitдля организации очереди перед узлом задержки. Поступление тран­зактов экспоненциальное, задержка - постоянная, дисциплина обслуживания - FIFO. В этом примере поступающие на обработку транзакты скапливаются в списке транзактов, ожидающих событие 4, кото­рое связано с уничтожением транзакта, переходя­щего после задержки к событию 4. Заметим, что все транзакты, находящиеся в спискеwaitl[4]в момент возникновения четвёртого события будут переправлены к событию 3. Моделирование будет завершено, если число ожидающих транзактов бу­дет больше или равно 10.

voidmain(){

//variables

doublej,lambda;

...;

while(waitl[4]->p->ll<10) {

plan();

switch(sysevent) {

case 1: create(randexp(lambda,v1)); break;

case 2: if(future->p->ll>1) wait(4); break;

case 3: delayt(j); break;

case 4: destroy(); break; }

}

}

...

}

2.5.2 Функцииacceptиsend

В системе СИМ-СИ определены:

- тип "сигнал": signal=1..signmax;

- массив списков сигналов: array<min_signal,max_signal,plistt> signlist;

- две функции aссерt(signal sg), send(signal sg);

Функция void aссept(signal sg) переводит активный транзакт в список сиг­налаsgиз спискаcurrent. Транзакт перестает быть активным и остается в этом списке, ожидая выполнения функцииvoidsend(signal sg). При выполнении функцииacceptранее поступавшие от функцииsendсигналы не учитываются.

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

Фактически, aссерt- ожидание сигналаsg, аsend- посылка этого сигнала.

signmax- системная константа, определяется при генерации СИМ-СИ.

2.6 Изменение порядка осуществления событий. Функцияnехt

Если при обработке события nвстретилась функцияvoid next(event e), гдеe- номер события, которое должно осуществиться послеn, то значениеtrans->eve(а следовательно иcurrent->first->eve) ус­танавливается равнымe, аtrans=nil. Далее автоматически выби­рается активный транзакт:trans=current->first. Системная пере­меннаяsyseventполучит значениеsysevent=trans->eve, то есть станет равнойe.

2.7 Использование приборов

Использование приборов позволяет сделать процесс обработки более наглядным; кроме того, по приборам собирается статистика, которая может быть использована для оценки их функционирования. Приборы относятся к объектам, называемым в системе устройствами, поэтому функции обращения к ним делятся на две группы: функции ввода и функции вывода транзактов. Порядок записи функций в модели произвольный, важно, чтобы логика моделирования не была нарушена попыткой вывода транзакта из свободного прибора.

Соседние файлы в папке МиАПО