Сообщения
Сообщения
В подсистеме STREAMS все данные передаются в виде сообщений. С помощью сообщений передаются данные от приложений к драйверу и обратно. Сообщения используются для взаимодействия модулей между собой. Модули могут также генерировать сообщения для уведомления прикладного процесса или друг друга о возникновении ошибок или непредвиденных ситуаций. Таким образом, сообщения являются единственным способом передачи информации между различными компонентами потока и потому занимают ключевое место в подсистеме STREAMS.
Сообщение описывается двумя структурами данных: заголовком сообщения msgb (message block) и заголовком блока данных datab (data block). Обе эти структуры адресуют буфер данных, где находятся фактические данные сообщения.
Заголовок сообщения msgb имеет следующие поля:
b_next, b_prev Используются для формирования связанного списка сообщений и соответственно адресуют следующее и предыдущее сообщение очереди b_cont Указывает на продолжение сообщения и используется для связывания различных частей одного сообщения b_datap Указатель на заголовок блока данных b_rptr, b_wptr Указатели, определяющие расположение (начало и конец) данных в буфере данных b_cont Содержит ссылку на следующую структуру msgbЗаголовок блока данных datab используется для описания буфера и имеет следующие поля:
db_base Адрес начала буфера db_lim Адрес ячейки памяти, следующей непосредственно за буфером. Таким образом, размер буфера равен db_lim - db_base db_type Тип сообщения db_ref Число заголовков сообщения, адресующих этот блокИспользование этих структур данных для формирования очереди сообщений и сообщений, состоящих из нескольких частей, показано на рис. 5.17.
Рис. 5.17. Сообщения STREAMS
Поле b_cont заголовка сообщения позволяет объединять несколько блоков данных в одно сообщение. Эта возможность особенно полезна при использовании подсистемы STREAMS для реализации сетевых протоколов. Сетевые протоколы имеют уровневую организацию. По мере передачи данных вниз по потоку, каждый последующий модуль (реализующий протокол определенного уровня) добавляет собственную управляющую информацию. Поскольку протоколы верхнего уровня не имеют представления об архитектуре нижних, невозможно заранее зарезервировать необходимую память под сообщение. Вместо того чтобы изменять размер буфера данных сообщения, модуль может добавлять управляющую информацию в виде отдельных частей, связывая их с помощью указателя b_cont. Этот процесс, получивший название инкапсуляции данных, графически представлен на рис. 5.18.
Рис. 5.18. Инкапсуляция данных с использованием составных сообщений
Поле db_ref заголовка блока данных позволяет нескольким заголовкам сообщения совместно использовать один и тот же буфер. При этом происходит виртуальное копирование сообщения, каждая копия которого может обрабатываться отдельно. Как правило, такой буфер используется совместно только для чтения, хотя сама подсистема STREAMS не накладывает никаких ограничений, возлагая всю ответственность за обработку данных на модули потока.
В качестве примера виртуального копирования можно привести реализацию протокола TCP. Протокол TCP является надежным, т.е. данные считаются доставленными только после того, как от получателя поступит подтверждение. Это означает, что протокол должен хранить копии всех отправленных, но не подтвержденных сообщений. Вместо неэффективного физического копирования, производится виртуальное дублирование сообщения, одна копия которого затем передается вниз по потоку (модулю IP), а вторая сохраняется до получения подтверждения. После отправления сообщения драйвером сетевого адаптера, одна из копий будет уничтожена, что выразится в уменьшении поля db_ref заголовка блока данных, но сам блок данных сохранится, поскольку значение счетчика по-прежнему будет превышать 0. И только после получения подтверждения db_ref станет равным 0, и соответствующий буфер будет освобожден.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
8.2. Сообщения
8.2. Сообщения Как было отмечено выше, цель взаимодействия в контексте языка UML заключается в том, чтобы специфицировать коммуникацию между множеством взаимодействующих объектов. Каждое взаимодействие описывается совокупностью сообщений, которыми участвующие в нем
9.4. Сообщения
9.4. Сообщения Сообщения, как элементы языка LJML, уже рассматривались ранее при изучении диаграммы последовательности (см. главу 8). При построении диаграммы кооперации они имеют некоторые дополнительные семантические особенности. Сообщение на диаграмме кооперации
Сообщения
Сообщения В подсистеме STREAMS все данные передаются в виде сообщений. С помощью сообщений передаются данные от приложений к драйверу и обратно. Сообщения используются для взаимодействия модулей между собой. Модули могут также генерировать сообщения для уведомления
11.2.1 Сообщения
11.2.1 Сообщения С сообщениями работают четыре системных функции: msgget, которая возвращает (и в некоторых случаях создает) дескриптор сообщения, определяющий очередь сообщений и используемый другими системными функциями, msgctl, которая устанавливает и возвращает связанные с
8.13.9 Сообщения Hello
8.13.9 Сообщения Hello Каждый маршрутизатор OSPF конфигурируется с уникальным идентификатором, использующимся в сообщениях. Обычно в качестве идентификатора применяют наименьшую часть IP-адреса этого маршрутизатора.Маршрутизатор периодически отправляет в многоадресной
15.8 Сообщения RPC
15.8 Сообщения RPC Клиент RPC посылает запросы серверу и получает ответы на них в специальных сообщениях. Что должны содержать эти сообщения, чтобы клиент и сервер поняли друг друга?Необходим идентификатор транзакции, определяющий соответствие между запросом и ответом.
3.1. Мгновенные сообщения
3.1. Мгновенные сообщения Мгновенные сообщения – это сервис, который позволяет обмениваться текстовыми сообщениями ограниченной длины с любым человеком, подключенным в данный момент к Интернету.Сразу же возникает ассоциация с SMS-сообщениями. Эти два сервиса очень
25.2. Сообщения
25.2. Сообщения Начнем с самого простого — отображения небольших текстовых сообщений. Для этой цели можно использовать два виджита — Infobox или Msgbox. Первый отличается от второго тем, что не ждет подтверждения пользователя о прочтении, а закрывается через некоторое время.
Сообщения
Сообщения Слово «Статусы» мы уже кучу раз произнесли, да и про сообщения обмолвились. Пора разобраться с темой, даром что строчка Сообщения контактовском меню слева расположены ниже, чем Аудиозаписи и Видео. Но этим красавцам свой черед, а сейчас – о главном. Начнем с
Сообщения
Сообщения Пользователи Facebook могут обмениваться несколькими типами сообщения.Первый и самый распространенный – комментарий к публикациям на Стене: эту возможность вы получите, попав в список Друзей данного пользователя. Оставить комментарий можно с помощью ссылки
Личные сообщения
Личные сообщения На первом этапе мы занимались продвижением вручную, писали людям личные сообщения. Текст сообщения может быть разным. Мы тестировали несколько вариантов текстов и сейчас еще продолжаем тестировать.Например, текст может быть примерно следующий: «Добрый
Сообщения
Сообщения WM_TIMER Сообщение WM_TIMER отправляется в очередь сообщений установившего таймер потока или соответствующей функции обратного вызова TimerProc по истечении интервала, заданного при установке таймера функцией SetTimer .WM_TIMER wTimerID = wParam ; // идентификатор таймера tmprc = ( TIMERPROC *)
SMS-сообщения
SMS-сообщения Отправка SMS-сообщения с помощью новых возможностей тоже очень и очень проста. Эти сообщения весьма популярны у владельцев мобильных телефонов. Раньше для отсылки и приема SMSприходилось использовать неуправляемый код, очень сложный для восприятия неопытным
Приложение 3 Сообщения
Приложение 3 Сообщения В таблицах данного приложения приводятся обозначения констант, описания сообщений, а также назначение параметров wParam и lParam сообщений. Часто параметры wParam или 1 Par am являются указателями на структуры. Для экономии места объявления этих структур не
У6.4 Сообщения
У6.4 Сообщения Рассмотрите знакомую вам систему электронной почты. Определите в духе этой лекции абстрактный тип данных ПОЧТОВОЕ_СООБЩЕНИЕ. Включите в него не только функции-запросы, но и команды и