Парадигмы программирования

Языки управления процессами

Разбить на страницы
Показывать лекцию целиком

Приводится обзор технических проблем управления процессами. Рассматриваются базовые средства для решения таких проблем на уровне функционирования операционных систем (ОС), исполнения отдельных задач и разработки информационных систем. Языки реализации ОС.

Внешне языки управления процессами выглядят как нечто среднее между макроассемблерами и языками высокого уровня. Различие проявляется в понимании данных, подвергаемых обработке, и командах, к которым сводятся процессы обработки:

  • Роль данных выполняют файлы - объекты, обладающие собственным поведением и подверженные влиянию внешнего мира. Существование файлов в период обработки не всегда очевидно. Файлы могут участвовать одновременно в разных процессах.
  • Выполнение команды рассматривается как событие. Такое событие может быть как успешным, так и неудачным. Кроме того, существуют внешние события.
  • Реакция на событие программируется как обработчик события, выполняемый независимо от других обработчиков, - это отдельный процесс.
  • Программа процесса может быть нацелена не на получение результата за конечное время, а на обеспечение непрерывного обслуживания заданий на обработку объектов. Процесс может быть активным или отложенным. Процессы могут конкурировать за общие объекты. Возможна синхронизация процессов и порождение подчиненных процессов.
  • Программа процесса выглядит как объект и создается как данное, а потом может применяться равноправно с командами. Последовательное расположение команд в программе не считается основанием для их выполнения в точно том же порядке. Выполнение команды может занимать ряд интервалов времени, между которыми выполняются другие команды.
  • В результате разработка программ для организации взаимодействия процессов отличается от подготовки обычных последовательных программ на весьма глубоком уровне, что можно показать на модели интерпретирующего автомата для языка управления процессами. Такой автомат требует реализации дополнительной таблицы событий, протокола выполненных команд и структуры данных для очередей, регулирующих доступ к объектам. Чаще всего используются две модели - супервизор, контролирующий взаимодействие семейства процессов, или автомат, способный тиражировать себя при ветвлении процессов. И в том, и в другом случае функционирование автомата сводится к бесконечному циклу анализа происходящих событий, появление которых влечет включение обработчиков, соответствующих событиям. Проблема остановки решается вне языка - на уровне базовых средств или внешним образом через прерывания.

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

    На уровне ОС основная работа сводится к управлению заданиями, нацеленными на эффективную загрузку общего оборудования и других ресурсов. Доступ к общим ресурсам обычно регулируется с помощью очередей запросов на обслуживание на базе моно- и/или мульти-процессорных комплексов. Обслуживание носит асинхронный характер. Основной критерий качества - возможность продолжить выполнение заданий без принципиальных потерь информации.

    Появление компьютерных сетей и особенно массовое распространение Интернета, электронной почты и информационных сервисов выплеснуло проблематику параллельных процессов на рядового пользователя. Обыденные впечатления от доступа к новостным и рекламным сайтам, обмена фильмами и звукозаписями, пересылки фотографий для их печати в фотоателье, интерактивное общение и дневники - все это формирует интуитивную базу для вполне полноценного понимания средств и методов параллельного программирования. Клиенты всех таких информационных систем и ресурсов сталкиваются с достаточно сложным поведением сетевых конфигураций из разнородного оборудования, функционирование которого складывается не вполне очевидно. Появляется критерий - достижение понятности сетевой обработки информации, что в значительной мере требует представления механизмов взаимодействия процессов. Этот критерий имеет весьма важную составляющую - обеспечение грамотного поведения клиентов, принимающих решения относительно доступа к информационным ресурсам.

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

    Базовые понятия

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

    По мнению Т.Хоара "Параллельная композиция действий внешне не сложнее последовательного сочетания строк в языке программирования" []. Функциональное программирование на Лиспе и других языках благодаря необычности (не смягчившейся за 40 с лишним лет) и более гибкой модели организации вычислений позволяет предоставить простые примеры для показа непривычных идей параллелизма, интуитивное понимание которых не требует напряжения [].

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

    При обсуждении тонкостей сложных проблем параллелизма принято привлекать шуточные и игровые сюжеты, такие как притча про пять философов, читатели-писатели, банкир, торговые автоматы, точное понимание которых не требует математической символики. Кажущаяся простота таких примеров помогает без затруднений воспринять сложность идей параллелизма [].

    Ряд моделей параллельных процессов концептуально сродни недетерминизму. Многие из них строятся как коллективное поведение объектов - автоматов с состояниями, изменение которых рассматривается как вычислительный процесс.

    Термин "процесс" используется для обозначения поведения "объекта".

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

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

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

    x -> P --   P за x

    Обычно для решения конкретной задачи вводится специальный объект - автомат, способный реагировать на определенное множество событий в зависимости от состояния автомата.

    Поведение объекта, который способен действовать, можно описать в виде системы правил, внешне похожих на уравнения. Решением такой системы уравнений являются процессы, которые может выполнить автомат.

    Пример 6.1. Рассмотрим автомат, установленный в здании НГУ на 4-ом этаже, продающий кофе.

    Торговый автомат: {деньги, кофе} 
       (деньги => ( кофе => автомат ) )
    
     - нет кофе без денег
     - нет двойных порций
    
    сломанный автомат - нет кофе
    
       (деньги => СТОП )
      
     - нет действий = нет событий

    Пример 6.2. [25] Рассмотрим простые задачи типа перемещения фишки на клетчатой доске по свободным позициям.

    X     
    O   X

    На данной доске фишка может двигаться лишь вправо или вверх. При множестве событий - { вправо, вверх } правильный процесс можно специфицировать как:

    ( враво вверх вправо => СТОП )

    Пример 6.3. [25] Простейшая модель часов - типовой пример рекурсивного описания процессов.

    Часы: { тик-так }
    
     (тик-так - часы) - рекурсия

    Пример 6.4. [25] Небольшое изменение разрешенных позиций на клетчатой доске показывает возможность выбора вариантов хода событий при выполнении процессов. Появляется понятие "меню".

    X   
    O
    ( вверх => СТОП 
      | вправо вправо вверх  СТОП )
    
        | -  представление вариантов в меню процесса

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

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

    Высказывание: Если для всякой альтернативы меню дальнейшего поведения совпадают, то процессы тождественны.

    Формулировка такого рода закономерностей позволяет разделить описание процесса на уровень спецификации и реализации.

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

    Реализация процессов

    Следуя Хоару представим, что события можно реализовать как атомы языка Лисп, а процессы определять как функции, задающие реакции на события. Структуры данных стандартных языков программирования, таких как Паскаль-Си даже при ООП-расширении менее удобны для расширяемой реализации, полезной при обсуждении понятий.

    В таком случае реализация процесса - это функция, определяющая ход процесса по начальному событию. Таким событием может быть в частности готовность входных данных. Функциональная модель представления процессов позволяет легко описывать и взаимодействие процессов в виде функционалов, т.е. функций над процессами, представленными как функциональные переменые.

    При определении взаимодействий используется понятие "протокол". Протокол - это последовательность символов, обозначающих произошедшие события.

    < вправо вверх вправо >

    Обычные операции над списками обеспечивают основные манипуляции с протоколами, возникающими при определении взаимодействий:

    Конкатенация списков
          сужение - пересечение
          голова-хвост
          * - все конечные протоколы
          порядок по префиксам
          длина
          замена символа
          чередование
          индекс
          обратный порядок
          выборка-вырезка
          композиция

    Особый интерес представляют монотонные функции над протоколами, допускающие аналитику прогнозирования поведения и доказательные построения. Важное направление анализа - проверка соответствия объектов спецификации процесса.

    Взаимодействие параллельных процессов

    Разнообразие схем взаимодействия процессов требует особой заботы об экономии концепций, понятий и их представлений. Функциональны подход к програмированию ценен именно возможностью унификации понятий, различие которых мало существенно с точки зрения их реализации. В этом плане можно не придавать значения разнице между процессами, объектами, системами и их окружениями. Все это определенные процессы с заданной схемой взаимодействия и разными преписанными ролями в более общем процессе информационной обработки.

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

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

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

    В качестве примеров, показывающих типовые схемы взаимодействия, принятые в основных областях задач параллельного программирования рекомендуется рассмотреть однородные вычисления, такие как задачи на шахматной доске или обработка векторов или матриц, асинхронные процессы, такие как задачи про философов и читателей-писателей, а также приемы синхронизации и оптимизации, описанные в книге Хоара []. Некоторые примеры будут рассмотрены в лекции 11, посвященной языкам параллельного программирования и высокопроизводительных вычислений.

    Учебная демонстрация проблем программирования взаимодействующих процессов показана на примере исполнителя "Машинист" языка начального обучения программирвоанию Робик [].

    Роль параллелизма в современном программировании распределенных систем подробна рассмотрена []

    Покажем простейший пример автоматизированного перехода от последовательных процессов к параллельным.

    Пример 6.5. Распараллеливание. Параллельная реализация ветвления.

    Условный оператор Эквивалентное выражение, приспособленное к распараллеливанию
    if X then Y else Z (x * y) + (~x * z)

    Управление процессами на уровне ОС как правило заключается в оперировании заданиями, сводимыми к передаче данных между устройствами и файлами.

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

    Основные события - инициализация процессов и систем, назначение стандартных потоков данных (ввод, вывод, ошибки), переключение режимов исполнения команд (приоритеты, фоновый режим), переадресация потоков, выяснение состояния файлов или устройств, задание времени исполнения команды, отмена команды.

    Более подробно со средствами управления процессами на уровне ОС можно ознакомиться в книге [] и курсах по операционным системам, например, "Основы работы в ОС Linux. Лекция 5 : Оболочка bash".

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

    Страницы:

    Приводится обзор технических проблем управления процессами. Рассматриваются базовые средства для решения таких проблем на уровне функционирования операционных систем (ОС), исполнения отдельных задач и разработки информационных систем. Языки реализации ОС.

    Внешне языки управления процессами выглядят как нечто среднее между макроассемблерами и языками высокого уровня. Различие проявляется в понимании данных, подвергаемых обработке, и командах, к которым сводятся процессы обработки:

  • Роль данных выполняют файлы - объекты, обладающие собственным поведением и подверженные влиянию внешнего мира. Существование файлов в период обработки не всегда очевидно. Файлы могут участвовать одновременно в разных процессах.
  • Выполнение команды рассматривается как событие. Такое событие может быть как успешным, так и неудачным. Кроме того, существуют внешние события.
  • Реакция на событие программируется как обработчик события, выполняемый независимо от других обработчиков, - это отдельный процесс.
  • Программа процесса может быть нацелена не на получение результата за конечное время, а на обеспечение непрерывного обслуживания заданий на обработку объектов. Процесс может быть активным или отложенным. Процессы могут конкурировать за общие объекты. Возможна синхронизация процессов и порождение подчиненных процессов.
  • Программа процесса выглядит как объект и создается как данное, а потом может применяться равноправно с командами. Последовательное расположение команд в программе не считается основанием для их выполнения в точно том же порядке. Выполнение команды может занимать ряд интервалов времени, между которыми выполняются другие команды.
  • В результате разработка программ для организации взаимодействия процессов отличается от подготовки обычных последовательных программ на весьма глубоком уровне, что можно показать на модели интерпретирующего автомата для языка управления процессами. Такой автомат требует реализации дополнительной таблицы событий, протокола выполненных команд и структуры данных для очередей, регулирующих доступ к объектам. Чаще всего используются две модели - супервизор, контролирующий взаимодействие семейства процессов, или автомат, способный тиражировать себя при ветвлении процессов. И в том, и в другом случае функционирование автомата сводится к бесконечному циклу анализа происходящих событий, появление которых влечет включение обработчиков, соответствующих событиям. Проблема остановки решается вне языка - на уровне базовых средств или внешним образом через прерывания.

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

    На уровне ОС основная работа сводится к управлению заданиями, нацеленными на эффективную загрузку общего оборудования и других ресурсов. Доступ к общим ресурсам обычно регулируется с помощью очередей запросов на обслуживание на базе моно- и/или мульти-процессорных комплексов. Обслуживание носит асинхронный характер. Основной критерий качества - возможность продолжить выполнение заданий без принципиальных потерь информации.

    Появление компьютерных сетей и особенно массовое распространение Интернета, электронной почты и информационных сервисов выплеснуло проблематику параллельных процессов на рядового пользователя. Обыденные впечатления от доступа к новостным и рекламным сайтам, обмена фильмами и звукозаписями, пересылки фотографий для их печати в фотоателье, интерактивное общение и дневники - все это формирует интуитивную базу для вполне полноценного понимания средств и методов параллельного программирования. Клиенты всех таких информационных систем и ресурсов сталкиваются с достаточно сложным поведением сетевых конфигураций из разнородного оборудования, функционирование которого складывается не вполне очевидно. Появляется критерий - достижение понятности сетевой обработки информации, что в значительной мере требует представления механизмов взаимодействия процессов. Этот критерий имеет весьма важную составляющую - обеспечение грамотного поведения клиентов, принимающих решения относительно доступа к информационным ресурсам.

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

    Базовые понятия

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

    По мнению Т.Хоара "Параллельная композиция действий внешне не сложнее последовательного сочетания строк в языке программирования" []. Функциональное программирование на Лиспе и других языках благодаря необычности (не смягчившейся за 40 с лишним лет) и более гибкой модели организации вычислений позволяет предоставить простые примеры для показа непривычных идей параллелизма, интуитивное понимание которых не требует напряжения [].

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

    При обсуждении тонкостей сложных проблем параллелизма принято привлекать шуточные и игровые сюжеты, такие как притча про пять философов, читатели-писатели, банкир, торговые автоматы, точное понимание которых не требует математической символики. Кажущаяся простота таких примеров помогает без затруднений воспринять сложность идей параллелизма [].

    Ряд моделей параллельных процессов концептуально сродни недетерминизму. Многие из них строятся как коллективное поведение объектов - автоматов с состояниями, изменение которых рассматривается как вычислительный процесс.

    Термин "процесс" используется для обозначения поведения "объекта".

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

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

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

    x -> P --   P за x

    Обычно для решения конкретной задачи вводится специальный объект - автомат, способный реагировать на определенное множество событий в зависимости от состояния автомата.

    Поведение объекта, который способен действовать, можно описать в виде системы правил, внешне похожих на уравнения. Решением такой системы уравнений являются процессы, которые может выполнить автомат.

    Пример 6.1. Рассмотрим автомат, установленный в здании НГУ на 4-ом этаже, продающий кофе.

    Торговый автомат: {деньги, кофе} 
       (деньги => ( кофе => автомат ) )
    
     - нет кофе без денег
     - нет двойных порций
    
    сломанный автомат - нет кофе
    
       (деньги => СТОП )
      
     - нет действий = нет событий

    Пример 6.2. [25] Рассмотрим простые задачи типа перемещения фишки на клетчатой доске по свободным позициям.

    X     
    O   X

    На данной доске фишка может двигаться лишь вправо или вверх. При множестве событий - { вправо, вверх } правильный процесс можно специфицировать как:

    ( враво вверх вправо => СТОП )

    Пример 6.3. [25] Простейшая модель часов - типовой пример рекурсивного описания процессов.

    Часы: { тик-так }
    
     (тик-так - часы) - рекурсия

    Пример 6.4. [25] Небольшое изменение разрешенных позиций на клетчатой доске показывает возможность выбора вариантов хода событий при выполнении процессов. Появляется понятие "меню".

    X   
    O
    ( вверх => СТОП 
      | вправо вправо вверх  СТОП )
    
        | -  представление вариантов в меню процесса

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

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

    Высказывание: Если для всякой альтернативы меню дальнейшего поведения совпадают, то процессы тождественны.

    Формулировка такого рода закономерностей позволяет разделить описание процесса на уровень спецификации и реализации.

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

    Реализация процессов

    Следуя Хоару представим, что события можно реализовать как атомы языка Лисп, а процессы определять как функции, задающие реакции на события. Структуры данных стандартных языков программирования, таких как Паскаль-Си даже при ООП-расширении менее удобны для расширяемой реализации, полезной при обсуждении понятий.

    В таком случае реализация процесса - это функция, определяющая ход процесса по начальному событию. Таким событием может быть в частности готовность входных данных. Функциональная модель представления процессов позволяет легко описывать и взаимодействие процессов в виде функционалов, т.е. функций над процессами, представленными как функциональные переменые.

    При определении взаимодействий используется понятие "протокол". Протокол - это последовательность символов, обозначающих произошедшие события.

    < вправо вверх вправо >

    Обычные операции над списками обеспечивают основные манипуляции с протоколами, возникающими при определении взаимодействий:

    Конкатенация списков
          сужение - пересечение
          голова-хвост
          * - все конечные протоколы
          порядок по префиксам
          длина
          замена символа
          чередование
          индекс
          обратный порядок
          выборка-вырезка
          композиция

    Особый интерес представляют монотонные функции над протоколами, допускающие аналитику прогнозирования поведения и доказательные построения. Важное направление анализа - проверка соответствия объектов спецификации процесса.

    Взаимодействие параллельных процессов

    Разнообразие схем взаимодействия процессов требует особой заботы об экономии концепций, понятий и их представлений. Функциональны подход к програмированию ценен именно возможностью унификации понятий, различие которых мало существенно с точки зрения их реализации. В этом плане можно не придавать значения разнице между процессами, объектами, системами и их окружениями. Все это определенные процессы с заданной схемой взаимодействия и разными преписанными ролями в более общем процессе информационной обработки.

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

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

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

    В качестве примеров, показывающих типовые схемы взаимодействия, принятые в основных областях задач параллельного программирования рекомендуется рассмотреть однородные вычисления, такие как задачи на шахматной доске или обработка векторов или матриц, асинхронные процессы, такие как задачи про философов и читателей-писателей, а также приемы синхронизации и оптимизации, описанные в книге Хоара []. Некоторые примеры будут рассмотрены в лекции 11, посвященной языкам параллельного программирования и высокопроизводительных вычислений.

    Учебная демонстрация проблем программирования взаимодействующих процессов показана на примере исполнителя "Машинист" языка начального обучения программирвоанию Робик [].

    Роль параллелизма в современном программировании распределенных систем подробна рассмотрена []

    Покажем простейший пример автоматизированного перехода от последовательных процессов к параллельным.

    Пример 6.5. Распараллеливание. Параллельная реализация ветвления.

    Условный оператор Эквивалентное выражение, приспособленное к распараллеливанию
    if X then Y else Z (x * y) + (~x * z)

    Управление процессами на уровне ОС как правило заключается в оперировании заданиями, сводимыми к передаче данных между устройствами и файлами.

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

    Основные события - инициализация процессов и систем, назначение стандартных потоков данных (ввод, вывод, ошибки), переключение режимов исполнения команд (приоритеты, фоновый режим), переадресация потоков, выяснение состояния файлов или устройств, задание времени исполнения команды, отмена команды.

    Более подробно со средствами управления процессами на уровне ОС можно ознакомиться в книге [] и курсах по операционным системам, например, "Основы работы в ОС Linux. Лекция 5 : Оболочка bash".

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

    Вернуться к учебному плану