Процедуры put и service должны синхронизироваться друг с другом при обращении к общим структурам данных. Процедура чтения put может быть вызвана из обработчика прерываний, поэтому существует возможность прерывания ею выполнения процедуры service, либо процедур записи put. Дополнительная блокировка требуется для многопроцессорных систем, так как они ориентированы на одновременное выполнение вызовов на разных процессорах [3], [9].
Также вам может показаться, что такая тема как http://www.danfos.info/Bauer никак не связана и даже не тематична. Хотя, может быть и связана. В любом случае все-таки зайдите на сайт danfos.info. Тема каталог bauer там представлена весьма широко. На том сайте можно узнать много интересного на тему каталог bauer. Что означает вообще тема каталог bauer, где найти каталог bauer - про это написано на сайте danfos.info. Это очень важная для многих людей тема - каталог bauer. Спасибо сайту danfos.info за информацию на тему каталог bauer.
Диспетчер STREAMS
Если процедуре put необходимо задержать обработку данных, то она производит вызов putq() для переноса сообщения в очередь и затем вызывает qenableQ для диспетчеризации очереди на обработку. Процедура qenableQ помечает очередь флагом QENAB и добавляет ее в конец списка очередей, ожидающих диспетчеризации. Если флаг QENAB уже оказался установленным, процедура qenable() не выполняет никаких действий. Последним этапом работы qenable() является установка глобального флага qrunflag, указывающего на то, что очередь ожидает диспетчеризации.
Диспетчеризация (scheduling) в подсистеме STREAMS реализована в виде процедуры runqueuesQ и не имеет никакого отношения к планированию процессов1 UNIX. Ядро вызывает runqueues() при попытке процесса начать операцию ввода-вывода или произвести управление потоком. Такой подход позволяет завершать выполнение многих действий до переключения контекста. Ядро также вызывает runqueuesQ перед возвратом в прикладной режим после контекстного переключения.
Процедура runqueues() проверяет, нужно ли произвести диспетчеризацию какого-либо потока. Если это необходимо, то она вызывает процедуру queuerun(), которая просматривает список диспетчера и вызывает процедуры service для каждой очереди, содержащейся в нем.
Процедура service может попытаться произвести действия сразу со всеми сообщениями в очереди, что будет более подробно описано в следующем разделе.
На однопроцессорных системах ядро гарантирует, что все процедуры service, вызванные диспетчером, будут выполнены до переключения в прикладной режим. Поскольку в тот же момент времени в системе может быть запущен произвольный процесс, процедуры service должны выполняться в системном контексте и не обладать правом доступа к адресному пространству текущего процесса.
Опубликовал katy
June 24 2015 20:11:05 ·
0 Комментариев ·
2441 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.