My-library.info
Все категории

QNX/UNIX: Анатомия параллелизма - Цилюрик Олег Иванович

На электронном книжном портале my-library.info можно читать бесплатно книги онлайн без регистрации, в том числе QNX/UNIX: Анатомия параллелизма - Цилюрик Олег Иванович. Жанр: Интернет год 2004. В онлайн доступе вы получите полную версию книги с кратким содержанием для ознакомления, сможете читать аннотацию к книге (предисловие), увидеть рецензии тех, кто произведение уже прочитал и их экспертное мнение о прочитанном.
Кроме того, в библиотеке онлайн my-library.info вы найдете много новинок, которые заслуживают вашего внимания.

Название:
QNX/UNIX: Анатомия параллелизма
Дата добавления:
17 сентябрь 2020
Количество просмотров:
161
Читать онлайн
QNX/UNIX: Анатомия параллелизма - Цилюрик Олег Иванович

QNX/UNIX: Анатомия параллелизма - Цилюрик Олег Иванович краткое содержание

QNX/UNIX: Анатомия параллелизма - Цилюрик Олег Иванович - описание и краткое содержание, автор Цилюрик Олег Иванович, читайте бесплатно онлайн на сайте электронной библиотеки My-Library.Info

Книга адресована программистам, работающим в самых разнообразных ОС UNIX. Авторы предлагают шире взглянуть на возможности параллельной организации вычислительного процесса в традиционном программировании. Особый акцент делается на потоках (threads), а именно на тех возможностях и сложностях, которые были привнесены в технику параллельных вычислений этой относительно новой парадигмой программирования. На примерах реальных кодов показываются приемы и преимущества параллельной организации вычислительного процесса. Некоторые из результатов испытаний тестовых примеров будут большим сюрпризом даже для самых бывалых программистов. Тем не менее излагаемые техники вполне доступны и начинающим программистам: для изучения материала требуется базовое знание языка программирования C/C++ и некоторое понимание «устройства» современных многозадачных ОС UNIX.

В качестве «испытательной площадки» для тестовых фрагментов выбрана ОСРВ QNX, что позволило с единой точки зрения взглянуть как на специфические механизмы микроядерной архитектуры QNX, так и на универсальные механизмы POSIX. В этом качестве книга может быть интересна и тем, кто не использует (и не планирует никогда использовать) ОС QNX: программистам в Linux, FreeBSD, NetBSD, Solaris и других традиционных ОС UNIX.

QNX/UNIX: Анатомия параллелизма читать онлайн бесплатно

QNX/UNIX: Анатомия параллелизма - читать книгу онлайн бесплатно, автор Цилюрик Олег Иванович

 unsigned flags, void* handle) {

 char Buffer[MESSIZE_MAX];

 printf("получено приватное сообщение тип %x от"

  " "%s"n", code, IdLabelParse(code));

 printf("Вот это сообщение <<%s>>n",

  (char *)(ctp->msg) + 4);

 strcpy(Buffer, "Клиенту: да, я такой");

 MsgReply(ctp->rcvid, EOK, Buffer, sizeof(Buffer));

 return(0);

}

/********************************************************************

Функция пользовательской библиотеки, определяющая инвентаризационное

имя процесса по его инвентаризационной метке

********************************************************************/

char* IdLabelParse(int id) {

 struct IdLabel_t Inventory;

 int i = 0;

 while (IdLabel[i].id != id && i < ALLNUM_MYPROC) i++;

 if (i == ALLNUM_MYPROC) return Anonymous;

 else return(IdLabel[i].name);

}

Использование менеджера службы глобальных имен

Начиная с QNX версии 6.3 сервис глобальных имен, обеспечиваемый GNS-менеджером службы (утилитой

gns
), действует в сети. Используя этот сервис, нет необходимости организовывать программу как полноценный менеджер ресурсов, при этом приложение-сервер может объявлять свою службу, а приложения-клиенты могут отыскивать и использовать службы через QNET-сеть без знания таких частностей, как, например, где эта служба располагается и кто ее обеспечивает. Подробно о сервисе глобальных имен см. в [4].

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

gns
.

Серверный узел:

# gns -s

Клиентский узел (узлы):

# gns -с

В результате на узлах, где запущены службы глобальных имен, появятся имена

/dev/name/global
и
/dev/name/local
. Каждый узел, на котором запущен gns-клиент или сервер, в одной и той же сети имеет один и тот же вид пространства имен на
/dev/name/global
. Каждый узел имеет локальное пространство имен
/dev/name/local
, являющееся локальным для данной машины и отличающееся от локального пространства имен на другой машине. (Кстати, помимо имен
global
и
local
под
/dev/name/
появится еще имя
gns_server
или
gns_local
— имя, под которым регистрируется сам GNS-менеджер.)

Существует несколько функций API, относящихся к службе глобальных имен:

name_attach()
,
name_open()
и
name_close()
. Программисты, знакомые с QNX 4, сразу «узнают» в них аналоги известных им функций
qnx_name_attach()
,
qnx_name_open()
и
qnx_name_close()
. Приложения используют эти функции для объявления имени службы, связи со службой и отсоединения от службы.

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

if (!(NameServer = name_attach(NULL, "MyService", NAME_FLAG_ATTACH_GLOBAL)))

 return EXIT_FAILURE;

Флаг

NAME_FLAG_ATTACH_GLOBAL
указывает, что приложение-сервер объявляет свое имя глобально — в сети. Приложение, которое может подсоединить службу глобально, должно иметь право доступа
root
. После выполнения этого вызова в директории
/dev/name/global
появится подсоединенное имя
MyService
(если бы третий аргумент вызова был установлен в ноль, это имя оказалось бы подсоединенным к
/dev/name/local
и было бы доступно только локально).

Регистрируя имя в пространстве глобальных имен, функция

name_attach()
создает канал, идентификатор которого она возвращает в составе структуры
NameServer
. Отметим, что этот канал создается с определенными установленными флагами, задающими соответствующие действия системе:

• 

_NTO_CHF_UNBLOCK
— доставлять владельцу канала импульс с кодом
_PULSE_CODE_UNBLOCK
и значением
rcvid
каждый раз, когда Reply-блокированный клиент попытается разблокироваться (скажем, по получению сигнала или по таймеру);

• 

_NTO_CHF_DISCONNECT
— доставлять владельцу канала импульс с кодом
_PULSE_CODE_DISCONNECT
, когда от процесса отсоединились все установленные соединения клиента (клиент выполнил
name_close()
на каждый свой
name_open()
к имени сервера либо вообще умер);

• 

_NTO_CHF_COID_DISCONNECT
— доставлять владельцу канала импульс с кодом
_PULSE_CODE_COIDDEATH
и значением
coid
(идентификатора соединения) для каждого соединения по этому каналу, когда канал закрывается.

Теперь, после создания канала, сервер может становиться на прием сообщений от клиентов:

rcvid = MsgReceive(NameServer->chid, &MsgBuf, sizeof MsgBuf);

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

if (MsgBuf.hdr_type >= _IO_BASE && Buffer.hdr.type <= _IO_MAX) {


Цилюрик Олег Иванович читать все книги автора по порядку

Цилюрик Олег Иванович - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки My-Library.Info.


QNX/UNIX: Анатомия параллелизма отзывы

Отзывы читателей о книге QNX/UNIX: Анатомия параллелизма, автор: Цилюрик Олег Иванович. Читайте комментарии и мнения людей о произведении.

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.