Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИМ_с_помощью_GPSS.doc
Скачиваний:
7
Добавлен:
03.05.2019
Размер:
1.36 Mб
Скачать

Seize a

7. Запоминание канала, в который требование попало на обслужива­ние.

Для этого используется оператор ASSIGN (Присвоить) – с его помощью в параметре требования под номером 1 запоминается имя канала, в который тре­бование пошло на обслуживание. Присвоение будет выглядеть так:

Assign 1, can1

Блоки ASSIGN используются для присвоения и изменения значения параметра транзакта:

Assign a, b, с

Операнды:

A – параметр активного транзакта. Обязательный операнд. Допустимые значения: Name, PosInteger, ParenthesizedExpression, SNA или SNA'Parameter, после которого следуют «+», «-» или Null.

В – значение. Обязательный операнд. Допустимые значения: Name, Number, String, ParenthesizedExpression, SNA или SNA' Parameter.

С – номер функции. Необязательный операнд. Допустимые значения: Null, Name, PosInteger, ParenthesizedExpression, SNA или SNA' Parameter.

Действие:

Когда транзакт входит в блок ASSIGN, значение параметра транзакта, указанного в операнде А, устанавливается в соответствии с операндами В и С. Если необходимо, параметр транзак­та создается.

Вы можете присвоить, прибавить или вычесть из числового эквивалента значения параметра транзакта. Если операнд С отсутствует, операнд В вычисляется и используется в качестве нового значения, или же его числовой эквивалент – в качестве инкремента или декремента. Сложение и вычитание задаются знаками «+» или «-», следующими сразу же за операндом А. Если эти знаки отсутствуют, операнд В вычисляется и результат присваивается значению параметра транзакта.

Дополнительно для определения номера функции может быть использован операнд С, назы­ваемый в этом случае модификатором функции. Если он задан, то вычисляется функция, которая затем умножается на числовой эквивалент вычисленного операнда В и результат прибавляется, вычитается или присваивается значению параметра транзакта в зависимости от знака в операнде А. Следует отметить, что операнд С определяет номер функции или ее имя (не нужно использовать FN или FN$ перед ним). Если используется СЧА класса FN, то вычисляется функция GPSS, результат которой используется для определения второй функ­ции GPSS, которая в свою очередь будет вычислена.

8. Определение движения требований по каналам. Поскольку СМО многоканальная, то необходимо использовать оператор TRANSFER для обеспечения возможности направления требований к незанятому каналу.

9. Блок SEIZE. Когда активный транзакт пытается войти в блок SEIZE, он ожидает возможности занять или занимает устройство.

Seize a

10. Запоминание канала, в который требование попало на обслужива­ние. Для этого используется оператор ASSIGN (Присвоить) – с его помощью в параметре требования под номером 1 запоминается имя канала, в который тре­бование пошло на обслуживание. Присвоение будет выглядеть так:

Assign 1, can1

  1. Освобождение элементов памяти.

Блок LEAVE освобождает элементы памяти:

Leave а, в

Операнды:

А – имя или номер памяти. Обязательный операнд. Допустимые значения: Name, PosInteger, ParenthesizedExpresston, SNA или SNA'Parameter.

B – количество элементов памяти. Значение по умолчанию – 1. Необязательный операнд. Допустимые значения: Null, Name, PosInteger, Parenthesi- zedExpression, SNA или SNA'Parameter.

Действие:

Когда транзакт входит в блок LEAVE, операнд А вычисляется и округляется, и отыскивается соответствующая память. Если такой объект не существует, то происходит остановка по ошиб­ке. Памяти должны определяться командами STORAGE.

Количество освобождаемых единиц памяти определяется операндом В. Если В не используется, то он при­нимается равным 1.

Затем количество доступных элементов памяти увеличивается на значение операнда В. Если результат превосходит исходную емкость памяти, то происходит остановка по ошибке.

Если ошибки не возникает, то транзакт планируется на вход в следующий по порядку блок и размещается в списке текущих событий перед транзактами. имеющими тот же приоритет.

Когда память становится доступной, список задержки памяти просматривается в порядке убывания приоритетов, и определяются транзакты, потребность в обслуживании которых может быть удовлетворена. Используется правило «first-fit-with-skip» – «первый подходящий с пропус­ками». Успешным транзактам позволяется войти в блок ENTER, который отказывал им во входе, затем они заносятся в список текущих событий после всех транзактов, имеющих тот же приоритет. Это происходит до того, как текущий активный транзакт, находящийся в блоке LEAVE, продолжит движение в процессе моделирования. Таким образом, ни один транзакт не может изменить порядок следования транзактов, ожидающих в списке задержки памяти. Это можно посмотреть в окне «Blocks» («блоки»). Здесь видно как транзакт входит в блок ENTER и задерживается там. После этого текущий активный транзакт в блоке LEAVE продолжает свое движение.

  1. Блок ADVANCE задерживает продвижение транзакта на заданный отрезок модельного времени:

ADVANCE A, B

13. Выход из канала обслуживания. После обслуживания требование выходит из канала обслуживания, и должен появиться сигнал об освобождении последнего. Это делается с помощью операто­ра RELEASE (Освободить):

RELEASE

Блок RELEASE освобождает занятое устройство или исключает вытесненный транзакт из состязания за устройство:

RELEASE А

Операнд:

А – номер устройства. Обязательный операнд. Допустимые значения: Name, PosInteger, ParenthesizedExpressian, SNA или SNA'Parameter.

Пример:

RELEASE Taller1

Действие:

Когда транзакт входит в блок RELEASE, он исключает себя из состязания за устройство. Это может происходить двумя способами.

Если устройство занято активным транзактом, он освобождает устройство и переходит к сле­дующему по порядку блоку.

Если активный транзакт был вытеснен из устройства, он исключается из списка прерываний устройства. Право занимать устройство не передается, т.к. оно занято другим транзактом. Если у активного транзакта в настоящий момент нет прерванных обслуживаний, он может перемещаться в процессе моделирования без ограничений.

В любом случае активный транзакт освобождает устройство или исключается из состязания за него и пытается войти в следующий по порядку блок. Если он не занимает устройство и не вытеснен из него, происходит остановка по ошибке.

Если активный транзакт освобождает устройство, следующий транзакт выбирается из списка отложенных прерываний, списка прерываний и, наконец, из списка задержки. Если в данный момент блок PREEMPT работает в режиме прерывания, то сначала право занять устройство предоставляется транзакту из списка отложенных прерываний. В противном случае право занять устройство возвращается ранее вытесненному транзакту. Если список отложенных прерываний, ожидающих обслуживания с вытеснением, и список прерываний (вытесненных транзактов) пусты, то право занять устройство предоставляется транзакту с наибольшим приоритетом из списка задержки. Если в нем также отсутствуют транзакты, устройство стано­вится не занятым.

Когда новый обладатель устройства выбран из списка задержки или списка отложенных пре­рываний, он немедленно входит в блок SEIZE или PREEMPT, затем он помещается в СТС позади транзактов, равных ему по приоритету. После этого текущий активный транзакт, нахо­дящийся в блоке RELEASE, продолжает свое движение.

14. Выход требования из системы. Далее требование выходит из системы с помощью оператора TERMINATE, который записывается в таком виде: