Книга: UNIX: разработка сетевых приложений
Модель блокируемого ввода-вывода
Модель блокируемого ввода-вывода
Наиболее распространенной моделью ввода-вывода является модель блокируемого ввода-вывода, которую мы использовали для всех предыдущих примеров. По умолчанию все сокеты являются блокируемыми. Используя в наших примерах сокет дейтаграмм, мы получаем сценарий, показанный на рис. 6.1.
Рис. 6.1. Модель блокируемого ввода-вывода
В этом примере вместо TCP мы используем UDP, поскольку в случае UDP признак готовности данных очень прост: получена вся дейтаграмма или нет. В случае TCP он становится сложнее, поскольку приходится учитывать дополнительные переменные, например минимальный объем данных в сокете (low water-mark).
В примерах этого раздела мы говорим о функции recvfrom
как о системном вызове, поскольку делаем различие между нашим приложением и ядром. Вне зависимости от того, как реализована функция recvfrom
(как системный вызов в ядре, происходящем от Беркли, или как функция, активизирующая системный вызов getmsg
в ядре System V), она обычно выполняет переключение между работой в режиме приложения и работой в режиме ядра, за которым через определенный промежуток времени следует возвращение в режим приложения.
На рис. 6.1 процесс вызывает функцию recvfrom
, и системный вызов не возвращает управление, пока дейтаграмма не придет и не будет скопирована в буфер приложения либо пока не произойдет ошибка. Наиболее типичная ошибка — это прерывание системного вызова сигналом, о чем рассказывалось в разделе 5.9. Процесс блокирован в течение всего времени с момента, когда он вызывает функцию recvfrom
, до момента, когда эта функция завершается. Когда функция recvfrom
выполняется нормально, наше приложение обрабатывает дейтаграмму.
- 6.2. Модели ввода-вывода
- Модель асинхронного ввода-вывода
- Модель неблокируемого ввода-вывода
- Сравнение синхронного и асинхронного ввода-вывода
- Включение и отключение синхронного вывода
- 7.4. Модель системы автоматизированного проектирования защиты информации
- 2. Правила вывода Армстронга
- 3. Производные правила вывода
- 5. Продукционная модель знаний
- 1.6 Драйверы и буферы ввода-вывода
- 2.3 Модель мини-драйвера IDE
- 7.1 Общая информационная модель и стандарт WBEM