2. ПЕРВЫЕ ВЕРСИИ GPSS
 
Первая история GPSS была рассказана самим Гордоном в широко известной статье опубликованной в обозрении АСМ SIGPLAN (Gordon 1978). В ней считается, что развитие GPSS началось до 1961 года. Из данного источника мы можем понять, что ранние идеи, результатом которых стал GPSS, пришли к Гордону в середине 50-х, когда Гордон работал в лаборатории Bell Telephone. 

Уже в его ранних работах была сделаны простейшие имитационные модели системы переключения сообщений, в которых он использовал единичное и множественное обслуживание как базовые элементы, предшественники устройств и памятей. В 1959 г. он работал на симуляторе, базирующемся на последовательности диаграмм для изучения систем переключения. Приведенный в статье симулятор (Dietmeyer и другие 1960) описывает системы в более общих терминах, включая людей в супермаркете. 

В июне 1960 Гордон пришел в IBM. Он был подключен к изучению проблемы поиска наилучшего времени отклика в терминальных системах. Потенциально значение моделирования было признано в департаменте в связи с этими исследованиями и Гордон начал работы по созданию симулятора, основанного на блоках, отчасти базирующийся на его экспериментах с упомянутым симулятором последовательности диаграмм. Первоначально он был только программистом. Первым его крупным достижением было то, что за очень короткое время он сумел сделать имитационную модель дисковой системы со случайным доступом. В октябре 1960 г. было выпущено руководство по симулятору для внутреннего использования в IBM. Система пока еще не имела своего названия, но в IBM ее назвали симулятором Гордона. Некоторые недоработки в средстве ручного моделирования событий были обнаружены при эксплуатации, и Гордон переделал алгоритм моделирования. О некоторых событиях, имевших место 40 лет назад, я расскажу, непосредственно процитировав Гордона (1978, стр. 186-187): «В начале 1961 г. полное перепрограммирование, начатое в соответствии с новым алгоритмом, было начато… Я был прикреплен к двум программистам миссис Р. Барбьери и Р. Эфрону и программирование продолжалось до лета 1961 г. Гриф секретности с программы был снят в начале 1961г. так, что копии существующих программ могли быть переданы людям не работающим в IBM. Понятно, что это не поддерживалось IBM. (Это был перечень программ IBM типа III, которые могли быть переданы без права исправления ошибок). 

Через несколько месяцев была отлажена программа и разработана соответствующая документация. Когда это было сделано, был выпущен пресс-релиз 27 октября 1961, объявляющий программу как II тип IBM программ (что означало с возможностью коррекции ошибок). 6 октября 1961 года было выпущено руководство пользователя, и программа могла использоваться в системах IBM 704, 709 и 7090… (Gordon 1961) … Опрометчиво эта реализация была названа Общецелевой симулятор или GPS. Вскоре после реализации этот акронум был использован профессорами Невелом и Симоном для разработанных им программ - Главный Решатель Проблем… Поэтому я быстро изменил название на общецелевой симулятор систем, или GPSS. 

В статье описывается программа, которая была представлена на «Совместной восточной конференции компьютерных систем» (Gordon 1961b). В статье Гордона описывались некоторые подробности, но более доступно это описано в публикации в «Системном журнале IBM» в 1962г. (Gordon 1962). Из этих трех наиболее известных источников мы смогли узнать следующие детали о первой версии GPSS. 

Было собрано вместе 25 типов блоков: ORIGINATE, GENERATE, CALL, ADVANCE, BRANCH, SEIZE, RELEASE, HOLD, INTRRUPT, PREEMPT, RETURN, ENTER, LEAVE, STORE, QUEUE, SPLIT, MATCH, ASSIGN, MARK, TABULATE, TAG, TRANSFER, GATE, WRITE, TERMINATE 

(Смотри также приложение). Несколько из выше приведенных блоков были выведены в последующих GPSS версиях. Ради дальнейшего обсуждения, мы рассмотрим некоторые из различий в блоках создания транзактов – ORIGINATE и GENERATE . 

Создание транзактов из блока ORIGINATE продолжалось, даже если транзакт не мог войти в следующий блок, в отличие от этого блок GENERATE создавал транзакты только тогда, когда транзакты могли войти в следующий блок. Интересно отметить, что дальнейшие IBM версии такие известные как GPSS /H имели блок GENERATE подобный начальному блоку ORIGINATE, в отличие от других GPSS систем, таких как GPSS/ PC и Micro- GPSS, имеющих блок GENERATE подобный по поведению оригинальному блоку GENERATE. 

Уже в первой версии GPSS было два типа обслуживающих аппарата, «Устройства», обслуживающие один транзакт в данный момент времени и «Памяти» (STORE) (переименованный в следующих версиях на STORAGE), который мог обслуживать несколько транзактов одновременно. Устройства могли быть заняты и освобождены блоками SEIZE и RELEASE и памяти - соответственно блоками ENTER и LEAVE . Определение времени обслуживания на этих стадиях, однако отличались в первой версии по сравнению с последующими версиями. Было три различных блока для задержки. Блок ADVANCE использовался только для представления времени задержки транзактов, не занятых в обслуживании. Затем блок HOLD использовался для моделирования задержки на устройствах и блок STORE - для моделирования использования памяти (части ее) транзактом. 

Следующие средства, которые рассмотрим, вероятно, наиболее различны в сравнении во всех существующих версиях GPSS. 

Затронем следующие средства, которые наиболее вероятно отличаются во всех представленных версиях GPSS. Все типы блоков, которые могут быть точкой завершения, имеют два выхода 1 и 2. Они определяются номером блока, для указания выхода. В случае если был единственный выход, только один номер передавался блоку, как выход 1. Если имеются два выхода, то оба выхода должны иметь фактор отбора для определения перехода к одному или другому выходу, подобно вероятности перехода к выходу 1. Кодирование операндов было основано на фиксированном формате, где для примера выход 1 задан в специальной колонке и фактор выбора в другой специальной колонке. В основном многие ограничения были установлены в первой версии GPSS, подобно одному потоку случайных чисел, одному параметру и числовому представлению обслуживающих аппаратов. Не было стандартных числовых атрибутов, и блок GATE в первой версии мог ссылаться только к номеру обслуживающего аппарата. Наконец можно сказать, что емкость памяти определялась оператором, называемым CAPACITY, что полностью соответствует одной из новейших версий GPSS - WebGPSS. 

Следующая версия GPSS II не внесла значительных изменений в исходную версию (IBM 1963) и (Efron и Gordon 1964). Общее число блоков увеличилось с 25 до 33. Двенадцать новых блоков было добавлено - ASSEMBLE, BUFFER, COMPARE, HELP, INDEX, LOGIC, LOOP, PRINT, PRIORITY, SAVEX, TRACE и UNTRACE. Еще четыре блока были убраны - BRANCH, CALL, TAG и TRANSFER. Появился новый оператор арифметических вычислений - VARIABLE. Так же другие средства усилили мощь GPSS. Число параметров увеличилось до 8. Параметры могли быть использованы также для косвенной адресации. Пользователь мог вызывать в модели подпрограммы, написанные им на языке Ассемблер. Так же была введена простейшая форма макросов. Вывод статистики был расширен. 

GPSS III. Хотя число блоков увеличилось только на три до 36, но GPSS III гораздо ближе к GPSS World 2000, чем GPSS III к GPSS II (Herscovitch и Schneider 1965). Основные изменения заключались в следующем. Блоки GENERATE и ORIGINATE были объединены в один блок GENERATE, который работал так же как исходный блок ORIGINATE(смотри выше). Блоки HOLD и STORE были устранены, что позволило блоку ADVANCE стать по свойствам более общим, чем ранее. Системы с двумя выходами по фактору выбора были устранены. Взамен выбор следующего блока определялся блоком TRANSFER, который был восстановлен. Фиксированный формат для каждого операнда блока, определяемый специальными колонками, был изменен на формат, где все операнды вставали в одну непрерывную строку. Более того, был добавлен блок DEPART для работы с блоком QUEUE. Две ранние версии GPSS имели только блок QUEUE измерявший очередь, например, перед блоками SIZE и ENTER. Но данный блок, однако, не подходил для измерения очередей перед другими блоками, такими как перед парными блоками GATE, но такие очереди тоже нужно было измерять. С новой парой блоков QUEUE и DEPART такие измерения стали возможны. Блоки LINK и UNLINK были добавлены для создания списков пользователей и позволяли обеспечить в определенных случаях более эффективное выполнение. Блок SAVEVALUE заменил блок SAVEX. Блок TEST заменил блок COMPARE. Другое улучшение было в большем числе параметров, более общем блоке PRINT разрешавшем выводить на печать любые СЧА, не только ячейки (затем названные savexes), в отличии от первых двух версий. Блок SPLIT мог создавать более чем одну копию. 

В связи с реализацией GPSS III , было изменено значение символов входящих в акронум GPSS на значение - общецелевая система моделирования, вместо - общецелевого имитатора систем. С приходом GPSS III, GPSS стал более языком моделирования, чем системным имитатором. После GPSS III пришел язык GPSS/360, который основывался на множестве, безусловно, вытекающих из развития языка расширениях. Например, введение новых 8 форм типов блоков, которых стало в GPSS - 44. Из 8 новых блоков пять было связано с новыми типами объектов - группы: ALTER, EXAMINE, JOIN, REMOVE и SCAN. Другие три новых типа блоков это COUNT, MSAVEVALUE и SELECT. Другим расширением, введенным в GPSS/360 были параметры и ячейки различной длины, так как под число можно было использовать разное количество бит (16 и 32). Раньше был только один тип параметра (16) и один тип ячеек(32). Пара блоков QUEUE и DEPART позволяла так же как и ранее использоваться для измерения расходования времени в блоках ADVANCE., предполагалось так же, что эта пара блоков должна измерять время израсходованное транзактом между двумя любыми блоками. Было решено, что блок QUEUE должен называться ARRIVE. В данной версии было введено 8 датчиков случайных чисел. Концепция переменных была расширена круглыми скобками и булевскими переменными. Важным изменением явилось то, что сейчас любые объекты не только блоки могут иметь символьные имена, в дополнении к их номерам. Блок PREEMPT был расширен, например, позволял выбирать желаемый приоритет. Возможности макро были значительно расширены. Наконец редактор вывода разрешал использовать специальный формат вывода. 

GPSS/360 в 1971 году был успешно заменен на GPSS V. Четыре новых вида блоков были введены для расширения возможностей устройств и памятей – FAVALE и FUNAVALE, SAVALE и SUNAVALE.Так общее число блоков достигло 48. Возможность размещения части модели во внешней памяти была введена. Параметры и ячейки могли сейчас браться в четырех различных формах. В дополнении к ранним редакциям был добавлен формат с плавающей точкой. В то же время некоторые другие версии были выпущены другими производителями помимо IBM: CDC, Honeywell, Norden, RCA , UNIAC и XEROX (Gordon 1978). Версия Norden – 360 была разработана группой под руководством Дж. Рейтмана и была инновационной в терминах использования памяти, интерактивного вывода и использования графического дисплеев как терминалов вывода результатов имитационного моделирования (Nance 1996). В Германии фирмы Сименс и Телефункен имели свои версии GPSS.
 
назад

вперед