- •Лабораторная работа № 4. «Модель сети Ethernet»
- •3. Представление имитационной модели
- •Модель 10 Mb/s сети Ethernet
- •Определение gpss Функций и Переменных
- •Диаграмма задержки сообщений
- •Главная часть модели
- •Генерация сообщений
- •Ожидание, пока узел не закончит любую предыдущую работу
- •Занятие Ethernet и начало передачи
- •Сегмент таймера
- •5. Анализ результатов моделирования
- •Контрольные вопросы
- •Порядок выполнения работы
- •Содержание отчета
Диаграмма задержки сообщений
********************************************************************
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 ;Узел освобождается
*******************************************************************