В качестве примера виртуального копирования можно привести реализацию протокола TCP. Протокол TCP является надежным, т.е. данные считаются доставленными только после того, как от получателя поступит подтверждение. Это означает, что протокол должен хранить копии всех отправленных, но не подтвержденных сообщений. Вместо неэффективного физического копирования, производится виртуальное дублирование сообщения, одна копия которого затем передается вниз по потоку (модулю IP), а вторая сохраняется до получения подтверждения. После отправления сообщения драйвером сетевого адаптера, одна из копий будет уничтожена, что выразится в уменьшении поля db_ref
заголовка блока данных, но сам блок данных сохранится, поскольку значение счетчика по-прежнему будет превышать 0. И только после получения подтверждения db_ref
станет равным 0, и соответствующий буфер будет освобожден.
Типы сообщений
Каждое сообщение принадлежит определенному типу, определяющему назначение сообщения и его приоритет. В зависимости от типа сообщения попадают в одну из двух категорий:
. Приоритетные сообщения всегда помещаются перед обычными сообщениями и потому обрабатываются в первую очередь.
В подсистеме STREAMS определены следующие типы обычных сообщений:
M_DATA | Содержит обычные данные. Например, системные вызовы |
M_PROTO | Содержит управляющую информацию. Обычно сообщение этого типа содержит также несколько блоков типа M_DATA . С помощью системных вызовов M_PROTO ), так и данные (блоки M_DATA ). |
M_BREAK | Посылается драйверу устройства для генерации команды break. |
M_PASSFP | Используется в каналах STREAMS (STREAMS pipe) для передачи файлового указателя от одного конца канала к другому. |
M_SIG | Генерируется модулями или драйверами и передается вверх по потоку головному модулю для отправления процессу сигнала. |
M_DELAY | Передается драйверу устройства и указывает задержку между последовательно передаваемыми символами. Как правило, используется при работе с медленными устройствами во избежание переполнения их буферов. |
M_CTL | Используется для взаимодействия модулей потока друг с другом. Все сообщения этого типа уничтожаются головным модулем и, таким образом, не могут распространяться за пределы потока. |
M IOCTL | Формируется головным модулем в ответ на управляющие команды, переданные процессом с помощью системного вызова I_LINK , I_UNLINK , I_PLINK , I_PUNLINK и I_STR . Эти команды используются для создания мультиплексированных потоков. Последняя команда используется для управления модулями потока. |
M_SETOPTS | Используется для задания различных характеристик головного модуля. |
M_RSE | Зарезервировано для внутреннего использования. Модули и драйверы должны передавать его без изменений. |
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии