Баннер
Баннер

Программирование в GPSS - Описание памятей и работа с ними

Оглавление
Программирование в GPSS
прагматический аспект
Классы объектов языка GPSS
Интерпретации транзактов
Интерпретаций устройст
Элементы реальных систем
Очереди и таблицы
Блоки
Модельное время
Общеалгоритмические средства GPSS
Стандартные числовые атрибуты
Арифметические переменные
Логические (булевы) переменные
Функции
Ячейки и матрицы ячеек
Задание начальных значений ячеек и матриц
Объектно-ориентированные средства GPSS
Создание и уничтожение транзактов
Задержка транзактов в блоках ADVANCE
Операции занятия и освобождения устройств
Операции захвата и освобождения устройств
Операции блокирования и разблокирования устройств
Описание памятей и работа с ними
Операции с ключами
Блок GATE
Синхронизация транзактов
Изменение параметров транзактов
Управление маршрутами транзактов в модели
Сбор статистики с помощью очередей
Сбор статистики с помощью таблиц
Стандартные числовые атрибуты
Атрибуты транзактов
Атрибуты блоков
Системные атрибуты
Атрибуты оборудования
Статистические атрибуты
Атрибуты ячеек SAVEVALUE
Функции и переменные
Атрибуты списков пользователя
Атрибуты группы
Системные атрибуты
Блоки COUNT и SELECT
Все страницы
Описание памятей и работа с ними

В отличие от устройства память в GPSS имеет параметр, от которого зависят результаты операций с нею. Этот параметр - емкость памяти - должен быть известен симулятору. Поэтому для каждой применяемой памяти пользователь должен указать ее емкость.

Для указания емкостей памятей применяется строка STORAGE . Эта строка является строкой описания объекта, а не блоком , поэтому транзакты в нее не входят.

Поле метки строки STORAGE содержит номер или метку памяти, поле операции - слово STORAGE, а поле A указывает емкость памяти. Емкость памяти должна выражаться целым числом. Например, строка описания памяти MEM емкостью 40 единиц может быть записана (с комментариями) следующим образом:

MEM STORAGE 40 ;ПАМЯТЬ MEM ИМЕЕТ ЕМКОСТЬ 40 ЕД.

 

В начальный момент времени все памяти пустые. Если в ходе моделирования транзакт обращается к неописанной памяти, ее объем принимается равным 231 - 1 единиц.

Транзакты обращаются к памяти посредством блоков ENTER (войти) и LEAVE (выйти).

Блок ENTER применяется для занятия памяти. В поле A указывается номер памяти, в поле B - число занимаемых единиц. Когда транзакт входит в блок ENTER, определяется число свободных единиц памяти, равное емкости памяти минус число занятых единиц. Если значение операнда B не превышает числа свободных единиц памяти, то число занятых единиц увеличивается на значение операнда B. В этом случае транзакт входит в блок ENTER без задержки. Если же значение операнда B превышает число свободных единиц памяти, то транзакт задерживается перед входом в блок ENTER. Задержанные при обращении к памяти, транзакты упорядочиваются по приоритету.

Число занимаемых единиц памяти должно быть целым .

Если поле B в блоке ENTER пустое, то число занимаемых единиц памяти принимается равным 1.

Пусть транзакт «x» задержан перед входом в блок ENTER. Из описания блока ENTER видно, что если для транзакта «y», приходящего после «x», свободной емкости памяти достаточно, то «y» войдет в блок ENTER без задержки.

Блок LEAVE служит для освобождения памяти. В поле A указывается номер памяти, в поле B - число освобождаемых единиц. В случае пустого поля B число освобож-даемых единиц памяти принимается равным единице .

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

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

Транзакт не обязан освобождать такое же число единиц памяти, какое занимал. Он может также освобождать память, которую не занимал. Транзакт имеет право занимать и освобождать любое количество памятей и операции занятия и освобождения могут при этом чередоваться в произвольном порядке.

Число освобождаемых единиц памяти должно быть целым.

Пример. Оперативная память (ОП) однопроцессорной ЭВМ имеет емкость 16 Мбайт. Из них 3 Мбайт постоянно занимают управляющие программы операционной системы (ОС). Остальной объем ОП используется для выполнения заданий абонентов ЭВМ.

В каждом задании абонентом записан приоритет задания и требуемый для его выполнения объем ОП. При поступлении задания управляющие программы ОС проверяют, достаточен ли свободный объем ОП для загрузки. Если свободного места в ОП достаточно, то задание загружается и занимает часть памяти требуемого объема. В противном случае задание записывается на НМД в очередь, упорядоченную по приоритетам.

При завершении задания занимаемая им часть памяти освобождается. Управляющие программы ОС обеспечивают непрерывность всего свободного объема ОП за счет возможности сдвига адресов загрузки у выполняемых заданий. После освобождения части ОП завершенным заданием и обеспечения непрерывности свободной памяти управляющие программы просматривают по порядку все задания в очереди на НМД и загружают из них те, для которых в ОП находится достаточное место. Время выполнения управляющих программ по сравнению со временем выполнения заданий можно считать равным нулю.

ОП, используемая заданиями, имеет объем 16 - 3 = 13 Мбайт. При моделировании ЭВМ эта ОП может быть описана с помощью строки name STORAGE 13. Если заданиям поставить в соответствие транзакты, то вход заданий в ОП можно моделировать с помощью блока ENTER, а выход из ОП - с помощью блока LEAVE .

Памяти могут также блокироваться и разблокироваться, как и устройства.

Блокирование памятей выполняется с помощью блока

SUNAVAIL A,

где A – номер (имя) или диапазон номеров памятей. Во время недоступности памяти блок ENTER задерживает транзакты, а блок LEAVE – нет.

Доступность памятей восстанавливается посредством блока

SAVAIL A,

В котором в поле A задается номер (имя) памяти или диапазон номеров памятей.

 





Читайте также:

Добавить комментарий


Защитный код
Обновить




Разделы



Главная GPSS Программирование в GPSS