автореферат диссертации по информатике, вычислительной технике и управлению, 05.13.11, диссертация на тему:Комплекс распределенного программирования C. dis

кандидата физико-математических наук
Васильев, Сергей Андреевич
город
Москва
год
1994
специальность ВАК РФ
05.13.11
Автореферат по информатике, вычислительной технике и управлению на тему «Комплекс распределенного программирования C. dis»

Автореферат диссертации по теме "Комплекс распределенного программирования C. dis"

РОССИЙСКАЯ АКАДЕМИЯ НАУК ИНСТИТУТ ПРИКЛАДНОЙ МАТЕМАТИКИ им. М.В. Келдыша

На правах рукописи. УДК: 681.3

Васильев Сергей Андреевич

Комплекс распределенного программирования С.сИэ

Специальность 05.13.11 - математическое и программное обеспечение вычислительных машин, комплексов, систем и сетей.

Автореферат

диссертации на соискание ученой степени кандидата физико-математических наук

Москва - 1994

Работа выполнена в Институте прикладной математики имени М.В. Келдыша Российской Академии наук.

Научные руководители - профессор, доктор физико-математических наук Э.Л. Аким - кандидат физико-математических наук А.И. Илюшин

Официальные оппоненты - доктор технических наук

' С.Д. Кузнецов

- кандидат физико-математических наук И.Б. Задыхайло

Ведущая организация - НИИСИ РАН

Защита диссертации состоится " " _199 г. в часов

на заседании Специализированного совета Д 002.40.01 при Институте прикладной математики имени М.В.Келдыша РАН (125047, г. Москва, Миусская пл., 4)

С диссертацией можно ознакомиться в библиотеке Института.

Автореферат разослан " " _ 1994 г.

Ученый секретарь специализированного совета кандидат физ.-мат. наук ——/Т. А. Полиловг

ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ

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

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

Большие возможности объектно-ориентированного подхода, подтверждением плодотворности которых служит широкое распространение соответствующих идей и методов в современных языках программирования, операционных системах, базах данных и т.п., желательно использовать и при построении параллельных и распределенных систем, что с учетом расширения производства и применения многопроцессорной вычислительной техники и распространения сетей ЭВМ становится все более актуальным.

Иллюстрацией сказанному может служить упоминание таких параллельных объектно-ориентированных языков программирования, как DOWL, ABCL/1, ConcurrentSmalltalk, Concurrent С++, C00L++ и множества других. Из распределенных объектно-ориентированных ОС стоит упомянуть Hydra, Argus, Clouds, COOL, а также некоторые другие проекты, сходные по назначению: AppWare, OLE, Tallgent и г. д.

Потребности в объектно-ориентированных технологиях в гетерогенных вычислительных средах привели к созданию в 1990 году консорциума OMG (Object Management Group), Одним из результатов его деятельности явилась выработка стандарта C0RBA, вводящего в практику новый программный элемент ORB (Object Request Broker) -посредник объектных запросов, через который объекты взаимодействуют друг с-другом. При этом они могут не заботиться о местоположении партнера. Это отслеживают программы ORB.

Разработанный автором комплекс С.dis, включающий в себя реализованное с помощью стандартного препроцессора расширение языка Си (С++), библиотеки поддержки параллельного и распределенного программирования, а также сетевое программное обеспечение.

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

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

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

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

Цель работы. С помощью описываемых средств комплекса С.dis предполагается решение следующих задач:

- реальное распараллеливание вычислений по разным ЭВМ или по различным процессорам в многопроцессорных ЭВМ с целью повышения надежности и ускорения вычислений;

- введение элементов систем реального времени, под которым понимается гарантированное получение и выдача в линии связи результатов вычислений в заданное время;

-• построение сетевого программного обеспечения, которое позволяло бы распределенной системе продолжить свою работу при выходе из строя отдельных узлов сети или связей мевду ними;

- автоматическое восстановление в необходимых случаях прежнего состояния распределенной системы при восстановлении работоспособности отдельных узлов и/или связей меаду ними;

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

Методы исследований. Программно-математические средства комплекса С.dis разрабатываются на основе анализа требований к автоматизированным многомашинным комплексам баллистического центра. В работе используются средства и методы теории программирования. математической логики, объектно-ориентированного анализа и проектирования.

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

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

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

Практическая ценность. Полученные автором результаты использовались для разработки в среде ОС Xenix двух распределенных прикладных систем из состава информационно - управляющего обеспечения баллистического центра ИПМ:

- приема траектории измерений в темпе их поступления;

- выдачи расчетных форм в реальном времени в Центр управления полетами.

Указанные подсистемы находятся в эксплуатации с марта 1992

года.

Апробация. Основные результаты диссертации докладывались на X Всесоюзной школе-семинаре по вычислительным сетям (Тбилиси, 1985 г.); на IV Всесоюзной конференции "Вычислительные сети коммутации пакетов" (Рига, 1985); на научных семинарах в ИПМ им. М. В. Келдыша.

Публикации. Основные результаты по теме диссертации опубликованы в работах [1-5].

Объем и структура работы. Диссертация состоит из введения, четырех глав, заключения и списка литературы. Содержит 100 страниц основного текста. Список литературы включает 34 названия.

СОДЕРЖАНИЕ РАБОТЫ.

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

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

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

В более общем случае отдельно оформляются заголовки кластеров. процедур и обращения (вызовы) из них к требующим сетевогс доступа, но реализованным ранее для локального использование подсистемам или библиотечным функциям, в том числе написанным \ на других языках программирования.

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

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

Само сетевое обеспечение также строится в виде совокупное™ объектов-исполнителей операций, реализующих протокол УДВ.

Реализацией типа объекта-исполнителя является кластер, е операции объекта реализуются процедурами кластера. При этом дш

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

/« — файл х----»/

extern lnt (»work)О; extern lnt count;

/* указатель на функцию и счетчик устанавливаются в файле 3 */

.lnt funlünt 1) (return((*work)(1)):) lnt fun2(char *str) { (vold)prlntf(str); return(++ccunt); )

/*----файл 2----*/

lnt funl(); lnt fun2(); lnt l,pld=0;

l=fun2("Hello.World");

switch (pld=fork()) case 0: funl(l);

return 0; default: : ) ...

{

/« — ЭВМ1 — */

#lnclude <odp.h> CLUMEM

serv(work) sr; lnt count: CLU(example)

EXP0(procl, "0PER1". 10,200) EXP0(proc2,"0PER2", 10,100) TUNER (NIL) /* раздел настройки */ PCL(SEARCH seq_,serv_(0bj->sr RES.

"TST0P1") strlngC'tstob ЭВМЗ"))

CLU_E

IHPO(procl,sr, work)

PR0C(proc2. IN (chars, str) OUTdnt, 1)) (vold)prlntf(str);ObJ->count++; RESLTd. Int_(0bj->count)) PR0C_E

----3BM2---- */

lnt uldo=0. 1; serv(opl Z op2) sr;

PCL(CREATE seq_,serv_(sr RES, "0PER2 0PER1") strlng("example") strlngC'any ЭВМ1") lnt_(uldo) ) 0CL(sr,opl seq_,strlng("Hello,World")

lnt_(l RES)) 0CL(sr,op2 prl_. lnt_(l))

В демонстрируемом примере из ЭВМ2 удаленно создается объект с произвольным именем в ЭВМ1 на базе кластера example и затем делается вызов (последовательный и параллельный) операций 0PER2 и 0PER1 созданного объекта. Отметим, что вызов операции оPERI на самом деле приведет к выполнению операции TST0P1 объекта tstob е ЭВМЗ, ссылка на который была получена из ЭВМЗ в разделе настройки при создании экземпляра объекта из кластера example.

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

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

В этой же главе помимо инструкции вызова процедуры описываются инструкции вызова операции 0CLO и вызова входа - ECLO. Для всех перечисленных сортов вызовов обязательно указание одного из видов вызова:

seq_, seq_ex(hmh_6flOKa). prl_, азу_(имя_р-структуры). - соответственно последовательного, последовательного с обработко! исключений (дополнительно указывается имя блока обработки исключений). параллельного, асинхронного (с указанием имени специальной структуры из представления объекта для последующей синхронизации с событием завершения такого вызова).

Во второй главе описываются используемые в С. dis средстве синхронизации, названные автором Охраняемые Критические Облает! (ОКО), где роль предохранителей играют логические условия, в которых всегда должны присутствовать специально предназначенные для этих целей структуры с именами типов: relation, process, entry. Эти структуры (допускаются их массивы) описываются в заголовке кластера и могут быть использованы для синхронизацм только тех процессов, которые взаимодействуют в рамках отдельного экземпляра объекта.

Конструкция ОКО в теле процедуры имеет вид:

IH(условие)

[последовательность_инструкций] { ОН(услоЕие)

[последовательность_инструкций] } { Ш(имена^исключений)

[послед6вательность_инструкций] }

1Н_Е.

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

Проверка условий в альтернативах ОКО заключается в проверке истинности соответствующего логического выражения. Если получили истинное значение, то альтернатива считается открытой и происходит передача управления на соответствующий фрагмент процедуры. Если вычисление логических выражений не дало истины ни для какой альтернативы, то процесс переходит в состояние ожидания. Последовательность инструкций после альтернатив с условиями может отсутствовать. Это просто означает, что процессу для своего продолжения достаточно выполнения указанных условий. В последовательность инструкций может входить и новые синхроконс-трукции 1Н()...1Н_Е. т. е. допускается вложение ОКО.

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

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

Имеются две логические функции, связанные с отработкой заданного интервала времени Т:

after„(T) - истинно, если прошло Т секунд от момента, когда впервые вышли на проверку этого условия;

before_(T) - истинно, пока еще не истекли Т секунд от момента 1-й проверки этого условия.

Для структуры X любого типа определяются логические функции: lsfree_(X), lsbusy_(X). а также блок функций eq_(X.Y). ne_(X.Y), gt_(X.Y). le_(X,Y). lt_(X, Y), ge_(X,Y). где вторым параметром Y указывается целое типа long. Entry-структуры призваны для организации взаимодействия типа рандеву и используютоя в качестве точки входа в конструкциях приема вызова входа вида:

RECV(имя_структуры, формальные_параметры)... RECV_E. Здесь заголовок конструкции RECVO аналогичен заголовку процедуры PROCO, только вместо имени процедуры указывается имя entry-структуры. Имеется более гибкая форма приема вызова входа, состоящая из инструкции RECEIVE(имя_структуры. имя_блока) и соответствующего блока обработки, позволяющая для разных входов использовать один и тот же блок обработки.

Для структуры типа entry определены следующие логические функции:

accept.(X) - истинно, если структура X доступна и имеется по крайней мере одно необработанное событие обращения по этому входу:

unaccept_(X) - дает значение истины, когда при доступности структуры X необработанных событий обращения нет;

ready_(X) - истинно, когда структура X доступна и принимающая сторона готова принять обращение, то есть находится в ожидании выполнения одной из инструкций RECV(X...) или RECEIVE(X...);

unready_(X) - истинно, если структура X доступна и на принимающей стороне готовности нет.

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

Основная инструкция ожидания такого события имеет вид: AWAIT (имя_р-структурн видлриема).

Для >. «роструктуры X типа process определены следующие логические фун/ции:

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

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

На протяжении всей главы приводятся решения, в разных стилях. классических задач синхронизации: "взаимного исключения", "производители-потребители", "читатели-писатели".

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

- совместного использования ресурсов:

- глобального тупика:

- "отталкивания" или локального тупика.

#deflne It fork[number-1] /* левая вилка */

«define rt fork[(number) % 5] /* правая вилка */ /*— заголовок кластера —«/ CLUMEM relation fork[5]; CLU(phl)

TUNER (NIL) mt 1: for(l-l; l<-5; 1++) { PCL(phll prl_.lnt_(l)) }

CLILE

/*— модель поведения философа —*/ PROC(phi1,IN(lnt,number)) for (;:) { IH( lsfree_(lt) AND lsfree_(rt)) /* обед */

IH_E

/« прогулка и размышления »/} PR0C_E

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

В конце главы проводится сравнение с аналогичными средствами языка Ада.

Механизм ОКО обладает теми же основными достоинствами, что и средства синхронизации языка Ада. В частности, условный вызов входа в нашем случае реализуется с помощью предикатов ready_() и unready_(). Условное или временное ожидание приема вполне выражается у нас с помощью предикатов вида accept_(), unaccept_(), after_(). Вместо оператора выбора WHEN языка Ада в предохранителях ОКО с успехом могут быть использованы выражения, включающие в себя любые комбинации логических функций, определенных на всех указанных выше типах синхроструктур.

Вместе с тем. в механизме ОКО отсутствуют или в значительной мере компенсированы многие недостатки, присущие механизму рандеву.

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

Ассиметрия в организации межпроцессных взаимодействий на прикладном уровне отсутствует, в силу принятой концепции построения систем на базе УДВ, а взаимодействие процессов внутри объектов всегда идет через разделяемые структуры, равнодоступные из любых процессов. При этом никаких проблем при создании библиотек стандартных объектов не возникает.

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

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

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

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

В главе 3 описыватся разработанный автором нетрадиционный подход к построению сетевого программного обеспечения (СПО).

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

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

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

Опираясь на идеи и методы объектно-ориентированной архитектуры. что впервые в нашей стране было применено к созданию сетевого обеспечения коллективом разработчиков Института прикладной математики при реализации сети СЕКОП. автор этих строк предложил рекурсивное использование удаленного вызова операций для построения полномасштабного СПО на основе некоторого его подмножества - базисного сетевого обеспечения удаленного вызова (СОУВ), которое всегда используется в простейших случаях взаимодействия между двумя соседними ЭВМ.

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

включая транспортировку параметров вызова в ЭВМ. содержащую исполнитель (сервер) вызываемой операции. И возврат оттуда заказчику (клиенту) параметров-результатов или сообщения об ошибке.

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

В этом случае базисное СОУВ должно быть дополнено объекта -фрагментатором. Образ ЭВМ сервера, перехватив управление (е рамках удаленного вызова 1 на рисунке), формирует пакет, определяет его размер и при превышении некоторого оптимального размерг вызывает вместо операции отправки пакета объекта КАНАЛ соответствующую операцию фрагментатора. передавая на вход два параметра:

- оптимальный размер пакета;

- исходный пакет, содержащий упакованный вызов.

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

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

Если при возврате результатов удаленного вызова размер пакета окончания превысит допустимое значение, то роли обьек-тов-фрагментаторов этой пары ЭВМ поменяются местами. Бывши« заказчиком фрагментатор станет исполнителем, исполнитель - заказчиком. Таким образом в описанном случае сама пара фрагмента-торов. используемая в СПО, выступает как распределенная система прикладного уровня, для функционирования которой уже достаточно базисного СОУЗ. Заметим, что сам объект КАНАЛ, получив пакет для

отправки, также может обратиться к Фрагментатору в случае необходимости.

ЭВМ 1

клиент

Фраг-мен-

I

татор

Т-

образ ЭВМ 2

КАКАЛ

}

I

1 1

---ц

I I

---I

2 I

I I 1 I J

линия 1

связи 1

ЭВМ

образ ЭВМ 1

Г

КАНАЛ

сервер

фраг-j мен--I татор

I-

Реализация фрагментации вызова.

Далее описывается, как с помощью рекурсивного обращения к базисному СОУВ реализуются удаленные вызовы, требующие транспортировки через несколько ЭВМ.

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

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

Прежде всего имеется возможность при наличии дублирующих

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

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

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

Пример.

serv(rd) bs; /* описание ссылки на исполнитель */ char msg[80]; /* строка для результата »/

/* получение ссылки на объект */

(1) PCL(SEARCH seq_. serv_(bs RES, "READ"),

chars_("base Ml M2 M3")) /* использование полученной ссылки для вызова ♦/

(2) 0CL(bs, rd seq_. chars_(msg RES, 80))

В приведенном примере в строке (1) мы получаем как результат выполнения родительской процедуры SEARCH ссылку на стандартный объект с именем base и операцией READ, который находится noi фиксированным номером во всех трех ЭВМ с именами Ml, М2, МЗ. Причем хотя бы в одной из ЭВМ искомый объект должен быть найден.

В строке (2) эта ссылка на исполнитель используется для получения текстовой строки-результата. При вызове заказанной one-

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

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

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

Далее в этой главе описываются некоторые возможности СПО по сохранению в долговременной памяти удаленных вызовов в случае недоступности адресата по сети ЭВМ на данный момент времени. Отмечается. что реализованные в С. dis возможности по тиражированию вызовов, их сохранению в случае необходимости с последующими попытками повторения , напрямую соответствуют разработкам в области распределенных баз данных, связанным с технологией репликации данных.

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

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

В конце главы упоминаются встроенные средства отладки и контроля, специфичные для описываемой среды С. dis.

В заключении сформулированы основные результаты, полученные автором.

ОСНОВНЫЕ РЕЗУЛЬТАТЫ.

1. На основании исследования организации распределенных вычислений разработан комплекс С.dis, расширяющий распределенными объектными средствами возможности языка Си и позволяющий программировать распределенные системы в ЛВС примерно с такими же трудозатратами, как и в локальном случае.

2. Разработаны и реализованы в составе комплекса С.dis средства параллельного и асинхронного программирования, позволяющие напрямую использовать возможности реальной параллельной работы ЭВМ в ЛВС.

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

4. На основе объектно-ориентированного подхода выдвинута идея о рекурсивном использовании удаленного вызова при построении сетевого программного обеспечения (СПО) и осуществлена ее реализация в операционных средах Xenix и Unix.

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

Автор выражает глубокую благодарность научному руководителю Акиму э.Л. за постоянную заботу и внимание к исследованиям автора.

Автор признателен своим коллегам Тучину А.Г., Штаркману В. С. за полезную и конструктивную критику работы. Баталину П.Е. за разработку и включение в ОС Xenix/Unix драйверов адаптеров сети РУСЛАН и квалифицированную помощь при разработке и отладке комплекса С.dis, Лапинскому A.B.. Ладыгину B.C.. Хасанову Р.И.,

чьими советами и рекомендациями автор постоянно пользовался, а также Гороховой A.A.. Киселевой И.П.. Белкиной С.Ю., на хрупкие плечи которых легла тяжесть опытной эксплуатации разработанных средств.

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

По теме диссертации опубликованы следующие работы:

1. Аким Э. Л.. Васильев С. А., Тучин А. Г. Организация управления распределенными вычислениями в автоматизированной информационно-вычислительной системе баллистического обеспечения полетов космических аппаратов // X Всесоюз. шк.-семинар по выч. сетям. Тез. докладов. Ч. 3., Тбилиси. 1985. С. 335-338.

2. Васильев С.А.. Ерохов А.Н., Илюшин А.И. Построение сетевого программного обеспечения на основе базисного вызова операций. // Вычислительные сети коммутации пакетов. Тезисы докладов 4 всесоюзной конференции КОМПАК-85. Ч.2, Рига. 1985. С. 62-66.

3. Васильев С. А. и др. Объектно-ориентированные средства для программирования распределенных систем // Метод, материалы и документация по пакетам прикладных программ. Вып. 31. ч. 1. М. :МЦНТИ. 1986. С. 30-57.

4. Аким Э. Л., Васильев С. А., Тучин А. Г., Шатаев В. В. Опыт разработки информационно-управляющего обеспечения баллистического центра. Препринт Института прикладной математики им.М.В. Келдыша РАН, N 103, М. 1990Г., 24 С.

5. Аким Э. Л.. Васильев С. А.. Тучин А. Г., Шатаев В. В. Опыт проектирования и реализации информационно-управляющих распределенных систем. // Программирование прикладных систем. М.: Наука, 1992. С. 5-18.

/