GPSS. Вспомним старичка
В данной статье рассмотрим пару задач по имитационному моделированию, и реализуем их на старом, добром GPSS WORLD. Не будем подробно проходится по синтаксису GPSS про это уже есть статьи, а рассмотрим решение конкретных задач.
Задача 1
Условие задачи
Магистраль передачи данных состоит из двух каналов (основного и резервного) и общего накопителя. При нормальной работе сообщения передаются по основному каналу за 7 ± 3 с В основном канале происходят сбои через интервалы времени 200 ± 35 с Если сбой происходит во время передачи, то за 2 с. запускается запасной канал, который передает прерванное сообщение с самого начала. Восстановление основного канала занимает 23 ± 7 с После восстановления резервный канал выключается и основной канал продолжает работу с очередного сообщения. Сообщения поступают через 9 ± 4 с и остаются в накопителе до окончания передачи. В случае сбоя передаваемое сообщение передается повторно по запасному каналу.
Немного обсудим
Для начала будет полезно составить схему нашей задачи, чтобы визуально посмотреть с чем мы имеем дело.
Давайте немного обсудим задачу. Мы имеем 2 канала, которые обрабатывают сообщения с одинаковой скоростью, второй канал включается, только в случаи, если на первом канале сбой. Когда основной канал восстановился, то запасной передаёт последнее сообщение и выключается.
В модели должно будет быть 3 канала, основной, резервный и канал который будет 2 с. удерживать транзакт, пока включается резервный канал. Условие определяющие недоступность основного канала (Если не доступен, то уходим на резервный). Создадим бесконечный накопитель, в котором заявки будут хранится всё время, что находятся в системе. Так-же посчитаем число сбоев. Модель будет работать 3600 с., работать будет 1 час.
Код
GENERATE 9,4; генерация сообщений
QUEUE NAK1; вход в очередь
GATE FV KAN1,MET2 ; проверка на недоступность
SEIZE KAN1; вход в 1-й канал
ADVANCE 7,3; отправка сообщения по 1-му каналу
RELEASE KAN1; выход из 1-го канала
DEPART NAK1; выход из очереди
TERMINATE ; удаление транзакта
MET2 SEIZE KAN2; вход во 2-й канал
ADVANCE 7,3; отправка сообщения по 2-му каналу
RELEASE KAN2; выход из 2-го канала
DEPART NAK1; выход из очереди
TERMINATE ; удаление транзакта
ERRGEN GENERATE 200,35; генерация ошибки
; установка недступности 1-го канала и перенос транзакта в мет3
; в котором производится задержка в 2с перед запуском
FUNAVAIL KAN1,RE,MET3
ADVANCE 23,7; время удаления ошибки
FAVAIL KAN1 ; Снятие недступности с 1-го канала
TERMINATE ; удаление транзакта
MET3 RELEASE KAN1; выход из канала 1
SAVEVALUE CHPRSOOBSH+,1 ; подсчёт кол-ва прерванных сообщений
SEIZE KAN3; вход в канал 3
ADVANCE 2;задержка 2с
RELEASE KAN3; выход из канала 3
TRANSFER,MET2; переход на MET2
;генератор работы СМО в течение 3600 с часа
GENERATE 3600
TERMINATE 1
START 1
Всё прокомментировано, мне кажется смысла в доп. комментариях нет.
Результаты
Всего было создано 17 ошибок и 17 сообщений прервали, значит прерывание каждый раз случалось во время передачи сообщения. Если рассуждать об этой модели, как о реальной системе, то наверное вообще вероятность прерывания сообщения не есть хорошо, особенно, если сбой всегда будет прерывать сообщение. Что можно выделить хорошего, дк это то, что максимальное число сообщений в накопителе — 3, даже беря с огромной погрешностью, при работе данной магистрали, накопителя на 10 сообщений вполне хватит.
Задача 2
Условие задачи
Распределенный банк данных системы сбора информации организован на базе ЭВМ, соединенных. Поступающий запрос обрабатывается на первой ЭВМ и с вероятностью 50% необходимая информация обнаруживается на месте. В противном случае необходима посылка запроса во вторую ЭВМ. Запросы поступают через 10 ± 3 с, первичная обработка запроса занимает 2 с, выдача ответа требует 8 ± 2 с, передача по каналу связи занимает 3 с. Временные характеристики второй ЭВМ аналогичны первой.
Немного обсудим
У нас в системе есть 2 ЭВМ, сначала запрос поступает на первый ЭВМ, там обрабатывается 2 с, если необходимая информация найдена то выводится ответ, занимающий в среднем 8 секунд, иначе передаётся на второй ЭВМ, что займёт 3 с и обрабатывается на нём ещё 2 с, потом уже выводится ответ. У каждого ЭВМ будет свой накопитель. Для передачи сообщения свободны должны быть оба ЭВМ.
Код
GENERATE 10,3; генерируем транзакт
QUEUE NAK1; заходим в первый накопитель
SEIZE EVM1; занимаем первый ЭВМ
ADVANCE 2; обрабатываем транзакт
TRANSFER.5,MET1,MET2; с вероятностью 50% находим ответ
MET1 ADVANCE 8,2; если нашли, то печатаем ответ
RELEASE EVM1; освобождаем первый ЭВМ
DEPART NAK1; уходим из накопителя
TERMINATE; удаляем транзакт
MET2 QUEUE NAK2; заходим во второй накопитель
SEIZE EVM2; занимаем второй ЭВМ
SEIZE TRANS; занимаем канал передачи
ADVANCE 3; передаём транзакт на второй ЭВМ
RELEASE TRANS; освобождаем канал передачи
RELEASE EVM1; освобождаем первый ЭВМ
DEPART NAK1; уходим из накопителя
ADVANCE 2; обрабатываем транзакт
ADVANCE 8,2; выводим ответ
RELEASE EVM2; Освобождаем второй ЭВМ
DEPART NAK2; уходим из накопителя
TERMINATE; удаляем транзакт
;генератор работы СМО в течение 1 часа
GENERATE 3600
TERMINATE 1
START 1
Всё прокомментировано, мне кажется смысла в доп. комментариях нет.
Результаты
Среднее время нахождение транзакта во втором ЭВМ, значительно больше, чем в первой — это связанно с тем, что в нём гарантированно нужно выводить ответ, в отличии от первого. Так же можно заметить, что первый ЭВМ, загружен 91% времени, что не является хорошим показателем, но т.к. это всё таки компьютер, а не человек, является допустимым. Особо большие накопители не понадобятся и в этой задаче, для обоих ЭВМ подойдут накопители, способные хранить 10 транзактов.
Заключение
Ну вот мы немного и вспомнили старый, добрый GPSS, сгенерировали 2 модели и немного проанализировали их. В целом GPSS очень мощный инструмент для моделирования, его до сих пор можно считать актуальным и продолжать делать на нём какие-то модели, не смотря на то, что ему уже больше 20 лет.