Листинг базовой программы
TEST E V$Collide, 1, Start_Xmit. SAVEVALUE Xmit_Node, P$Node_ID. ASSIGN Message_Time, V$Msgtime. Сегмент таймера. Исходные данные: ASSIGN Node_ID, V$Node_Select. Free_Node RELEASE P$Node_ID. Fraction_Short_Msgs EQU 600. Interframe_Time EQU 0.0096. Backoff ASSIGN Retries+, 1. Start_Xmit SEIZE Ethernet. SAVEVALUE Xmit_Begin, AC1. Intermessage_Time EQU 1.0. ADVANCE V$Backoff_Delay. ADVANCE… Читать ещё >
Листинг базовой программы (реферат, курсовая, диплом, контрольная)
- * Аргументы:
- * 1. Node_Count — Количество узлов, отстоящих друг от друга на 2.5 м.
- * 2. Min_Msg — Минимальное сообщение (бит).
- * 3. Max_Msg — Максимальное сообщение (бит).
- * 4. Fraction_Short_Msgs — Доля коротких сообщений (в долях от тысячи)
- * 5. Intermessage_Time — Общий интервал между сообщениями.
- * Исходные данные:
- * Node_Count = 100 — Общее число узлов Ethernet.
- * Intermessage_Time=1.0 — Среднее значение общего количества сообщений, поступающих каждую миллисекунду.
- * Min_Msg = 512 — Минимальное сообщение в битах.
- * Max_Msg = 12 144 — Максимальное сообщение в битах.
- * Fraction_Short_Msgs = 600 — Короткие сообщения (в долях от тысячи).
- * Lot_Time = 0.0512 — Время прохождения 512 битов.
- * Jam_Time = 0.0032 — Время прохождения 32 битов.
- * Backoff_Limit = 10 — Не больше, чем 10 повторов в случае коллизии.
- * Interframe_Time = 0.0096 — Время прохождения 96 битов.
- ******************************************************************
Node_Count EQU 100.
Intermessage_Time EQU 1.0.
Min_Msg EQU 512.
Max_Msg EQU 12 144.
Fraction_Short_Msgs EQU 600.
Slot_Time EQU 0.0512.
Jam_Time EQU 0.0032.
Backoff_Limit EQU 10.
Interframe_Time EQU 0.0096.
- ******************************************************************
- *
- * Определение функций и переменных GPSS
- *
- ******************************************************************
Backoff_Delay VARIABLE Slot_Time#V$Backrandom.
Backrandom VARIABLE 1+(RN4@((2^V$Backmin)-1)).
Backmin VARIABLE (10#(10'L'P$Retries))+(P$Retries#(10'GE'P$Retries)).
Node_Select VARIABLE 1+(RN3@Node_Count).
Collide VARIABLE ABS ((X$Xmit_Node-P$Node_ID)/100 000)'GE' (ACl-X$Xmit_Begin).
Msgtime VARIABLE (0.0001)#V$Msgrand.
Msgrand VARIABLE Min_Msg+(RN1'G'Fraction_Short_Msgs)#(Max_MsgMin_Ms).
- ******************************************************************
- *
- * Диаграмма задержки сообщений*
- ******************************************************************
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, l, Start_Xmit.
- ******************************************************************
- * Ethernet занят. Проверим, находимся ли мы в окне коллизии передающего узла.
- * Если это так, данный узел в любом случае начнет передачу, т.к. несущая не
- * будет обнаружена. В этом случае мы должны инициировать коллизию.
- * Если задержка распространения до передающего узла больше или равна времени передачи, происходит коллизия.******************************************************************
TEST E V$Collide, 1, Start_Xmit.
* * * * * * * * * * * * * * * * Коллизия * * * * * * * * * * * * * * * * * * * * * *.
Collision PREEMPT Ethernet, PR, Backoff,, RE.
SEIZE Jam.
ADVANCE Jam_Time.
RELEASE Jam.
RELEASE 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.
SAVEVALUE Xmit_Node, P$Node_ID.
SAVEVALUE Xmit_Begin, AC1.
PRIORITY 0.
ADVANCE P$Message_Time.
ADVANCE Interframe_Time.
RELEASE Ethernet.
Free_Node RELEASE P$Node_ID.
DEPART Global_Delays.
TERMINATE.
******************************************************************.
Xmit_Error SAVEVALUE Error_Count+, 1.
TRANSFER, Free Node.
- ******************************************************************
- *
- * Сегмент таймера
- *
- ******************************************************************
GENERATE 1000.
TERMINATE 1.
******************************************************************.