KNOW INTUIT, Лекция, Моделиране в GPSS World
6.2.10. Изграждане на модели на системи с многоканални устройства и комутатори
Два или повече сървъра могат да бъдат симулирани на GPSS от два или повече CMO, разположени един до друг, т.е. паралелно. Това трябва да се направи, когато отделните устройства са разнородни, т.е. те се характеризират с различни свойства, например различни нива на поддръжка.
Въпреки това, често различните устройства, работещи паралелно, са хомогенни. GPSS предоставя специален инструмент за моделиране на хомогенни паралелни устройства, наречен многоканално устройство. MCU може да се използва от няколко транзакции едновременно. Няма ограничения за броя на MCU в модела. Дават им се имена, за да ги различават.
MCU се дефинира преди да се използва от командатаSTORAGE. Формат на командата:
Име - името на MCU. На символично име може да се присвои номер с командата EQU. Това е необходимо, ако искате да се обърнете към няколко MCU в блокове SELECT и COUNT или в други случаи. Операнд А може да бъде само положително цяло число. Всеки друг начин за указване на капацитета води до грешка.
В модела е възможно да се организира функционирането на MCU в два режима:
- заемане и освобождаване на МКУ;
- липса на MCU.
6.2.10.1. Заемане и освобождаване на многоканално устройство
Заемането и освобождаването на MCU се симулира от блоковетеENTER(влизане) иLEAVE(изход). Блокови формати:
Операнд А и в двата блока се използва за указване на името, съответстващо на MCU. Операнд B указва броя на устройствата (елементи на паметта), които да бъдат заети в блока ENTER или освободени в блока LEAVE. По подразбиране операнд B = 1. Когато B = 0, блокът се счита за неработещ.
Когато транзакция влезе в блок ENTER, операнд A се използва за намиране на MCU с указаното име. Ако няма такъв MCU, възниква спиране поради грешката „Позоваване на несъществуваща памет“. Ако MCU съществува и е даден операнд B, той се изчислява, закръглява се до цяло число и полученият резултат се използва за оценка на свободния капацитет. Транзакция може да влезе в блок ENTER, ако MCU е в налично състояние и има достатъчно капацитет за изпълнение на заявката. В противен случай транзакцията се поставя в списъка за забавяне на устройството според приоритета.
Когато транзакция влезе в блок ENTER (вижте блокова диаграма), планировчикът прави следното:
- увеличава с 1 брояч на MKU входове;
- увеличава стойността на операнд B (по подразбиране 1 ) текущото съдържание на MCU;
- намалява със стойността на операнд B (по подразбиране 1) наличния капацитет на MCU.
Ако транзакция, при влизане в блока ENTER, изисква повече устройства (елементи на паметта) от посочените от командата STORAGE, т.е. нейният операнд A е по-малък от операнд B на блока ENTER, възниква грешката „Заявката за елементи на паметта надвишава общия си капацитет“.
MCU никога не може да бъде премахнат от текущия модел, дори ако командата STORAGE бъде премахната от работещата програма. MCU може да се предефинира, т.е. да се промени капацитетът с друга команда STORAGE със същото име. Например:
Симулация на обслужване на транзакция за определен период от време се извършва и от блок ADVANCE.
КомандатаSTORAGEдефинира MCU с име Nak с капацитет от 20 единици. Когато транзакция влезе в блока ENTER, 2 единици се заемат и същата сума се освобождава в блока LEAVE при излизане от MCU.
Когато транзакцията влезе в блока ENTER, ще възникне грешка при спиране, тъй като транзакцията ще се опита да заемеповече канали (21) от дефинираните (20) от командата STORAGE. Същото ще се случи, ако при излизане от блока LEAVE транзакцията се опита да освободи повече канали от посочените от командата STORAGE.
В този пример са дефинирани три MCU с имена Pun1, Pun2, Pun3 и съответно капацитети 6, 5 и 3. На имената се присвояват номера 1, 2 и 3 от EQU команди.
Преди това (вижте таблица 6.1) терминът "памет" се използваше за MCU. Това е така, защото блоковете ENTER и LEAVE могат да се използват за симулиране на функционирането на устройства за съхранение, като RAM или външни устройства за съхранение. В този случай един от параметрите на транзакция може да се използва като операнд B на тези блокове, симулирайки например съобщение, съдържащо броя на заетите (освободени) клетки от паметта. Пример за това използване на блокове ENTER и LEAVE е даден в 6.7.5.
6.2.10.2. Деактивиране на многоканално устройство и повторно предоставяне на достъп
Недостъпността на MKU се моделира от блока SUNAVAIL (символът S означава MKU, UNAVAIL - недостъпен). Формат на блока:
Операнд A - име или номер на MCU, може да бъде име, положително цяло число, израз в скоби, NAV, NAV*параметър.
Когато транзакция влезе в този блок, Batr MCU става недостъпен. Ако при прехвърляне в състояние на недостъпност е имало транзакции в MCU, т.е. текущото съдържание на MCU не е равно на нула, тогава обслужването на тези транзакции продължава, докато текущото съдържание стане равно на нула.
Транзакциите, които се опитват да заемат MCU, докато е в състояние на недостъпност, не се включват в блока ENTER и се поставят в списъка със забавяне на MCU.
Недостъпното състояние продължава, докато транзакцията влезе в блока SAVAIL.
Операнд А е името или номерът на MCU. Може да бъде същият като операнд A в блока SUNAVAIL.
Ако е имало транзакции в списъка със закъснение в момента на прехвърляне на MKU в налично състояние, им се дава възможност да заемат MKU в съответствие с дисциплината „първо напасване с пропускане“ (първо напасване с пропускане).
Транзакциите, на които е отказан достъп до MCU, остават в неговия списък със закъснение.
6.2.10.3. Проверка на състоянието на многоканално устройство
Състоянието на MCU, както и състоянието на OCU, се проверяват от блока GATE със същия формат
Разликата е в стойностите на условния оператор X, които могат да бъдат както следва:
- SE - MCU, зададен от операнд A, празен;
- SF - MCU, определен от операнд A, е пълен;
- SNE - MCU, даден от операнд A, не е празен;
- SNF - MCU, зададен от операнд A, не е попълнен;
- SNV - MCU, определен от операнд A, не е наличен;
- SV - MCU, определен от операнд A, е наличен. Блокът GATE също работи в два режима:
- отказ за влизане;
- разделителна способност на входа и алтернативен изход.
Ако MCU с име Can не е запълнен, т.е. има свободни канали (елементи на паметта), условието, посочено в блока GATE, е изпълнено и транзакцията ще бъде насочена към следващия блок. Ако MCU е пълен, транзакцията ще бъде насочена към блока с етикет Met5.
Блокът GATE ви позволява само да определите състоянието на непълния MCU, т.е. наличието на свободни канали, но не определя дали има достатъчно от тях, за да удовлетвори заявката.
Булева променлива и блокът TEST [5] също могат да се използват за проверка на състоянието на MCU. Използването им ви позволява да разширите възможностите за извършване на проверки на състоянието, както и да намалите времето на машината, тъй като в един блок се използва булевЕдна променлива може да тества няколко условия наведнъж.
6.2.10.4. Моделиране на превключватели
За да моделира оборудване като превключватели, които имат само две състояния, GPSS използва логически ключове. Логическият ключ може да бъде в едно от двете състояния:
- разрешено (ON или 1);
- забранено (ИЗКЛ. или 0). В зависимост от състоянието на ключа посоката на движение на транзакциите се променя.
Логическият ключ се моделира от блокаLOGIC. Формат на блока:
Операнд А е името или номерът на логическия ключ. Може да бъде име, положително цяло число, израз в скоби, NAV или NAV*параметър.
Логически оператор X - състоянието на логическия ключ се задава в зависимост от следните му стойности:
- S - включен е ключът, даден от операнд А;
- R - ключът, зададен от операнд A, е изключен;
- I - логическият ключ е обърнат, т.е. състоянието му се променя на обратното, например, ако е бил включен, той ще бъде изключен.
Състоянието на логическия ключ също се проверява от блока GATE. Блокът GATE има същия формат, както при проверка на състоянията на GATE и MCU и два режима на работа:
Операнд A - име или номер на маркирания ключ. Може да бъде име, положително цяло число, израз в скоби, NAV или NAV*параметър.
Операнд B е етикетът на блока, към който ще бъде насочена транзакцията, ако условието, зададено от оператора X, не е изпълнено.
Условният оператор може да приема следните стойности: