Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КНИЖКА_Моделювання систем у GPSS World.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.15 Mб
Скачать

5.9. Створення і застосування списків користувача

У процесі моделювання система GPSS супроводжує два основних спис­ки подій – список поточних подій (СПП) і список майбутніх подій (СМП).

У списку СПП розташування транзактів здійснюється згідно порядку зменшення пріоритетів. Транзакти з однаковими транзактами поміщаються у СПП згідно черговості їх появлення. Під час моделювання першим переглядається СПП і система переміщує у моделі ці транзакти, для яких виконується задані умови. Будь-який транзакт у цьому списку може бути як в активному стані (активізований у даний момент модельного часу) так і у стані затримування. Якщо у СПП транзактів не має, тоді програма керування моделюванням звертається до другого списку СМП. Події, виконання яких заплановано на найближчий момент до модельного часу з СМП переносяться у СБП. Списки біжучих і майбутніх подій відображаються у вікні списків GPSS World.

Для перегляду транзактів у СПП з метою вибору наступного транзакта для просування його у моделі важливим є порядок перегляду заблокованих транзактів у цьому списку. Транзакти можуть бути заблоковані блоками GATE i TEST для перевірки станів ОКП.

Тому заблоковані транзакти, які перебувають в СПП, доцільно розміщувати в списки користувача (СК) і залишати їх до виконання умов, що дозволяють подальші просування цих транзактів.

Список користувача – це деякий буфер, в якому можуть тимчасово розміщатись транзакти, що виведені із СПП. На відміну від списків поточних і майбутніх подій транзакти вводяться у список користувача і виводяться з нього не автоматично, а за допомогою блоків LINK (Внести у список) i UNLINK (Вивести зі списку). Списки користувача зручні для моделювання алгоритмів, економії масштабного часу та формування дисциплін черг транзактів, які відрізняються від дисципліни “першим прийшов – першим обслуговується”, яка реалізована в СПП.

Введення транзактів у список користувача. Блок LINK. Формат запису блоку:

[назва] LINK А,В,[C]

Операнд А задає назву або номер списку користувача, в який розміщується транзакт після надходження у блоці LINK.

Операнд А може бути додатнім цілим числом, назвою, СЧА, СЧА*СЧА.

Операнд В впорядковує список користувача і визначає місце розміщення у ньому транзактів. Допустимі значення:

  • FIFO – транзакт розміщується в кінець списку;

  • LIFO – транзакт розміщується на початок списку;

  • PR – транзакти впорядковуються за зменшенням пріоритету;

  • P – транзакти розміщуються в порядку зростання значення параметра;

  • M1 – транзакти розміщаються в порядку зростання відносного часу перебування у моделі.

Операндом В можуть використовуватись і інші СЧА: арифметична змінна, функція, вираз в дужках. Тоді виконуються обчислення для активного транзакта (вказаного операндом В). Для решти транзактів, які перебувають у списку користувача, обчислення починаються із початку черги. Впорядкування транзактів у списку користувача здійснюється за зменшенням обчисленого значення.

Операнд С є необов’язковим. Він вказує на альтернативний вихід для опрацювання різних ситуацій у чергах. Може бути додатнім цілим числом, СЧА, СЧА*СЧА.

Операндом С вказується мітка блоку, до якого переходить активний транзакт у випадку, якщо індикатор списку користувача встановлений в 0 (виключений). Індикатор є у кожного списку користувача. Коли операнд С не використовується, індикатор встановлюється в “1” (включений) і всі транзакти, що надійшли в блок LINK, розміщуються в список користувача.

Якщо в блоці LINK використовується операнд С, то робота блоку LINK є більш складнішого. У цьому випадку перевіряється індикатор списку корис­тувача. Якщо він встановлений у положення “1”, то увійшовший транзакт роз­міщується у списку користувача згідно значень операнда В. Якщо ж індикатор встановлений у положення “0”, тоді він переводиться у положення “1”, а транзакт, що надходить, переміщається до блоку, що задається операндом С.

Розглянемо приклад використання блоку LINK без наявності операнда С.

LINK 5,LIFO

Блок розміщує транзакти на початок списку користувача з номером 5 в порядку їх надходженя. Блок

LINK King,P$Princ

розміщує транзакти в список користувача з іменем King. Вони впорядковуються за зростанням значення параметра з іменем Princ.

Розглянемо організацію перевірки умов розміщення транзактів у списку користувача. Вважатимемо, що в них можна розмістити довільне число транзактів. Зокрема, у випадку зайнятості ОКП скерувати транзакт в список користувача можна таким чином

. . .

GATE NU Kan1,Cher

SEIZE Kan1

. . .

Cher LINK King,LIFO

. . .

Якщо ОКП Kan1 зайнятий, то блок GATE направляє транзакт в блок LINK з іменем King і блокує блок SEIZE. Транзакт вводиться на початок списка користувача з іменем King.

Список користувача можна розмістити і так

. . .

GATE U Kan1,Cher

LINK King,LIFO

Cher SEIZE Kan1

. . .

Якщо ОКП Kan1 зайнятий, то транзакт переходить до наступного блоку LINK і розміщується в список користувача з іменем King. Незайнятість ОКП зумовлює пересування транзакту в блок SEIZE з міткою Cher. Транзакт займає вільний ОКП.

Для моделювання реальних систем у списку користувача може розташовуватися задане число транзактів. Це обмеження можна реалізувати наступним чином

Buf EQU 15

. . .

GATE NU Kan1,Mit1

SEIZE Kan1

. . .

Mit1 TEST L CH$King,Buf,Mit2

LINK King,FIFO

Якщо ОКП Kan1 зайнятий, то блок GATE блокує входження транзакту в блок SEIZE і спрямовує його в блок ТEST з міткою Mit1, який знаходиться перед блоком LINK. Якщо поточний вміст списка користувача з іменем King є меншим за задану ємність Buf, то транзакт надходить у список користу­вача. В протилежному випадку він скеровується в блок з міткою Mit2.

Інший можливий варіант цього ж фрагменту моделі має вигляд

Buf EQU 15

. . .

GATE U Kan1,Mit1

TEST L CH$King,Buf,Mit2

LINK King,FIFO

Mit1 SEIZE Kan1

Якщо ОКП Kan1 зайнятий, блок GATE пропускає транзакт до блоку TEST. Якщо поточний вміст списка користувача з іменем King є меншим за задану ємність Buf, то транзакт проходить в список користувача. В протилежному випадку він спрямовується до блоку з міткою Mit2. Якщо ОКП незайнятий, транзакт скеровується до блоку SEIZE з міткою Met1 і займає вільний ОКП Kan1.

Вивід транзактів із списку користувача. Блок UNLINK. Цей блок вилучає транзакти із списку користувача і повертає їх у список поточних подій. Блок UNLINK (вивести із списку) має наступний форимат:

[назва] UNLINK X А,В,C,[D],[E],[F]

Операндом А вказується назва або номер списка користувача. Операнд В вказує на мітку блоку, в який переходять виведені із списку користувача транзакти. Операндом С вказується число транзактів, що виводяться зі списку користування. Операнди А, В, С можуть бути назвою і додатнім цілим числом, СЧА або СЧА*СЧА. Окрім того, в операнді С використовується ключове слово ALL для виведення всіх транзактів списку. За замовчуванням операнд С приймає значення ALL.

Спосіб та умови виведення транзактів із вписку користувача визна­чають операнди D і E разом з умовним оператором Х. Значення оператора Х ті ж, що й описані в блоці TEST. За замовчуванням умовний оператор Х приймає значення Е (рівність). Якщо операнди D і E не використовуються, то умовний оператор Х не вказується. В цьому випадку кількість транзактів, що виводяться з початку списку, обов’язково визначаються операндом С.

Операнд D може бути: булевою змінною; номером параметра транзакта; ключовим словом BACK.

Якщо операнд D є булевою змінною, то операнд Е і оператор Х не використовуються. Булева змінна обчислюється відносно транзакту, який перебуває у списку користувача. Якщо результат не нуль, тобто умова виведення виконується, транзакт вилучається зі списку користування. Кількість таких транзактів визначається операндом С. Однак може бути вилучено менше транзактів, ніж вказано операндом С (за числом не нульових результатів обчислення булевої змінної). Крім того, і тразактів у списку користувача може бути менше, ніж вказано операндом С.

Якщо операндом D вказане ключове слово BACK, а операнд Е і умовний оператор Х не використовуються, то транзакти виводяться з кінця списку користувача. Їх кількість визначається обов’язково операндом С.

Операнд D може обчислюватися відносно транзакту, який перебуває у списку користувача, і використовуватися як номер параметра, значення якого порівнюється із результатом обчислення операнда Е за допомогою умовного оператора Х. Якщо операнд Е не використовується,то значення параметра транзакту із списку користувача порівнюється зі значенням такого ж параметра вихідного транзакту. Якщо вони рівні, транзакт вилучається із списку користувача. В цьому випадку кількість вихідних транзактів визначається операндом С.

Детальний аналіз функціонування блоку UNLINK залежно від неявності операндів A – F наведено в [1]. Операндом F задається назва блоку, куди переходить транзакт, що виходить із блоку UNLINK, якщо із списку користувача не виведений ні один транзакт. Якщо операнд F не використовується, вихідний транзакт переходить у наступний блок незалежно від кількості виведених транзактів. Наприклад, блок

UNLINK King,Mit1,1,BACK

виводить із списку користувача з іменем King один транзакт з кінця списку і скеровує його в блок з міткою Mit1. Блок

UNLINK 5,Mit2,2

виводить із списку користувача з номером 5 два транзакти з початку списку і скеровує його в блок з міткою Mit2.

Відзначимо наступні особливості виконання блоку UNLINK. По-перше, якщо операнди D і E містять посилання на СЧА транзактів, операнд D обчислюється відносно транзактів у списку користувача, а операнд Е – відносно активного транзакту. По-друге, після виведення транзактів із списку продовжується або починається просування транзакта з найвищим пріоритетом, а при рівності пріоритетів надається перевага транзакту-ініціатору виведення.

Розглянемо на прикладі [1] механізм роботи блоків LINK і UNLINK і формування необхідних дисципдін обслуговування.

Нехай в одноканальній СМО з очікуванням потрібно організувати дисципліну обслуговування, для якої пріоритет надається вимогам з найменшим часом обслуговування.

Програма такої моделі наведена нижче.

GENERATE (Exponential(1,0,50))

ASSIGN Kkd,(Exponential(1,0,30))

GATE NU Kan1,Mit2

Mit1 SEIZE Kan1 ADVANCE P$Kkd

RELEASE Kan1

UNLINK Mash,Mit1,1

TERMINATE

Mit2 LINK Mash,P$Kkd

GENERATE 1000

TERMINATE 1

В блоці ASSIGN параметру Kkd записується випадковий час обслуговування, який обчислюється з використання вбудованого генератора експоненціального розподілу. Якщо ОКП Kan1 вільний, то блок GATE впускає транзакт в блок SEIZE, і ОКП затримується на час P$Kkd. Якщо ж у момент надходження транзакту ОКП зайнятий, то блок GATE скеровує транзакт в блок LINK з міткою Mit2, який вводить транзакт у список користувача Mash. Транзакти впорядковуються за зростанням часу обслуговування, записаного в параметрі P$Kkd. Блок UNLINK після звільнення ОКП виводить з початку списку транзакт з найменшим часом обслуговування, забезпечуючи тим самим задану дисципліну.

Блоки LINK і UNLINK надають можливість користувачу формувати свої списки у динаміці незалежно від списків затримування, які автоматично керують системою GPSS World. Наявність цих блоків не вимагає використання блоків QUEUE – DEPART для збирання статистики про черги, оскільки ці статистичні дані можна отримати у списку користувача.

Контрольні запитання та завдання

  1. До яких об’єктів апаратної категорії належать одноканальні пристрої, і якими основними властивостями вони характеризуються?

  2. За допомогою якого блоку транзакти входять в модель? Який його формат запису і що означають його операнди?

  3. Згенеруйте надходження в модель 10 транзактів з інтервалом в 50 од. часу і з відхиленням 5 од. часу.

  4. Скільки блоків TERMINATE може бути у моделі і скільки – в якості лічильника завершення? Наведіть блок-діаграму керування часом моделювання.

  5. Який блок відповідає за присвоєння і зміну параметрів транзактів?

  6. Змоделюйте присвоєння другому параметру транзакта числа 50, а від параметра з іменем Buf віднімання поточної довжини черги з номером 1.

  7. Які блоки апаратної категорії відповідають за зайняття і звільнення одноканального пристрою?

  8. Змоделюйте затримку транзакту в каналі обслуговування з іменем Kan-1 протягом 7515 од. часу за допомогою блоків SEIZE, ADVANCE і RELEASE.

  9. Яким блоком можна перевірити стан каналів у моделі (зайнятий він чи ні)?

  10. Змоделюйте перехід від одного каналу обслуговування до іншого у випадку, коли перший з них зайнятий.

  11. Які блоки мови програмування GPSS призначені для збору статистичних даних про об’єкти моделювання?

  12. В одноканальну систему масового обслуговування надходять замовлення кожних 5010 од. часу. Всі вони потрапляють в чергу і чекають звільнення каналу обслуговування. Середній час оброблення замовлення становить 405 од. часу. Після обслуговування замовлення залишають систему. Змоделюйте роботу такої системи для опрацювання 100 замовлень.

  13. Які Ви знаєте блоки для змінним маршрутів руху транзактів у моделі? Дайте коротку характеристику їхніх режимів роботи.

  14. Змоделюйте ситуацію, коли черговий транзакт повинен зайняти одноканальний пристрій, перервавши обслуговування попереднього транзакта.

  15. Які блоки мови GPSS передбачені для моделювання несправностей (переведення в недоступний стан) одноканальних пристроїв?

  16. Збільшіть (зменшіть) довжину черги з номером 5 на 7 одиниць.

  17. Наведіть фрагмент програми, яка показує зайняття транзактом пристрою. Транзакт займає усі вільні канали пристрою.

  18. Наведіть фрагмент програми, яка моделює затримування транзактів у пристрої з часом затримування, рівномірно розподіленим в інтервалі А  В, де А і В значення параметрів ОТР1 і ОТР2.

  19. Параметру п’ятого транзакту присвойте значення 4.

  20. Транзакт займає пристрій, номер якого задається п’ятим номером транзакта. Час обслуговування у пристрої задається параметром ТІМЕ. Наведіть фрагмент відповідної програми.

  21. В одноканаьну СМО надходить потік вимог, розподілений за пуассонівським законом з інтенсивністю n хв-1. Час обслуговування однієї вимоги становить m  k сек. Навести фрагмент програми для збирання статитстичної інформації про час перебування вимог у системі.

  22. У довідкове бюро на залізничному вокзалі звертаються клієнти через кожні 20  8 сек, яких обслуговують п’ять операторів. Тривалість обслуговування становить 100  20 сек. Навести фрагмент програми для збирання статистичної інформації про довжину черги.

“Якщо відлагодження програми – процес вилучення помилок, тоді програмування має бути процесом їх внесення”

(Е. Дейкстра)

Розділ 6

Створення і відлагодження імітаційних моделей у GPSS World

  • основі стани моделювання та створення імітаційних моделей у GPSS World

  • команди GPSS World

  • інтерактивні можливості GPSS World та відлагодження моделей

У розділі наведено основні етапи створення, від лагодження та експлуатації моделей у GPSS World. Показані засоби GPSSW для моделю­вання систем в інтерактивному режимі. Розглянуті команди GPSS World, які використовуються для визначення об’єктів і керування процесом моделювання.