- •Моделювання систем
- •Передмова
- •Моделі процесів і систем
- •Класифікація моделей
- •Основні визначення та класифікація систем масового обслуговування
- •Характеристики систем масового обслуговування
- •Вхідний потік вимог
- •Стратегії керування потоками вимог
- •Класифікація систем масового обслуговування
- •Метод статистичних випробовувань
- •Генератори випадкових чисел
- •Моделювання випадкових подій та дискретних випадкових величин
- •Моделювання неперервних випадкових величин
- •Моделювання нормально-розподілених випадкових величин
- •Моделювання випадкових векторів
- •Моделювання випадкових функцій
- •Статистична обробка результатів моделювання
- •Визначення кількості реалізацій під час моделювання випадкових величин
- •Основне меню gpss World
- •Меню File
- •Меню Edit
- •Панель інструментів gpss World
- •Вікно моделі у системі gpss World
- •Інтерактивний перегляд значень виразів
- •Налаштування параметрів моделювання
- •4.1. Основне меню gpss World
- •4.2. Подання моделей у вигляді блок-діаграм
- •4.3. Основні складові системи gpssw
- •4.4. Об'єкти обчислювальної категорії
- •4.4.1. Константи
- •4.4.2. Системні числові атрибути
- •4.4.3. Арифметичні і логічні оператори
- •4.4.4. Бібліотечні математичні функції
- •4.4.5. Змінні користувача
- •4.4.6. Вирази в операторах gpss
- •4.4.7. Зберігаючі комірки
- •4.4.8. Матриці зберігаючих комірок. Оголошення та ініціалізація матриць
- •4.4.9. Арифметичні змінні й арифметичні вирази
- •4.4.10. Булеві змінні
- •4.4.11. Типи функцій
- •5.1. Введення транзактів у модель і вилучення їх із неї
- •5.2. Блоки для зміни значень параметрів транзактів
- •5.3. Блоки апаратної категорії зайняття та звільнення одноканальних пристроїв
- •5.4. Блоки перевірки стану та передавання керування в одноканальних пристроях
- •5.5. Блоки статистичної категорії
- •5.6. Блоки для зміни послідовності руху транзактів у моделі
- •5.7. Блоки апаратної категорії для переривань одноканальних пристроїв
- •5.8. Блоки апаратної категорії для переведення одноканальних пристроїв у стан недоступності
- •5.9. Створення і застосування списків користувача
- •Основні етапи моделювання у системі gpssw
- •Команди gpss World
- •Інтерактивні можливості gpss World
- •Відлагодження моделей у gpss World
- •Блоки зайняття та звільнення багатоканальних пристроїв
- •Блоки апаратної категорії для переведення багатоканальних пристроїв у стан недоступності та відновлення доступності
- •Блоки перевірки стану багатоканальних пристрів
- •Моделювання перемикачів
- •Основні елементи мови
- •Побудова виразів
- •Plus-оператори та їх призначення
- •Вбудована бібліотека процедур
- •Генератори випадкових чисел
- •Реалізація методу Ньютона для розв’язування нелінійних рівнянь за допомогою мови Plus
- •Налагодження Plus-процедур
- •Команда integrate і блок integration для моделювання неперервних систем
- •Використання plus-процедур для моделювання неперервних систем
- •Використання функцій в імітаційних моделях
- •Генерування випадкових чисел для дискретних рівномірних розподілів
- •Генерування випадкових чисел для дискретних нерівномірних розподілів
- •Генерування випадкових чисел для неперервного рівномірного розподілу
- •Генерування випадкових чисел для неперервних нерівномірних розподілів
- •Функції типу e, l і м
- •9.1. Основні відомості з теорії планування експериментів
- •9.1.1. Повний факторний експеримент
- •Оцінювання точності результатів моделювання
- •Дисперсійний аналіз
- •Однофакторний дисперсійний аналіз
- •9.2.2. Двофакторний дисперсійний аналіз
- •9.3. Технологія дисперсійного аналізу у gpss World
- •9.4. Технологія регресійного аналізу у gpss World
- •9.5. Організація експериментів користувача у gpss World
- •Initial Rezult_tf,unspecified ;Ініціалізація матриці результатів
- •Загальні положення
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання
- •Контрольні запитання
- •Загальні положення
- •Завдання для виконання роботи
- •Контрольні запитання
- •Загальні положення
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання
- •Контрольні запитання
- •Загальні положення
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання
- •Контрольні запитання
- •Загальні положення
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання одноканальних розімкнутих смо
- •Індивідуальні завдання для моделювання одноканальних замкнутих смо
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання багатоканальних розімкнутих смо
- •Індивідуальні завдання для моделювання багатоканальних замкнутих смо
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання роботи транспортного конвеєра
- •Індивідуальні завдання для моделювання роботи ділянки цеху
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання роботи еом для оброблення завдань з різними пріоритетами
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання роботи вузла комутації повідомлень
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання поширення вірусу на системному диску
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для проведення дисперсійного аналізу для дослідження вагомості впливу змінних користувача на об’єкт моделі
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для розроблення експерименту користувача
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання проведення регресійного аналізу для оптимізації і кількісного прогнозу поведінки системи
- •Контрольні запитання
- •Елементи стандартного звіту
- •Загальна інформація про результати роботи моделі
- •Інформація про імена
- •Інформація про блоки
- •Інформація про об’єкти типу «пристрій»
- •Інформація про об’єкти типу «черга»
- •Інформація про об’єкти типу «багатоканальний пристрій»
- •Інформація про таблиці
- •Інформація про списки користувача
- •Табличні значення критеріїв
- •Значення t-критерію Ст’юдента
5.7. Блоки апаратної категорії для переривань одноканальних пристроїв
Режим функціонування ОКП без затримування обслуговування транзактів організовується блоками SEIZE і RELEASE.
Якщо на вході ОКП утворюється черга транзактів, то їх вибір для обслуговування відбувається у порядку надходження для транзактів із рівними пріоритетами, або з урахуванням пріоритету, зазначеного операндом Е блоку GENERATE. Черговий транзакт із більшим пріоритетом чекає на завершення обслуговування попереднього транзакта незалежно від його пріоритету. Пріоритет враховується тільки в черзі, що утворюється.
У багатьох випадках виникає необхідність змоделювати ситуацію, коли черговий транзакт повинен зайняти ОКП, перервавши обслуговування попереднього транзакта. Таке переривання більш “пріоритетним” транзактом обслуговування в ОКП менш “пріоритетного” транзакта здійснюється блоками PREEMPT (Захопити) і RETURN (Повернути). Блок PREEMPT має формат:
PREEMPT A,[B],[C],[D],[E]
Операнд А – назва або номер ОКП, на якому здійснюється переривання обслуговування..
Коли ОКП вільний, блок PREEMPT працює так само, як і блок SEIZE. Блок PREEMPT у зайнятому ОКП функціонує в пріоритетному режимі, або в режимі переривання. Режими визначаються операндом В. Якщо В = PR, то операнд В задає пріоритетний режим. Якщо операнд В не використовується, то маємо режим переривання.
Якщо під час виконання блоку PREEMPT переривання вже пройшло (пристрій обслуговує переривання), то відповідний транзакт затримується доти, поки не вивільнеться пристрій. Тоді обслуговується новий транзакт, який перериває пристрій, а не попередній.
У пріоритетному режимі роботи блоку PREEMPT передбачено переривання обслуговування транзактів залежно від значимості їх пріоритетів. Перервати обслуговування попереднього транзакта може тільки транзакт із більшим пріоритетом. Якщо пріоритет транзакта, що претендує на зайняття ОКП, дорівнює або нижчий пріоритету транзакта, що обслуговується, він потрапляє у список затримування ОКП. Такий тразакт займає місце у кінці списку затримування для свого пріоритету.
Дії подальшого оброблення тразактів, обслуговування яких перервано, визначають операнди C, D i E.
Операнд С задає назву або номер блоку, куди спрямовується перерваний транзакт. Цей транзакт продовжує претендувати на право користування ОКП, якщо операнд Е не вказується.
Операнд Е визначає режим вилучення перерваного транзакта, якщо Е приймає значення RE.
У режимі вилучення RE транзакт не претендує на подальше використання пристрою і намагається увійти в блок, заданий операндом С (якщо Е приймає значення RE, то вказується операнд С). У цьому режимі перерваний транзакт не повинен входити у блоки RELEASE і RETURN у пристрої обслуговування переривання.
Якщо операнд Е не використовується, то перерваний транзакт спробує увійти в ОКП. Якщо пріоритетний режим не задається (в операнді В відсутнє значення PR), то операнди C, D i E не вказуються.
Операнд D задає номер параметра перерваного транзакта, у який записується час, що залишився до завершення обслуговування. Зокрема, якщо транзакт, обслуговування якого перервано, знаходиться у блоці ADVANCE, то в операнд D записується значення часу від моменту переривання до моменту виходу з блоку ADVANCE. У цьому випадку перерваний транзакт буде переміщений у блок, вказаний операндом С і продовжуватиме претендувати на даний пристрій. У пріоритетному режимі операнд D задається у випадку, коли пріоритет перериваючого транзакту є більшим, ніж пріоритет перерваного транзакту.
Операнди А, С, D і Е можуть бути назвою, додатним цілим числом, виразом у дужках, СЧА або СЧА*параметр.
Блок RETURN звільняє ОКП від переривання обслуговування транзактів. Формат блоку:
RETURN A
Операнд А – назва або номер ОКП, що звільняється. Наприклад, запис
RETURN Din1
означає звільнення від захоплення ОКП Din1.
Наведемо приклади використання блоків PREEMPT і RETURN в пріоритетному режимі [1]:
1. Блок PREEMPT функціонує в пріоритетному режимі, тому що значення операнда В дорівнює PR (рис. 5.5). Операнд С не використовується, тобто перерваний транзакт до іншого блоку не спрямовується. Тому після переривання він зі збереженим часом до кінця обслуговування автоматично повертається до списку затримування ОКП.
Рис. 5.5. Використанням блоку PREEMPT в пріоритетному режимі (В = PR, С – не використовується)
Блок GENERATE генерує тільки три транзакти в моменти часу моделювання 5, 10 і 15 (позначимо t) і перестає бути активним. Кожний черговий транзакт, завдяки блоку PRIORITY, має вищий пріоритет, ніж попередній: 1, 2 і 3 відповідно.
Перший транзакт із пріоритетом 1 в t = 5 займає ОКП Reml. В t – 10 генерується другий транзакт із пріоритетом 2. Він перериває обслуговування першого транзакта, якому залишилося до завершення обслуговування 5 + 11 – 10 = 6 одиниць часу моделювання. Перший транзакт, через відсутність операнда С потрапляє в список затримування ОКП Reml.
В t = 5 генерується третій транзакт із пріоритетом 3. Він перериває обслуговування другого транзакта з нижчим пріоритетом 2. До завершення обслуговування другому транзакту залишилося 10 + 11 – 15 = 6 одиниць модельного часу. Він також потрапляє в список затримування ОКП Reml і розташовується перед першим транзактом, у якого пріоритет нижчий і дорівнює 1.
Таким чином, відповідно до пріоритетів будуть обслужені третій, другий і перший транзакти. Простежити це можна, виконавши покрокове моделювання: транзакти послідовно ввійдуть у блоки TERMINATE з мітками Met4, Met3 і Metl відповідно.
З перериванням час “дообслуговування” перерваного транзакта автоматично запам'ятовується і потім з поновленням обслуговування використовується. Це випливає із сумарного часу обслуговування трьох транзактів у даному прикладі: 5 + 11 + (5 + 6) + (5 + 6) = 38 одиниць часу моделювання. Причому обслуговування третього транзакта завершиться в t = 15 + 11 = 26, другого – в t = 26 + 6 = 32, першого – в t = 32 + 6 = 38 одиниць часу моделювання.
Із прикладу видно, що в пріоритетному режимі ОКП може бути перерваний будь-яку кількість разів.
2. Блок PREEMPT функціонує в пріоритетному режимі. Використовується операнд С, тобто зазначена мітка блоку, до якого скеровується перерваний транзакт (рис. 5.6).
Рис. 5.6. Використання блоку PREEMPT в пріоритетному режимі (В = PR, С – мітка блоку)
Блок GENERATE генерує три транзакти. У кожного наступного транзакта пріоритет вищий: 1, 2 і 3 відповідно. Перший транзакт з пріоритетом 1 в t = 5 займає ОКП Reml. В t = 10 другий транзакт із пріоритетом 2 перериває обслуговування першого транзакта й скеровує його до блоку з міткою Met6. В t= 15 третій транзакт із пріоритетом 3 перериває обслуговування другого транзакта й також скеровує його до блоку з міткою Met6. Нею позначений блок затримування ADVANCE, який запобігає негайній передачі перерваного транзакта на тільки що залишений ОКП. Після цього блоку знаходиться блок TRANSFER, що скеровує перший і другий перервані транзакти до блоку ADVANCE ОКП Reml.
Обслуговування третього транзакта завершиться в t = 15 + 11 = 26, другого в t = 26 + 10 + 11 = 47, а першого в t = 47 + 10 + 11 = 68 одиниць часу моделювання.
У цьому прикладі пріоритетність обслуговування збереглася, хоча перший транзакт надійшов у модель раніше й раніше був вилучений із пристрою. Але відлік часу затримування блоком ADVANCE з міткою Met6 почався тільки після того, як завершилося обслуговування третього транзакта. Також перервані транзакти ОКП Reml обслуговувалися не 6 одиниць часу моделювання (стільки їм залишалося до завершення обслуговування), а із самого початку обслуговування, тобто 11 одиниць часу моделювання.
Якщо ОКП вже використовується, активний транзакт потрапляє в список відтермінованих переривань або “захоплює” ОКП. Переривання обслуговування відбувається відразу тоді, коли список відтермінованих переривань порожній і транзакт, що обслуговується сам не перериває процесу. Транзактам зі списку відтермінованих переривань представляється право зайняти ОКП раніше, ніж перерваним транзактам або транзактам зі списку затримування ОКП.
Наведемо приклади використання блоків PREEMPT і RETURN в режимі переривання [1].
1. Блок PREEMPT функціонує в режимі “переривання”, оскільки операнд В не використовується. Інші операнди теж не використовуються (рис.5.7).
Рис. 5.7. Використання блоку PREEMPT, в режимі переривання
Блок GENERATE генерує три транзакта. Пріоритет наступного транзакта нижчий пріоритету попереднього: 3, 2 і 1 відповідно. Це забезпечують два блоки SAVEVALUE і блок PRIORITY. Покажемо, що у цьому режимі пріоритети ігноруються.
В t = 5 блок GENERATE генерує перший транзакт із пріоритетом 3, який займе вільний ОКП. В t = 10 уводиться другий транзакт із пріоритетом 2. Незважаючи на те, що його пріоритет нижчий від першого обслуговуваного транзакта, він “захоплює” ОКП, а перший транзакт, якому залишилося до кінця обслуговування 11 – 5 = 6 одиниць часу моделювання, потрапляє в список переривань. В t = 15 уводиться третій транзакт із пріоритетом 1, але він не може перервати ОКП, тому що там уже обслуговується транзакт. Третій транзакт потрапляє в список відтермінування переривань. В t = 10 + 11 = 21 завершується обслуговування другого транзакта. Третій транзакт, що перебуває в списку відтермінованих переривань, має перевагу над першим транзактом, і він займає ОКП, хоча пріоритет першого транзакта вищий. Обслуговування третього транзакта завершується в t = 21 + 11 = 32. В t = 32 ОКП займає перший транзакт. Його “до обслуговування” завершується в t = 32 + 6 = 38 одиниць часу моделювання.
Таким чином, пріоритети проігноровані. Простежити роботу моделі можна в покроковому режимі. Транзакти залишать модель, увійшовши в блоки TERMINATE з мітками Met4, Met3 і Met2 відповідно в моменти часу t = 21, t = 32 і t = 38.
2. Блок PREEMPT функціонує в режимі переривання. В операнді С зазначена мітка блоку, до якого скеровуються перервані в результаті “захоплення” транзакти (рис. 5.8).
Рис. 5.8. Використання блоку PREEMPT в режимі переривання
В t = 5 генерується перший транзакт із пріоритетом 3, що і займає вільний ОКП Reml. В t = 10 другий транзакт із пріоритетом 2 “захоплює” ОКП, перериваючи обслуговування першого транзакта з вищим пріоритетом. Перший транзакт скеровується до блоку ADVANCE з міткою Met6, не втрачаючи права на зайняття надалі ОКП Reml. В t = 15 третій транзакт не може “захопити” ОКП, який вже обслуговує “загарбника”, і потрапляє в список відтермінованих переривань. В t = 10 + 11 = 21 завершується обслуговування другого транзакта. Третій транзакт був у списку відтермінованих переривань. Йому надається право зайняти ОКП, що звільнився. Обслуговування третього транзакта завершується в t = 21 + 11 = 32.
ОКП стає вільним і починається відлік часу затримування першого транзакта блоком ADVANCE з міткою Met6. Пізніше він скеровується до блоку ADVANCE з міткою Metl, що імітує обслуговування в ОКП Reml. Закінчується обслуговування першого транзакта в t = 21 + 10 + 11 = 32. Його обслуговування також починається з початку, хоча до завершення обслуговування йому залишалося 6 одиниць часу моделювання.
Перевірка стану ОКП в пріоритетному режимі може здійснюватись блоком GATE, а також блоком TEST з використанням булевої змінної.
Розглянемо перевірку стану ОКП блоком GATE. Умова перевірки задається одним із наступних умовних операторів X:
I – заданий операндом А, ОКП перерваний;
N1 – заданий операндом А, ОКП не перерваний.
Наприклад:
GATE I Stn
GATE N1 (V$Qaps-5)
GATE I Print,tan
У першому прикладі блок GATE пропустить транзакт, коли ОКП Stn буде перерваний. У другому прикладі транзакт пройде до наступного блоку, коли не перерваний ОКП, номер якого визначається як результат обчислення виразу в дужках (V$Qaps–5) з наступним його заокругленням до цілого числа. У третьому прикладі у випадку переривання ОКП Print транзакт буде спрямований до блоку з міткою Tan.
Наведемо приклад використання блоку GATE для перевірки стану ОКП. Блок PREEMPT функціонує в пріоритетному режимі, а також використовуються операнди А, С і D. (рис. 5.9)
Рис. 5.9. Використання блоку GATE І
Блок GENERATE генерує п'ять транзактів і перестає бути активним. Кожний наступний транзакт має вищий пріоритет, ніж попередній: 1, 2, 3, 4 і 5 відповідно. Однак жоден з п'яти транзактів не пропущений блоком GATE до блоку PREEMPT (рис.5.10). Відбулося це тому, що ОКП Reml вільний й умова, задана в блоці GATE, не виконалася.
Рис. 5.10. Результати моделювання з використанням блоку GATE І
Якщо у блоці GATE умовний оператор I приймає значення NІ, то кожний наступний транзакт перерве обслуговування попереднього. Перші чотири транзакта будуть спрямовані до блоку TERMINATE. Лише один п'ятий транзакт буде обслужений до кінця без переривання. Це відбувається тому, що пріоритет наступного транзакта вищий, ніж пріоритет попереднього транзакта. Умова, зазначена в блоці GATE, виконується: адже переривання на блоці PREEMPT згенерував транзакт із меншим пріоритетом (рис. 5.11).
Рис. 5.11. Результати моделювання з використанням блоку GATE NІ
