Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 25
На сайте нет зарегистрированных пользователей

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

Моделирование интернет кафе на GPSS + Отчет
Обработка задач на ЭВМ на GPSS + Пояснительная записка
Моделирование работы аэропорта на GPSS + Пояснительная записка

Операция опроса
Системный вызов 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 Комментариев · 2159 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
PHP: обучение на ...
Ведение справочны...
XPmenu
Illusion
AlignEdit
Разработка клиент...
Факториал [Исходн...
Длинный заголовок...
Задача о 8ми ладьях
CLR via C#
100 компонентов о...
Основы Delphi
Cтатьи Королевств...
Векторный редакто...
Exe in exe
Программирование ...
Электронный магаз...
Delphi 2005 для W...
VksButton
DelphiX

Топ загрузок
Приложение Клие... 100772
Delphi 7 Enterp... 97809
Converter AMR<-... 20260
GPSS World Stud... 17014
Borland C++Buil... 14189
Borland Delphi ... 10267
Turbo Pascal fo... 7372
Калькулятор [Ис... 5972
Visual Studio 2... 5206
Microsoft SQL S... 3661
Случайные статьи
listing (A)
Задача №2 [GPSS]
Содержание
Вывод элементарных...
Сложное масштабиро...
Эскорт-модели: сам...
Раскрутка сайта
Список ссылок поис...
Создание индекса (...
ByteSub
Простые свойства
Canon: скомпонуйте...
Производительность
Введение
Volna Casino офици...
однасторона
Игры. Как победить...
Нам нужна такая ре...
Принцип суперпозиции
Специализация
Перчатки диэлектри...
Приемы расположены...
Основы передачи ин...
Конъюнкция целей
Миссия II. FACILIT...
Статистика



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


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