Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л.р.№4 Модель сети Ethernet.doc
Скачиваний:
43
Добавлен:
15.03.2015
Размер:
217.6 Кб
Скачать

Диаграмма задержки сообщений

********************************************************************

Msg_Delays QTABLE Global_Delays,1,1,20

********************************************************************

Главная часть модели

********************************************************************

Генерация сообщений

********************************************************************

GENERATE (Exponential(1,0,Intermessage_Time)) ;Генератор отдельных сообщений

ASSIGN Node_ID,V$Node_Select ;Получить номер узла

ASSIGN Message_Time,V$Msgtime ;Подсчет и сохранение времени

ASSIGN Retries,0 ;При начале нет коллизий

********************************************************************

Ожидание, пока узел не закончит любую предыдущую работу

********************************************************************

QUEUE Global_Delays ;Запуск времени

SEIZE P$Node_ID ;Занять узел.

Try_To_Send PRIORITY 1 ;Присвоение приоритета

SEIZE Jam ;Ожидание другого узла

RELEASE Jam ;Очередь, чтобы закончить.

TEST E F$Ethernet,1,Start_Xmit ;Если Ethernet свободный, то продвижение.

*******************************************************************

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

********************************************************************

TEST E V$Collide,1,Start_Xmit ;Коллизии нет, переход к ее ожиданию

* * * * * * * * * * * * Коллизия * * * * * * * * * * * * *

Collision PREEMPT Ethernet,PR,Backoff,,RE ;Удалить занимающий транзакт

SEIZE Jam ;Передача в Ethernet преднамеренных помех

ADVANCE Jam_Time ;Время передачи помех

RELEASE Jam ;Конец передачи помех

RELEASE Ethernet ; Ethernet освобождается

PRIORITY 0 ;Возвращение к нормальному приоритету.

Backoff ASSIGN Retries+,1 ;Увеличить счетчика повторов

TEST LE P$Retries,Backoff_Limit,Xmit_Error ;Ограничение попыток

ADVANCE V$Backoff_Delay ;Ожидание перед началом попытки

TRANSFER ,Try_To_Send ;Переход к новой попытке

********************************************************************

Занятие Ethernet и начало передачи

********************************************************************

Start_Xmit SEIZE Ethernet ;Занимает Ethernet, если необходимо, ждет

SAVEVALUE Xmit_Node,P$Node_ID ;Определение передающего узла

SAVEVALUE Xmit_Begin,AC1 ;отмечается начало времени передачи

PRIORITY 0 ;Гарантия, что транзакт может быть вытеснен

ADVANCE P$Message_Time ;Ждите, пока сообщение не послано.

ADVANCE Interframe_Time ;Ethernet занят для передачи.

RELEASE Ethernet ;Ethernet освободился.

Free_Node RELEASE P$Node_ID ;Узел освободился

DEPART Global_Delays ;к следующему сообщению.

TERMINATE ;Сообщение передано.

********************************************************************

Xmit_Error SAVEVALUE Error_Count+,1 ;Подсчет ошибок.

TRANSFER ,Free_Node ;Узел освобождается

*******************************************************************