Процедуры put и service дополняют друг друга. Процедура put необходима в том случае, если обработка сообщения не вправе быть отложена. Например, драйвер терминала должен производить немедленный вывод (эхо) всех получаемых символов, в противоположном случае пользователь будет считать, что произошел некий сбой.
Процедура service выполняет менее важные действия, такие как каноническая обработка входящих символов.
Ни одна из этих процедур не имеет права вызывать какие-либо другие блокирующие процедуры. Следовательно, подсистема STREAMS предоставляет собственные средства для проведения таких операций, как выделение памяти. Например, для размещения структуры сообщения используется процедура allocbQ. Если по какой-то причине невозможно завершить это действие (например, процедура не смогла найти свободные структуры msgb, datab или буфер), вместо блокировки произойдет выход с ошибкой. Затем вызывающий модуль загрузит процедуру bufcall (), передав ей указатель на функцию возврата. Процедура bufcallQ добавит запрос вызывающего модуля в список очередей, для которых необходимо выделить дополнительную память. При появлении возможности предоставить память подсистема STREAMS вызовет функцию возврата, которая (как правило) запускает процедуру service потока для повторного вызова allocb().
Асинхронные операции являются центральной нитью, на которую нанизана подсистема STREAMS. На стороне очереди чтения драйвер получает данные через прерывания устройства. Процедуры put этой части потока выполняются на уровне прерываний и поэтому не могут быть заблокированы. В принципе, подсистема может позволить производить блокировку при записи данных, но разработчики отключили такую возможность из соображений ее симметричности и простоты.
Диспетчеризация процедур service происходит в системном контексте, а не в контексте процесса, инициировавшего передачу данных. Следовательно, блокировка процедуры service приведет к переводу в режим сна совершенно не относящегося к этому процесса. Например, если прикладной процесс интерпретатора будет заблокирован до завершения передачи посторонних для него данных, результат может оказаться совершенно неприемлем. Невозможность блокировки процедур put и service не дает возникнуть означенной проблеме.
Опубликовал katy
June 24 2015 20:09:39 ·
1 Комментариев ·
2121 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Oleg27 October 26 2023 12:04:29
Привет всем. Есть желание делать ставки на спорт?
Могу посоветовать этот сайт https://1xBETvip.site для всех заинтересованных в игре онлайн.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.