Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Обзор системы ввода/вывода Асинхронный ввод/вывод

Асинхронный ввод/вывод

Изначально системы UNIX не имели возможности осуществлять асинхронный ввод/ вывод, помимо возможности осуществлять фоновую запись в файловую систему. Интерфейс асинхронного ввода/вывода был определен группой POSIX. lb-1993 realtime. Вскоре после его принятия к FreeBSD была добавлена реализация.

Асинхронное чтение начинается aioread; асинхронная запись начинается aio_write. Ядро строит структуру запроса асинхронного ввода/вывода, которая содержит все нужные для выполнения запрошенной операции сведения. Если запрос не может быть удовлетворен немедленно из буферов ядра, структура запроса помещается в очередь для обработки расположенным в ядре демоном асинхронного ввода/вывода и системный вызов возвращается. Следующий доступный демон асинхронного ввода/вывода обрабатывает запрос, используя обычный путь синхронного ввода/вывода ядра.

Когда демон завершает ввод/вывод, структура асинхронного ввода/вывода помечается как завершенная, с возвращаемым значением или кодом ошибки. Приложение использует системный вызов aio_error для запроса о том, завершен ли ввод/вывод. Этот вызов реализован путем проверки состояния структуры запроса асинхронного ввода/вывода, созданной ядром. Если приложение доходит до места, с которого оно не может продолжить выполнение, пока ввод/вывод не будет завершен, оно использует системный вызов aiosuspend, чтобы подождать завершения ввода/вывода. В этом месте приложение помещается в спящее состояние в ожидании структуры запроса асинхронного ввода/вывода и пробуждается демоном асинхронного ввода/вывода.

Когда последний завершается. В качестве альтернативы приложение может потребовать, чтобы ему после завершения ввода/вывода был послан определенный сигнал.

Системный вызов aioj-eturn получает возвращаемое значение из асинхронного запроса, когда aio_error, aio suspend или поступление сигнала завершения известят о том, что ввод/вывод завершен. FreeBSD добавил также нестандартный системный вызов aiowaitcomplete, который объединяет функции aiosuspend и aioreturn в одну операцию. Как для aioreturn, так и для aiowaitcomplete возвращаемая информация копируется в приложение из структуры запроса асинхронного ввода/вывода, а затем структура запроса асинхронного ввода/вывода освобождается.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 63 гостей онлайн

Реклама на сайте: