Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 6
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Лабораторная работа по динамическим спискам на Turbo Pascal (удаление ду...
База данных студентов на Turbo Pascal (Списки) + Пояснительная записка
Калькулятор на Delphi с переводом в другую систему исчисления + Блок схемы

Операция опроса
Системный вызов poll проверяет все указанные в параметрах дескрипторы. Если происходит любое событие из входящих в список интересных, вызов немедленно завершает выполнение после просмотра всех дескрипторов.


Также вам может показаться, что такая тема как http://memker.ru/catalog/magnitnye-derzhateli никак не связана и даже не тематична. Хотя, может быть и связана. В любом случае все-таки зайдите на сайт memker.ru. Тема купить держатель для телефона в машину там представлена весьма широко. На том сайте можно узнать много интересного на тему купить держатель для телефона в машину. Что означает вообще тема купить держатель для телефона в машину, где найти купить держатель для телефона в машину - про это написано на сайте memker.ru. Это очень важная для многих людей тема - купить держатель для телефона в машину. Спасибо сайту memker.ru за информацию на тему купить держатель для телефона в машину.


В противоположном случае процесс блокируется до тех пор, пока не наступит одно из ожидаемых событий. На выходе из функции поле revents каждой структуры pollfd будет содержать событие, произошедшее для указанного дескриптора (если таковое имело место). Функция poll также завершает выполнение после промежутка времени, равного параметру timeout (время указывается в миллисекундах).


Если параметр timeout равен 0, функция poll прекращает работу незамедлительно. Если timeout равняется INFTIM или -1, функция закончит работу только после возникновения интересующего события (либо при прерывании системного вызова). Возвращаемое значение poll описывает число произошедших событий, 0 — если имел место выход по исчерпанию времени или -1, если выполнение завершилось неудачно по другой причине.


В приведенном выше примере сервер может вызвать функцию poll, указав флаг P0LLIN для каждого дескриптора. Если вызов возвратит число больше О, сервер сделает вывод о наличии хотя бы одного сообщения на каком-то соединении и проверит структуры pollfd. Затем сервер прочтет сообщение из соответствующего дескриптора, обработает его и повторно вызовет poll для нового опроса.
Реализация вызова poll
Несмотря на то, что дескрипторы, передаваемые системному вызову poll, могут ссылаться на любые файлы, как правило, он используется по отношению к файлам символьных или STREAMS-устройств. По этой причине описание работы вызова будет сфокусировано именно на вышеперечисленных типах файлов. Одним из интересных применений poll является блокировка процесса таким образом, чтобы его пробуждение произошло после наступления одного или нескольких определенных событий. Для этого ядро использует две структуры данных, pollhead и polldat. Структура pollhead ассоциируется с файлом устройства и содержит очередь структур polldat. Каждая структура polldat идентифицирует заблокированный процесс, а также события, по которым он был заблокирован. Процесс, блокируемый по нескольким устройствам, обладает набором структур polldat по одной на каждое устройство. Они взаимосвязаны между собой

Системный вызов poll просматривает указанные ему дескрипторы в цикле и запускает операции VOP_POLL ассоциированных с этими дескрипторами объектов vnode. Синтаксис их вызова следующий:
error = V0P_P0LL (vp. events, anyyet, Srevents. &php);
где параметр vp является указателем на vnode, events — битовая маска опрашиваемых событий, a enyyet — количество ожидаемых событий, уже обнаруженных системным вызовом poll по отношению к другим дескрипторам. Операция возвращает в revents набор произошедших событий, а параметр php содержит указатель на структуру pollhead.
В случае символьного устройства операция V0P_P0LL реализована в виде процедуры spec_poll(), которая производит обращение к таблице cdevsw[] и вызывает процедуру драйвера d_xpoll(), осуществляющую проверку, не ожидает ли устройство указанного события. В этом случае происходит обновление маски revents и выход. Если устройство не ожидает каких-либо событий и параметр anyyet равняется нулю, процедура возвращает указатель на структуру pollhead устройства. Драйверы символьных устройств, как правило, выделяют структуру pollhead для каждого обслуживаемого ими младшего номера устройства.
После возврата функции V0P_P0LL системный вызов poll проверяет значения переменных revents и anyyet. Если обе переменные равны нулю, ни одно интересующее событие не ожидается устройством. В этом случае вызов poll получает из параметра php указатель на структуру poolhead, размещает структуру polldat и добавляет ее в очередь pollhead. Он сохраняет в структуре polldat указатель на структуру ргос и маску событий устройства, а также соединяет ее с другими структурами polldat процесса.
Если устройство возвращает ненулевое значение переменной revents , это означает, что событие уже ожидается устройством и вызову poll нет необходимости блокировать процесс. В этом случае функция удаляет все структуры polldat из очередей pollhead и освобождает их. Затем она увеличивает значение anyyet на количество событий, установленных в revents. При опросе следующего устройства драйвер обнаружит, что параметр anyyet отличен от нуля и не станет инициировать структуру pollhead.
Если ни одно из указанных событий не ожидается ни одним устройством, вызов poll блокирует процесс. Информация об ожидаемых событиях при этом поддерживается драйверами. Когда происходит одно из таких событий, драйвер вызывает функцию pollwakeup(), передает ей событие и указатель на структуру pollhead устройства. Вызов просматривает очередь polldat структуры pollhead и будит все процессы, находящиеся в режиме ожидания события. Для каждого процесса также просматривается цепочка polldat с целью удаления и освобождения структур polldat из очереди pollhead.


Операция опроса должна быть реализована в каждой операционной системе или устройстве. Некоторые файловые системы, такие как ufs или s5fs, используют для этой цели процедуру ядра fs_poll(), которая производит копирование флагов из параметра events в revents и после этого завершает свою работу. Это приводит к возврату poll без блокировки процессов. Такой подход, как правило, применяется блочными устройствами. Устройства STRAMS используют для поставленной цели процедуру strpoll(), опрашивающую любой обычный поток.
Опубликовал katy June 24 2015 16:35:04 · 0 Комментариев · 2703 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
TsHintManager
Rss Parser
Пятнашки и крести...
32 урока по Delphi
iChat v.7.0 Final...
DiskInfo
Основы Delphi
Tenis [Исходник н...
Delphi 2005 для W...
ATComponents
Swing. Эффектные...
Краснов М. - Open...
IPAddresseEdit
ProLIB18
Фильтры изображений
Программа предназ...
Род Стивенс. Delp...
API (Применение A...
Секреты программи...
Borland C++Builde...

Топ загрузок
Приложение Клие... 100793
Delphi 7 Enterp... 98016
Converter AMR<-... 20298
GPSS World Stud... 17059
Borland C++Buil... 14238
Borland Delphi ... 10373
Turbo Pascal fo... 7390
Калькулятор [Ис... 6080
Visual Studio 2... 5228
Microsoft SQL S... 3674
Случайные статьи
Недостатки модели ...
Поле CIST INTERNAL...
Строки в стиле язы...
Перестройка образо...
Уровень централизации
КРАТКИЙ ОБЗОР КОСМ...
Язык С: класс памяти
Поток с использова...
сообщения
Параллелизм и комп...
BEGIN expected
Блейд-серверы DELL...
Небольшие изменени...
Доставка групповог...
ВОСХОДЯЩАЯ РЕКУРСИЯ
Безопасный и удобн...
Буферы для потоков
• доступ к архивны...
Концепция подключе...
Ландшафтный дизайн
Каковы шансы на ус...
Сделать ставки на ...
Тотал 1 больше 1.5...
Можно объявлять пе...
Фильтрация и сорти...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?