Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Хьюз Камерон. Параллельное и распределенное программирование на С++ - royallib.ru.doc
Скачиваний:
117
Добавлен:
11.03.2016
Размер:
1.97 Mб
Скачать

Доступ к стандартному входному потоку (stdin) и стандартному выходному потоку (stdout) со стороны pvm-задач

Среда PVM связывает воедино коллекцию ко м пьютеров и представляет их для програ мм ы в виде одной логической машины с нескольки м и процессора м и. При этом возникают следующие вопросы. Какой ко м пьютер в PVM-среде должен действовать как консоль? Где будут отображаться данные, выводи м ые PVM-задачей в объект cout типа ostream? Если PVM-задача попытается принять данные с клавиатуры, то с какой и м енно клавиатуры она должна их считывать? Выходной поток stdout для каждо г о сыновнего процесса перехватывается и отправляется назначенной PVM-задаче в виде PVM-сооб щ ения. Каждый сыновний процесс наслелует инфор м ацию, которая определяет, какая за д ача д олжна принять д анные, записанные в поток stdout, и как эти д анные д о л жны быть и д ентифицированы. Вхо д ной поток каж д ого сыновнего процесса связан с устройство м /dev/null. Все, что записано в устройство /dev/null, теряется. Если устройство /dev/null открыто д л я чтения, возвра щ ается эквивалент признака конца файла. Это означает, что ко д сыновних процессов не д олжен соз д аваться в расчете на считывание вхо д ных д анных из стан д артного потока stdin (cin) или назапись выходных д анных в стан д артный поток stdout (cout). При этом потоки stdin и stdout д ля ро д ительской задачи ве д ут себя вполне ожи д аемым образом. PVM-задачи для взаимодействия между собой должны использовать сооб щ ения. Это значит, что входные данные можно принимать из сооб щ ений, каналов, об щ ей (разделяемой) памяти, переменных среды, ар г ументов командной строки или файлов. И точно так же выходные данные можно записывать в сооб щ ения, каналы, общую память и файлы.

Получение доступа к стандартному выходному потоку (cout) из сыновней задачи

Поведение выходных данных, записанных в выходной поток stdout или по м ещенных в объект cout, отличается для различных порожденных PVM-задач. Именно родительский процесс решает, что в конце концов с ними должно произойти. Ко г да выходные данные из порожденно г о потомка поме щ аются в объект cout или cerr, они перехватываются демоном pvmd и упаковываются в стандартные PVM-сообщения, которые отправляются задаче с идентификатором TaskId, заданным родителем. Родительский процесс может связать пару (TaskId, Code) с объектами cout и cerr свое г о сыновне г о процесса. Это реализуется с помо щ ью функции pvm_setopt (), которая вызывается перед порождением потомка. Если значение TaskId равно 0, сооб щ ения попадут велу щ ему демону pvmd и будут записаны в е г о журнал ре г истрации ошибок. Порожденный процесс может установить значение переменной TaskId равным 0 или значению, унаследованному от е г о родителя, или собственному значению идентификатора TaskId. Это означает, что именно родительский процесс управляет тем, куда будет записано содержимое объектов cout или cerr. Порожденнал PVM-задача может назначить дру г ие PVM-задачи для получения данных, поме щ енных в объекты cout или cerr. Обычно записью любых важных данных в потоки stdout или stdin управляет порождаю щ ая задача, а всем остальным ведает веду щ ий демон pvmd.

Резюме

Библиотека PVM, отличаю щ аяся большой г ибкостью средств, по д держивает большинство моделей параллельно г о про г раммирования. К достоинствам PVM-среды относится ее способность работать с г етеро г енны м и коллекция м и ко м пьютеров, которые м огут состоять из процессоров, отличаю щ ихся характеристика м и быстродействия, размера м и и архитектурой. По м и м о аппаратной совмести м ости, библиотека PVM прекрасно работает со стандартной С++-библиотекой и систе м ной библиотекой UNIX/Linux. В результате объединения с воз м ожностя м и C++-шаблонов, средств объектно-ориентированно г о про г ра мм ирования и коллекций алгоритмов мо щ ь PVM-среды значительно возрастает. Шаблоны прекрасно вписываются в SPMD-про г ра м мирование. А для расширени я воз м ожностей PVM-среды при испо л ьзовании моде л ей MIMD (MPMD) можно успешно использовать контейнеры и алгоритмы. В г л аве 13 мы подробнее познакомимся со сред СТв + * PVM-биб л иотеки и покажем, как ее можно использовать для С++-реализации МИ тегии «классной доски». Эта стратегия — один из основных способов решения 0 ^ блем параллельного программирования.  П **°*