буферов отправки сооб щ ений, но в каждый момент времени активным может быть только один буфер (он называется активным буфером отправки сообщений). Каждая задача имеет активный буфер приема сооб щ ений. Обратите внимание (см. рис. 6.6) на то, что взаимодействие между PVM-задачами реально выполняется с использованием ТСР- сокетов. Функции pvm_send () делают доступ к сокетам прозрачным. Протраммист не получает доступа к функциям ТСРчюкетов напрямую. На рис. 6.6 также показано взаимодействие PVM-задач со своими демонами pvmd с помо щ ью TCP-сокетов и взаимодействие между самими демонами с помо щ ью UDP-сокетов. И снова-таки, обра щ ения к сокетам выполняются посредством PVM-функций. Програ мм ист не должен заниматься программированием сокетов на низком уровне. PVM-функции, которые используются в этой книге, делятся на четыре следующие категории:

• управление процессами;

• упаковка сооб щ ений и их отправка;

• распаковка сооб щ ений и их получение;

• управление буфером сооб щ ений.

Несмотря на су щ ествование дру г их кате г орий РУМч^ункций (например, инфор м ационные и сервисные функции или функции групповой обработки), реко м енлуе м обратить внимание на функции обработки сооб щ ений и функции управления процессами. Дру г ие же функции булут расс м отрены в контексте програ мм, в которых они используются.

Рис. 6.6. Базовая архи т ек т ура PVM-среды

Функции управления процессами

Библиотека PVM содержит шесть часто используе м ых функций.

Функция pvm_spawn () используется для создания новых PVM-задач. При вызове этой функции м ожно указать количество создавае м ых задач, м есто их создания и аргу м енты, передавае м ые каждой задаче, напри м ер:

pvm_spawn(«agent_filters'argv++,l,«host 3»,30,&Task3);

6.3. Базовые меха н измы PVM 235

Сикопсис

# inc lude ' pvm3 . h»

int pvm_spawn(char *task, char **argv, int flag,

char *location,int ntask,int *taskids); int pvmJcill(int taskid); int pvm_exit(void) ;

intpvn_addhosts(char **hosts,int nhosts,int *status); int pvm_delhosts(char **hosts,int nhosts,int *status); int pvm_halt(void) ;

Параметр task содержит имя программы, которую должна выполнить функция pvm_spawn (). Поскольку про г рамма, которая запускается посредством функции pvm_spawn (), является автоно м ной, ей мо г ут потребоваться аргументы командной строки. Поэтомудля их передачи используется пара м етр argv. Параметр location позволяет указать, на каком компьютере должна быть выполнена задача. Пара м етр taskids содержит либо идентификаторы порождае м ых задач, либо коды состояния, представляю щ ие любые ситуации сбоя, которые м огут возникнуть во вре м я порождения процесса. Параметр ntasks определяет, сколько экзе м п л яров задачи требуется создать. Функция pvm_kill() испо л ьзуется д л я анну л ирования задачи, указанной спо м о щ ью параметра taskid. С помо щ ью этой функции можно ан н у л ировать л юбую задачу, определенную пользователем в среде PVM, за иск л ючением вызываю щ ей. Эта функция отправляет си г нал SIGTERM PVM-задаче, по д лежа щ ей уничтожению. Функция pvm_exit () используетс я д л я выхо д а вызываю щ ей задачи из сре д ы PVM. Несмотр я на возможность выво д а за д ачи из сре д ы PVM, процесс, которому прина д лежит эта за д ача, может про д олжать выполнение. Слелует иметь в виду, что задача, выполн я ю щ ал вызовы РУМ^>ункций, может выполн я ть и д ру г ую работу, которая не св я зана со средой PVM. Функцию pvm_exit () должна вызывать Любая задача, которая больше не имеет отношения к специфике PVM-обработки. Функция pvm_addhosts () позволяет динамически вносить допол н ительные компьютеры в среду PVM. Обычно при вызове функции pvm_addhosts () передается список имен добавляемых компьютеров, например: int Status [3] ;

char *Hosts[ ] = {«porthos», «dartagnan»,«athos»}; pvm_addhosts («porthose», l,&Status) ;

//.. .

pvm_addhosts (Hosts, 3 , Status) ;

Параметр Hosts обычно содержит имена компьютеров (одно или несколько), перечисленных в файле .rhosts или .xpvm_hosts. Пара м етр nhost содержит количество компьютеров, подлежа щ их добавлению в среду PVM, а пара м етр status — значение, равное значению пара м етра nhosts при успешно м выполнении функции pvm_addhosts (). Ec*m при ее вызове не удалось добавить ни одно г о ко м пьютера, значение, возвра щ ае м ое функцией, будет м еньше числа 1. Если выполнение этой функции было лишь частично успешным, значение, возвра щ аемое функцией, будет равно количеству реально добавленных компьютеров. Функция pvm_delhosts () позволяет дина м ически извлечь из среды PVM один или несколько заданных ко м пьютеров. Пара м етр hosts содержит их список, а параметр nhosts — количество выводимых компьютеров, например: pvm _delhosts («dartagnan», 1) ;

При выполнении этой функции компьютер с именем dartagnan будет извлечен из среды PVM. Функции pvm_addhosts () и pvm_delhosts () можно вызывать во время выполнения приложения. Это позволяет программисту динамически изменять размеры среды PVM. Любая PVM-задача, выполняемал на компьютере, который удаляется из PVM-среды, будет аннулирована. Демоны, выполняю щ иеся

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату