Система передачи данных в GPSS World
Система передачи данных обеспечивает передачу пакетов данных из пункта А в пункт C через транзитный пункт В. В пункт А пакеты поступают через 10± 5 мс. Здесь они сохраняются в накопителе c максимальной вместительностью 25 пакетов и c равной вероятностью передаются по одной из двух линий: AB1 – за 20 мс; AB2 – за 20±5 мс. В пункте В пакеты снова буферизируются в накопителе c максимальной вместительностью 20 пакетов и дальше передаются по линии BC1 за 20±3 мс и по линии BC2 за 25 мс. Причем пакеты, которые передавались по AB1, поступают в BC1, а те, которые передавались по AB2, – в BC2. При достижении предельного значения количества пакетов в накопителе (максимальной вместительности) пакет, который пытается попасть в этот накопитель, уничтожается.
Промоделировать работу системы на протяжении 1 мин. Оценить вероятность уничтожения пакетов.
Листинг программы:
Листинг программы:
;ГЕНЕРАЦИЯ ПАКЕТОВ GENERATE 10,5 ;поступление пакетов через 5-15 мс или 10+/-5 TEST L Q1,25,met1 ;если очередь на передачу меньше 25 то вниз, иначе на метку met1 ;ПЕРЕДАЧА от A к B QUEUE 1 ;занять очередь на передачу от A к B TRANSFER BOTH,metAB2 ; ;Линия AB1 SEIZE AB1 ;занять устройство - линию AB1 DEPART 1 ;выйти из очереди ASSIGN 1,1 ;в первый параметр транзакта записать 1 ADVANCE 20 ;передача по линий АВ1 - за время 20 мс RELEASE AB1 ;освободить устройство - линию AB1 TRANSFER ,met2 ;перейти к пердачи от B к C ;Линия AB2 metAB2 SEIZE AB2 ;занять устройство - линию AB2 DEPART 1 ;выйти из очереди ASSIGN 1,2 ;в первый параметр транзакта записать 2 ADVANCE 20,5 ;передача по линий АВ2 - за время 15-25 мс RELEASE AB2 ;освободить устройство - линию AB1 ;ПЕРЕДАЧА от B к C met2 TEST L Q2,20,met3 ;если очередь на передачу меньше 20 то вниз, иначе на метку met3 QUEUE 2 ;занять очередь на передачу от B к C TEST E P1,1,metBC2 ;проверить 1й параметр транзакта. Если =1 то вниз, иначе к метке metBC2 ;Линия BC1 SEIZE BC1 ;занять устройство - линию СB1 DEPART 2 ;выйти из очереди TEST L Q2,15,RezervBC1 ;если очередь на передачу меньше 20 то вниз, иначе RezervBC1 ADVANCE 20,3 ;передача по линии ВС1 (за 20 ± 3 мс) savevalue countStandartMode+,1 ;счетчик использования стандартного режима передачи RELEASE BC1 ;освободить устройство - линию СB1 TERMINATE RezervBC1 ADVANCE 15 ;резервная аппаратура, время передачи снижается до 15 мс. savevalue countRezervMode+,1 ;счетчик использования резервного режима передачи RELEASE BC1 ;освободить устройство - линию СB1 TERMINATE ;Линия BC2 metBC2 SEIZE BC2 DEPART 2 TEST L Q2,15,RezervBC2 ADVANCE 25 ;передача по линии ВС1 (за 25 мс) savevalue countStandartMode+,1 RELEASE BC2 TERMINATE RezervBC2 ADVANCE 15 ;резервная аппаратура, время передачи снижается до 15 мс. savevalue countRezervMode+,1 RELEASE BC2 TERMINATE met1 savevalue countFullBufferA+,1 ;счетчик отказов на постановку в очередь на передачу AB TERMINATE met3 savevalue countFullBufferB+,1 ;счетчик отказов на постановку в очередь на передачу BС TERMINATE ;ЗАВЕРШАЮЩИЙ ТРАНЗАКТ GENERATE ,,,1 ;генерация только одного транзакта TEST E (x$countStandartMode+x$countRezervMode+x$countFullBufferA+x$countFullBufferB),500 ;когда сумма переменных станет = 500 транзакт пройдет вниз, иначе проверка продолжится SAVEVALUE VeroyatnostRezerva,(x$countRezervMode/(x$countStandartMode+x$countRezervMode)) ;вероятность использования резерва TERMINATE 1 start 1