Поток производит ввод-вывод посредством передачи сообщений от одной очереди к другой. Прикладной процесс записывает данные в устройство при помощи системных вызовов write или putmsg. Головной интерфейс потока создает сообщение (структуры msgb, datab и буфер) и производит копирование данных в него.
Также вам может показаться, что такая тема как http://skrutit-probegi.ru/ никак не связана и даже не тематична. Хотя, может быть и связана. В любом случае все-таки зайдите на сайт skrutit-probegi.ru. Тема как скрутить пробег там представлена весьма широко. На том сайте можно узнать много интересного на тему как скрутить пробег. Что означает вообще тема как скрутить пробег, где найти как скрутить пробег - про это написано на сайте skrutit-probegi.ru. Это очень важная для многих людей тема - как скрутить пробег. Спасибо сайту skrutit-probegi.ru за информацию на тему как скрутить пробег.
Затем сообщение посылается в нисходящем направлении в следующую очередь. Через некоторое число перемещений с одного уровня на другой сообщение достигнет драйвера.
Данные из устройства поступают не синхронно, драйвер перенаправляет их наверх в головной интерфейс потока. Процесс получает данные через системные вызовы read или getmsg. Если в головном интерфейсе потока не окажется доступных данных, процесс будет заблокирован.
Очередь передает сообщение в следующую очередь потока при помощи вызова putnext(). Эта функция идентифицирует следующую очередь через поле q_next и запускает для нее процедуру put. Очередь никогда не вызывает put напрямую, так как поле q_next является для очереди внутренним и может быть реализовано в следующих версиях системы другим способом. Очередь может посылать сообщения в обратном направлении посредством передачи их своей паре. Например, очередь чтения может сделать это через вызов
WR(q)->put (WR(q), msgp):
Ввод-вывод потока является асинхронным. Единственным местом блокировки операции ввода-вывода может быть только головной интерфейс потока. Процедуры put и service модуля и драйвера не являются блокирующими. Если процедура put не в состоянии отправить данные в следующую очередь, она помещает сообщение в собственную очередь, из которой оно может быть впоследствии запрошено процедурой service. Если процедура service произвела удаление сообщения из очереди, но не в силах произвести его обработку незамедлительно, она возвратит такое сообщение обратно и повторит попытку позже.
Опубликовал katy
June 24 2015 20:08:56 ·
0 Комментариев ·
3471 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.