Вычислительные объекты языка

Арифметические переменные. Для того чтобы использовать в програм­ме переменную, необходимо сначала ее описать оператором описания VARIABLE либо FVARIABLE. В поле метки оператора записывается имя пере­менной, в операнде А - арифметическое выражение, составляемое из СЧА, зна­ков арифметических операций и круглых скобок. Используются следующие арифметические операции: +, -, *, /, @ - взять остаток от деления. Приоритет операций стандартный. Деление на ноль не считается ошибкой, и результатом такого деления является ноль. Остаток от деления на ноль также считается рав­ным нулю.

При вычислении переменной, описанной оператором VARIABLE, от всех СЧА в арифметическом выражении и от результатов всех операций берется це­лая часть. При вычислении переменной, описанной FVARIABLE, этого не делается. Однако окончательное значение переменной, независимо от используемо­го оператора описания, округляется до целого числа.

Например, если описаны переменные

VAR1 VARIABLE 10*(11/3)

VAR2 FVARIABLE 10*(11/3),

то значение VAR1 будет равно 30, значение VAR2 - 36. При использовании пе­ременной в программе указывается СЧА переменной: V$<имя переменной>, например,

ADVANCE V$VARI

- задержать транзакт на время, заданное переменной VAR1.

Ячейка служат для хранения некоторых постоянных и/или изменяющихся значений данных программы. В отличие от большинства объектов языка ячейка может обозначаться как именем, так и числом. Для работы с ячейками, обозна­чаемыми числом, используется блок SAVEVALUE. D поле А этого блока указы­вается номер ячейки, сохраняющей значение, и вид изменения этого значения ("+" - накопление, "-" - уменьшение). В поле В содержится либо СЧА, либо це­лое число, которое добавляется либо вычитается, либо заменяет содержимое ячейки. Например: SAVEVALUE 10+,1-при поступлении транзакта в блок, к содержимому 10-й ячейки прибавляется единица. Или SAVEVALUE 1,V$VAR1 -при поступлении транзакта в блок, в первую ячейку записывается значение переменной VAR1.

Для работы с поименованными ячейками используются операторы LET, LET+,LET-, позволяющие записать, прибавить или вычесть число из ячейки соответственно. В поле А этих блоков указывается СЧА ячейки: Х$<имя ячейки>, в поле В - арифметическое выражение из СЧА ячеек либо число.

Напри­мер,

LET X$UCH1,5

LET+ Х$UСН2,Х$UС H1

LET- X$UCH3,X$UCH1+X$UCH2

Чаще всего на базе ячеек организуются разного рода счетчики. Перед на­чалом имитации содержимое всех используемых в программе ячеек устанавли­вается в 0. Если же требуется задать значение какой-либо из ячеек до начала моделирования, то для этого используется оператор LET, в поле А которого за­дается арифметическое выражение присваивания. Например,

LET X$UCH1=10

- присвоить ячейке с именем UCH1 значение 10. Этот оператор должен помещаться между блоком SIMULATE и первым блоком GENERATE.

Пример 6. Модель работы двухтактного буферного запоминающего

устройства

Идея двухтактного буфера: совместить во времени процессы сбора и за­писи информации в буферное запоминающее устройство (БЗУ) ограниченного объема и перезаписи информации в долговременное запоминающее устройство (ДЗУ), объем которой неограничен.

Техническое осуществление - с использованием канала прямого доступа и программного канала. Рассмотрим упрощенную модель системы двухтактного буферирования. Экспериментальная информация в процессе сбора записывает­ся словами в буфер. При заполнении приемного БЗУ до определенного уровня генерируется запрос к управляющему устройству (УУ) на передачу информации в ДЗУ (включается система прерываний). Между моментом возникновения за­проса и переключением ключей (рис. 2.2) проходит определенное время, по ис­течении которого приемное БЗУ становится передающим (например, подклю­чается канал прямого доступа и информация пишется на диск), а для сбора информации 8 оперативной памяти выделяется новая область, которая становится приемным БЗУ.

 

 

Рис. 2.2. Схема двухтактного БЗУ

При исследовании такой системы на модели могут ставиться различные вопросы: каков должен быть уровень заполнения БЗУ, при котором в системе генерируется запрос на переключение ключей; как связан этот уровень с интен­сивностью потока экспериментальных данных и вероятностью переполнения приемного БЗУ за время между запросом и переключением ключей и т.п.

Рассмотрим упрощенное описание модели на языке GPSS. Допустим, объем БЗУ - 1024 слова. Разрядность слова - 8 единиц. Тогда память БЗУ1/БЗУ2:

VAR2 VARIABLE 1024*8

STR1 STORAGE V$VAR2

Допустим, запрос на прерывание возникает при заполнении БЗУ до 1020 слов, тогда уровень заполнения:

VAR3 VARIABLE 1020*8

Еще одна переменная - описание среднего времени задержки между за­просом и

переключением БЗУ:

VAR4 VARIABLE 3

Пусть время между приходом слов в БЗУ распределено экспоненциально и равно в среднем 10 мин, тогда функционирование этой системы:

GENERATE 10,FN$XPDIS

IF STR1=F, OTKAZ                                если память заполнена – отказ                                                                                               

ENTER SIR 1,8

IF S$STR1<V$VAR3,ENDM

ADVANCE V$VAR4.FN$XPDIS        переключение БЗУ

LEAVE STR1.S$STRI

TERMINATE I

OTKAZ SAVEVALUE 1 + 1                    счетчик слов, потерянных из-за переполнения БЗУ

ENDM TERMINATE

 

Здесь транзакт попадает в блок ADVANCE только тогда, когда БЗУ за­полнена до необходимого уровня. Блок LEAVE полностью очищает память STR1, что равносильно переключению на новое БЗУ.

 

 

Приоритеты

 

Каждый транзакт может иметь свой приоритет - от 0 до 127. Чем больше номер, тем больше приоритет. Предпочтение в системе отдается транзактам с большим приоритетом, ранее поступившим.

Для изменения приоритета транзакта в процессе его путешествия по системе используется блок PRIORITY. Поле А этого блока определяет значе­ние присваиваемого приоритета. Например, при прохождении через блок PRIORITY 3 транзакту будет присвоен приоритет 3.

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: