Конвейеры CMS
Парадигма | Программирование потоков данных |
---|---|
Разработано | Джон П. Хартманн ( IBM ) |
Разработчик | ИБМ |
Впервые появился | 1986 |
Стабильная версия | 1.1.12/0012
/ 2020-06-03 |
Платформа | IBM z Системы |
ТЫ | з/ВМ 7.1 |
Веб-сайт | http://vm.marist.edu/~pipeline |
Под влиянием | |
Конвейер (Unix) |
Конвейеры CMS — это функция операционной системы VM/CMS , которая позволяет пользователю создавать и использовать конвейер . Программы в конвейере работают с последовательным потоком записей. Программа записывает записи, которые читаются следующей программой в конвейере. Любую программу можно комбинировать с любой другой, поскольку чтение и запись осуществляются через аппаратно-независимый интерфейс.
Обзор
[ редактировать ]CMS Pipelines предоставляет команду CMS, PIPE
. Строка аргумента для PIPE
команда — это спецификация конвейера. PIPE выбирает программы для запуска и объединяет их в конвейер для передачи данных.
Поскольку программы и утилиты CMS не предоставляют независимый от устройства интерфейс stdin и stdout , CMS Pipelines имеет встроенную библиотеку программ, которые можно вызывать в спецификации конвейера. Эти встроенные программы взаимодействуют с операционной системой и выполняют множество служебных функций.
Данные в CMS структурированы в виде логических записей, а не потока байтов. Для текстовых данных строка текста соответствует логической записи. В CMS Pipelines данные передаются между этапами в виде логических записей.
Пользователи CMS Pipelines вводят команды конвейера с терминала или в процедурах EXEC. Пользователи могут писать на REXX программы , которые можно использовать в дополнение к встроенным программам.
Пример
[ редактировать ]Простой пример, который читает файл с диска и отделяет записи, содержащие строку «Привет», от тех, которые ее не содержат. Выбранные записи изменяются путем добавления строки «World!» каждому из них; остальные записи переводятся в верхний регистр. Затем два потока объединяются, и записи записываются в новый выходной файл.
PIPE (end ?) < input txt | a: locate /Hello/ | insert / World!/ after | i: faninany | > newfile txt a ? a: | xlate upper | i:
В этом примере <
этап считывает входной файл с диска и передает записи на следующий этап конвейера. locate
Этап разделяет входной поток на два выходных потока. Основной результат locate
(записи, содержащие Hello) передает записи в insert
этап. insert
этап изменяет входные записи, указанные в его аргументах, и передает их на выход. Выход подключен к faninany
который объединяет записи из всех входных потоков в один выходной поток. Вывод записывается в новый файл на диске.
Вторичный выход locate
(отмечается вторым появлением a:
label) содержит записи, не соответствующие критерию отбора. Эти записи переводятся в верхний регистр (с помощью xlate
этап) и передается во вторичный входной поток faninany
(отмечается вторым появлением i:
этикетка).
Топология конвейера в этом примере состоит из двух соединенных конвейеров. Конечный персонаж (т. ?
в этом примере) разделяет отдельные конвейеры в наборе конвейеров. Записи, считанные из входного файла, проходят через любой из двух маршрутов топологии конвейера. Поскольку ни один из маршрутов не содержит этапов, требующих буферизации записей, CMS Pipelines гарантирует, что записи поступят в faninany
в том порядке, в котором они прошли locate
.
Пример конвейера представлен в «портретной форме» с отдельными этапами на отдельных строках. Когда конвейер вводится как команда CMS, все этапы записываются в одной строке.
Функции
[ редактировать ]Концепция простого конвейера расширяется следующим образом:
- Программа может определить конвейер подпрограмм для выполнения функции над всеми или частью входных данных.
- Можно определить сеть пересекающихся трубопроводов. Программы могут находиться в нескольких конвейерах одновременно, что дает программе доступ к нескольким потокам данных.
- Данные, передаваемые от одного этапа к другому, структурируются как записи. Это позволяет этапам работать с одной записью без необходимости произвольной буферизации данных для сканирования специальных символов, разделяющих отдельные строки.
- Стадии обычно получают доступ к входной записи в режиме поиска и создают выходные записи перед использованием входной записи. Этот пошаговый подход не только позволяет избежать копирования данных из одного буфера в другой; это также позволяет прогнозировать поток записей в многопоточных конвейерах.
- Программа может динамически переопределять топологию конвейера. Он может заменить себя другим конвейером, вставить сегмент конвейера до или после себя, или и то, и другое. Программа может использовать данные в конвейере для построения спецификаций конвейера.
CMS Pipelines предлагает несколько функций для повышения надежности программ:
- Синтаксическая ошибка в общей структуре конвейера или в какой-либо одной программе приводит к подавлению всего конвейера.
- Запуск программ в конвейере и распределение ресурсов координируется диспетчером CMS Pipelines . Отдельные программы могут участвовать в этой координации, чтобы гарантировать, что необратимые действия будут отложены до момента, когда все программы в конвейерах получат возможность проверить аргументы и будут готовы обработать данные. Когда конвейер завершается, диспетчер обеспечивает повторное высвобождение ресурсов.
- Ошибки, возникающие во время потока данных в конвейере, могут быть обнаружены всеми участвующими программами. Например, в таких обстоятельствах файл на диске не может быть заменен.
История
[ редактировать ]Джон Хартманн из IBM в Дании начал разработку CMS Pipelines в 1980 году. [1] Этот продукт продавался IBM как отдельный продукт в 80-х годах и был интегрирован в VM/ESA в конце 1991 года. С каждым выпуском VM код CMS Pipelines также обновлялся, пока он не был функционально заморожен на уровне 1.1.10 в VM/ESA 2.3 в 1997 году. С тех пор последний уровень CMS Pipelines был доступен для загрузки с CMS. Домашняя страница Pipelines для пользователей, желающих изучить новую функцию.
Текущий уровень CMS Pipelines снова включен в выпуски z/VM , начиная с z/VM 6.4, доступного с 11 ноября 2016 г.
Реализация CMS Pipelines для TSO была выпущена в 1995 году как BatchPipeWorks в продукте BatchPipes/MVS . Современная реализация TSO была доступна в качестве предложения услуг от IBM в Дании до 2010 года.
Обе версии поддерживаются на основе единого исходного кода и обычно называются CMS/TSO Pipelines . Спецификация доступна в Авторской редакции. [2]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ VM и сообщество VM, Мелинда Вариан
- ^ Трубопроводы CMS/TSO Авторское издание Авторское издание
Внешние ссылки
[ редактировать ]- программное обеспечение IBM
- Параллельные языки программирования
- Конкатенативные языки программирования
- Динамические языки программирования
- Языки функционального уровня
- Функциональные языки
- Межпроцессное взаимодействие
- Мультипарадигмальные языки программирования
- Рекс
- Языки спецификации
- ВМ (операционная система)