Связующее программное обеспечение, основанное на взаимодействии

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

Linda представляет собой оригинальную систему связи и синхронизации, разработанную в Йельском университете Дэвидом Гелернтером и его студентом Ником Каррьеро (Carriero and Gelernter, 1986; Carriero and Gelernter, 1989; Gelernter, 1985). В системе Linda независимые процессы общаются через абстрактное пространство кортежей. Это пространство является глобальным для всей системы, и процессы на любой машине могут вставлять кортежи в пространство кортежей или удалять их из него независимо от того, как и где эти кортежи хранятся. Для пользователя пространство кортежей выглядит как большая глобальная общая память, уже встречавшаяся ранее в различных формах (например, на рис. 8.21, в).

Кортеж похож на структуру в C или Java. Он состоит из одного или нескольких полей, каждое из которых является значением некоторого типа, поддерживаемого базовым языком. (Система Linda реализуется с помощью добавления библиотеки к стандартному языку, например к C.) В системе C-Linda типы полей включают целые числа, длинные целые числа, числа с плавающей запятой, а также составные типы, такие как массивы (включая строки) и структуры (но не другие кортежи). В отличие от объектов кортежи представляют собой просто данные и не содержат никаких связанных с ними методов. В листинге 8.1 показаны три примера кортежей.

Листинг 8.1. Три кортежа в системе Linda ("abc", 2, 5)

("matrix-1", 1, 6, 3.14)

("family", "is-sister", "Stephany", "Roberta")

Предусмотрено проведение с кортежами четырех операций. Первая операция, out, помещает кортеж в пространство кортежей. Например,

out("abc", 2, 5);

помещает кортеж («abc», 2, 5) в пространство кортежей. Полями операции out, как правило, являются константы, переменные или выражения, как в следующей операции:

out("matrix-1", i, j, 3.14);

которая помещает в пространство кортежей кортеж из четырех полей, второе и третье из которых определяются текущими значениями переменных i и j.

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

in("abc", 2, ?i);

Эта операция производит в пространстве кортежей поиск кортежа, содержащего строку «abc”, целое число 2 и третье поле, содержащее любое целое число (предполагая, что i — целое число). Если кортеж будет найден, он удаляется из пространства кортежей и переменной i присваивается значение третьего поля.

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

В операции in используется простой алгоритм подбора соответствия. Поля в примитиве in, называемые шаблоном (template), сравниваются (концептуально) с соответствующими полями каждого кортежа в пространстве кортежей. Подбор соответствия считается успешным, если соблюдаются следующие три условия:

1. У шаблона и кортежа одинаковое количество полей.

2. Типы соответствующих полей совпадают.

3. Каждая константа или переменная в шаблоне соответствует своему полю в кортеже.

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

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

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

out("semaphore S");

Для выполнения операции down он вызывает следующий примитив: in("semaphore S");

Состояние семафора S определяется количеством кортежей («semaphore S») в пространстве кортежей. Если таких кортежей нет, то любая попытка его получения будет заблокирована до тех пор, пока какой-нибудь другой процесс не предоставит такой кортеж.

Вдобавок к операциям out и in в системе Linda имеется примитив read, который аналогичен примитиву in, за исключением того, что он не удаляет кортеж из пространства кортежей. Есть также примитив eval, который проводит параллельное вычисление своих параметров и помещает получившийся кортеж в пространство кортежей. Этот механизм может быть использован для выполнения произвольных вычислений. Именно так в системе Linda создаются параллельные процессы.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Связующее программное обеспечение, основанное на взаимодействии:

  1. Программное обеспечение
  2. Богомазова Г.Н.. Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования, 2015
  3. Эд САЛЛИВАН. ВРЕМЯ — ДЕНЬГИ Создание команды разработчиков, программного обеспечения, 2001
  4. Том ДеМарко. Вальсируя с Медведями Управление рисками в проектах по разработке программного обеспечения, 2005
  5. Алистэр Коуберн. Люди как нелинейные и наиболее важные компоненты в создании программного обеспечения, 1999
  6. 3.7. Педагогическое проектирование — связующее звено педагогической теории и практики
  7. 7. Выводы, основанные на эмоциях
  8. НА ЧЕМ ОСНОВАН МЕТОД «КЛЮЧ».
  9. Технологии, основанные на содержании работ.
  10. НА ЧЕМ ОСНОВАН МЕТОД «КЛЮЧ».
  11. 2.4.1. Программный анализатор
  12. КОНЦЕПЦИЯ ПРОГРАММНО - РОЛЕВАЯ
  13. 2.4.1. Программный анализатор
  14. Перевод программных вопросов в анкетные
  15. § 2. Участие в гражданском договоре субъектов, основанных на государственной или муниципальной собственности
  16. Прием выводов и оценок, основанных на длительном наблюдении за группой.
  17. Глава 39 О ПРОГРАММНЫХ СВОЙСТВАХ ХУДОЖЕСТВЕННОЙ ЛИТЕРАТУРЫ
  18. § 4 Виды обязательств. – Обоюдные и односторонние. – Безмездные и возмездные. – Договоры, на риске основанные. – Ясные и неясные требования.