ПВМ   ОКМ   ДМ   экономическая информатика   4GL   Теория и практика обработки информации

Параллельная виртуальная машина, PVM

Буферы сообщений ПВМ

int bufid = pvm_initsend( int encoding)

call pvmfinitsend( encodingб bufid)

Если пользователь применяет только один буфер передачи (а это типовой случай), то возникает потребность только в одной "буферной" подпрограмме pvm_initsend(). Она вызывается для упаковки нового сообщения в буфер. Подпрограмма
pvm_initsend очищает буфер передачи и пересоздает его для упаковки нового сообщения. Схема кодирования, используемая при упаковке, устанавливается с помощью encoding. Новый идентификатор буфера возвращается в bufid.

Опция encoding может иметь следующие значения:

PvmDataDefault.
По умолчанию используется XDR-кодирование - по той причине, что ПВМ не может знать, собирается ли пользователь добавить гетерогенную машину перед отправкой некоторого сообщения. Если пользователь знает о том, что очередное сообщение будет послано машине, которая понимает оригинальный формат, то он может воспользоваться кодированием PvmDataRaw и сэкономить вычислительные затраты.
PvmDataRaw.
Не выполняется никакого кодирования. Сообщения посылаются в своем исходном формате. Если принимающий процесс не сможет прочитать данный формат, он вернет ошибку в процессе распаковки.
PvmDataInPlace.
Данные остаются на своем месте с целью уменьшения затрат на кодирование. Буфер содержит только размеры элементов для передачи и указатели на них. Когда pvm_send() вызывается, элементы копируются прямо из пользовательской памяти. Данная опция позволяет снизить число копирований сообщения, а значит и затраты, в соответствие требованию пользователя не модифицировать элементы в интервале между моментом упаковки и моментом передачи. Дополнительным применением опции может быть: вызов одноразовой упаковки-модификации и последующая многократная передача определенных элементов (или массивов) по ходу работы приложения. Примеров может быть передача пограничных регионов в дискретной реализации PDE.
Следующие подпрограммы работы с буферами сообщений нужно только в тех ситуациях, когда пользователь желает на уровне приложения управлять несколькими буферами сообщений. Большое количество буферов сообщений вовсе не требуется для большинства случаев обмена сообщениями между процессами. В ПВМ версии 3, в любой текущий момент времени, для каждого процесса существуют только один "активный" буфер передачи и только один "активный" буфер приема. Разработчик может создать произвольное число буферов сообщений и переключаться между ними с целью упаковки и передачи данных. Подпрограммы упаковки, передачи, приема и распаковки затрагивают только "активные" буферы.

int bufid = pvm_mkbuf( int encoding)

call pvmfmkbuf( encodingб bufid)

Подпрограммой pvm_mkbuf создается новый пустой буфер передачи и указывается кодировочный метод для упаковки сообщений. Она возвращает идентификатор буфера bufid.

int info = pvm_freebuf( int bufid)

call pvmffreebuf(bufidб info)

Подпрограммой pvm_freebuf() возвращается в свободное пользование буфер с идентификатором bufid. Это должно делаться после того, как сообщение уже послано и больше не нужно. Если требуется, вызывайте pvm_mkbuf(), чтобы вновь создать буфер для нового сообщения. Ни один из данных запросов не нужен, если применяется pvm_initsend(), реализует эти функции за пользователя.

int bufid = pvm_getsbuf( void)

call pvmfgetsbuf( bufid)

int bufid = pvm_getrbuf( void)

call pvmfgetrbuf( bufid)

pvm_getsbuf() возвращает идентификатор активного буфера передачи. pvm_getrbuf() возвращает идентификатор активного буфера приема.

Этими подпрограммами буфер с bufid устанавливается активным буфером передачи (или приема); состояние предыдущего активного буфера сохраняется, а его идентификатор возвращается в oldbuf.

Если при pvm_setsbuf() pvm_setrbuf() bufid установлен в 0, то имеющийся буфер сохраняется, но нового буфера не устанавливается. Такая возможность может быть использована для сохранения текущего состояния сообщений приложения - чтобы математическая библиотека или подсистема графического интерфейса, которые так же используют сообщения ПВМ, не повредили содержимое буферов приложения. После того, как прочие подсистемы отработали, буферы сообщения могут быть вновь активированы.

Сообщения можно передать и без их перепаковки применением подпрограмм, работающих с буферами сообщений. Это иллюстрируется следующим фрагментом:

bufid = pvm_recv (src, tag);

oldid = pvm_setsbuf (bufid);

info = pvm_send (dst, tag);

info = pvm_freebuf (oldid);

ПВМ   ОКМ   ДМ   экономическая информатика   4GL   Теория и практика обработки информации

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

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution