Косвенная адресация


Пр.: ASSIGN 5,1

Прямая адресация. Параметру 5 присваивается значение 1.

ASSIGN P5,1

Косвенная адресация . Параметру, № которого содержится в параметре 5, присвоить значение 1. Эта запись аналогична следующей:

ASSIGN *5,1

Q5- прямая адресация. Q-СЧА

QP5- косвенная адресация.

Q*5- такое обозначение используется в GPSS вместо QP5

 

Пример 9.2Пусть имеется ВС. В ней есть 2 детали (модуля) А и В. Для модуля А – свое время жизни, для модуля В – свое. Когда отказывает, например, А вставляют запасную деталь А, у которой имеется свое время жизни.

 

       
 
   
 

 


* Переменные V1 и V2 задают время жизни деталей 1 и 2 соответственно.

FVARIABLE ..........
FVARIABLE ..........

* Переменная AFIX определяет время ремонта детали 1.

AFIX FVARIABLE
.............    

* Функция BFIX задаёт время ремонта детали 2.

BFIX FUNCTION .........
.............    

*Функция POI является атрибутивно-значимой, то есть в качестве

*результата имеет не конкретное число, а другую функцию или

*переменную. Блок определяет время ремонта (время ремонта зависит от

*типа детали).

POI FUNCTION P3,M2

1,V$AFIX/2,FN$BFIX

* Функция FL является атрибутивно-значимой со списковой структурой.

FL FUNCTION P3,L2

1,2/2,1

  GENERATE ,,,1

*Параметр 1 получит значение переменной 1

  ASSIGN 1,V1
  ASSIGN 2,V2

*Блок SELECT определяет какой из параметров P1 или P2 имеет меньшее *значение, и результат записывается в параметр P3.

L SELECT MIN 3,1,2,,P
  ADVANCE
  SEIZE MACH

* P*3, X*3, V*3 задают косвенное обращение

  ADVANCE P*3
  RELEASE MACH
  ASSIGN FN$FL-,P*3

* После отказа вытаскиваем деталь

  ADVANCE
  SPLIT 1,M
  SEIZE MAST
  ADVANCE FN$POI
  RELEASE MAST
  SAVEVALUE P3+,1
  TERMINATE  

*Проверка наличия деталей отказавшего типа.

M TEST G X*3,0
  SAVEVALUE P3-,1
  ASSIGN P3,V*3
  TRANSFER ,L

 

Не трудно видеть, что данная программа будет выполняться бесконечно долго, так как в ней нет счетчика времени.

 

Лекция 10

Цепи пользователя

 

До сих пор мы имели дело с цепями текущих и будущих событий. Эти цепи недоступны пользователю .

Язык GPSS предоставляет программисту для использования третью разновидность цепей - цепь пользователя. Цепь пользователя - такое место, где могут находиться транзакты , присутствующие в модели ,но не находящиеся ни в цепи будущих,ни в цепи текущих событий.Цепей пользователя может быть несколько (количество определяется объемом памяти машины) .

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

LINK A,B,C -позволяет поместить транзакт в цепь пользователя .

A - имя цепи пользователя ,может быть как численным так и символическим.

B - способ включения транзакта в цепь пользователя.Имеет следующие варианты:

FIFO - новый транзакт ставится в конец (обычная очередь);

LIFO - новый транзакт становится в начало очереди;

P - указывает параметр, в соответствии с которым транзакты помещаются в цепь пользователя:в начале находятся транзакты с меньшим значением этого параметра.

C -(необязательный параметр) Если С отсутствует, то блок LINK работает в режиме безусловного присоединения,присутствие операнда С задает режим условного присоединения.

Для каждой цепи пользователя вводится индикатор состояния, принимающий состояния Set либо Reset.

Set - транзакт безусловно присоединяется к цепи пользователя

Reset - при поступлении на оператор LINK транзакта индикатор состояния устанавливается в состояние Set и транзакт поступает на блок с меткой‚ указанной в операнде С.

UNLINK A,B,C,D,E,F -обеспечивает вывод транзактов из цепи пользователя .

A - имя цепи пользователя ‚из которой извлекаются транзакты.

C - указывается число выводимых транзактов. Здесь может стоять число‚слово ALL (выводятся все

транзакты) или любой числовой атрибут.

B - метка блока‚ на который должны поступить выводимые транзакты.

Выводимые из цепи пользователя транзакты поступают в цепь текущих событий и занимают там место в соответствии со своим приоритетом.

D,E - определяют порядок вывода транзактов

F - имя блока‚ в который поступает транзакт–инициатор‚ то есть тот транзакт который поступил на блок UNLINK‚ если из цепи пользователя не был выведен ни один транзакт.Если был выведен хотя бы один транзакт или операнд F отсутствует‚ то транзакт–инициатор идет на следующий по написанию блок.

При выполнении блока LINK индикатор состояния устанавливается в режим Set. Индикатор состояния может быть выключен только блоком UNLINK, когда в цепи пользователя не останется ни одного транзакта.В начальный момент времени все индикаторы находятся в состоянии Reset.

 

Пример № 10.1: Смоделировать систему ОП–БП–ЦП.ОП посылает данные на обработку в ЦП.Если ЦП занят, то данные поступают в БП.

 
 

 

 


 

  GENERATE 15,5
  QUEUE A

* 1-й транзакт‚ пройдя блок LINK‚ установит индикатор состояния

* из Reset в Set и поступит на устройство. Последующие транзакты‚

* если 1-й транзакт ещё не прошел блок UNLINK‚ будут поступать

* в цепь пользователя .

  LINK C1,FIFO,M
M SEIZE B
  DEPART A
  ADVANCE 10,7
  RELEASE B

* При прохождении блока UNLINK, если цепь пользователя

* пуста‚ индикатор состояния установится в состояние Reset.

  UNLINK C1,M
  TERMINATE  

 

 

Лекция 11 .

Из программы‚ приведенной в лекции №10, можно убрать блоки DEPART, QUEUE, SEISE, RELEASE и соответственно переставить метку M на блок ADVANCE. Программа будет работать так же, только у нас не будет статистики.

Пример 11.1: Пусть у нас есть ОП, БП (общая очередь) и многопроцессорная система.

Необходимо построить программу с использованием цепи

пользователя.Будем считать, что времена выполнения в

ЦП одной функции распределения, и поэтому можно

использовать многоканальное устройство.

Версия 1:

 

* Следующий блок задает ёмкость многоканального устройства

STORAGE
  GENERETE 15,5
  PRIORITY

* Блок GATE проверяет устройство на занятость

  GATE SNF 1‚F
M ENTER
  ADVANCE 10,7
  LEAVE
  UNLINK C1,M1
  TERMINATE  
F LINK C1,FIFO

 

Для чего в программе необходим блок PRIORITY?

Рассмотрим ситуацию, когда в один и тот же момент времени должен появиться транзакт из блока GENERATE(назовём этот транзакт G-транзактом), и в тот же момент транзакт покидает блок ADVANCE(A-транзакт).Пусть в цепи пользователя находится хотя бы один транзакт. Будем считать что G-транзакт стоит в цепи текущих событий после A-транзакта.

Пусть нет блока PRIORITY. A-транзакт освобождает одно место в устройстве и, проходя блок UNLINK, инициирует вывод 1-го транзакта из цепи пользователя(U-транзакт). U-транзакт поступает в цепь текущих событий и занимает там место после G-транзакта. В соответствии с расположением в цепи текущих событий интерпретатор продвигает G-транзакт, и он занимает одно место в устройстве 1.

U-транзакт не может занять место в устройстве, следовательно наша модель будет работать не верно.

Версия 2:

 

STORAGE
  GENERETE 15,5
  GATE SNF 1‚F
M ENTER
  ADVANCE 10,7

* Следующий блок подтверждает приоритет транзакта и перемещает

* его в конец цепи текущих событий.

  PRIOTITY PR
  BUFFER  
  LEAVE
  UNLINK C1,M1
  TERMINATE  
F LINK C1,FIFO

 

Блок BUFFER принудительно останавливает движение транзакта. Интерпретатор начинает с начала обрабатывать транзакты, находящиеся в цепи текущих событий.

Связку:

 

  PRIORITY PR
  BUFFER  

 

можно заменить на

BUFFER PR

Пример 11.2:

 
 


ЦП в отличие от предыдущего примера имеют свою БП и могут обладать разной производительностью.

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

 

 

  GENERATE  

* Далее параметр 1 получит значение в зависимости от типа команды.

  ASSIGN 1,FN$A
  PRIORITY
  QUEUE

* В следующем блоке будет определяться свободный процессор.Если все

* процессоры заняты, то транзакт(команда) поступит в блок с меткой M.

  SELECT 2,1,3,0,F,M
N SEIZE P2
  DEPART
  ADVANCE P1,FN$B
  RELEASE P2
  UNLINK P2,N,1
  TERMINATE  

* Этот блок SELECT определяет минимальную очередь.

* CH – CЧА,даёт текущее содержимое цепи пользователя.

M SELECT MIN 2,1,3,,CH
  LINK P2,FIFO

 



Дата добавления: 2016-11-04; просмотров: 1544;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.02 сек.