Изначально системы UNIX не имели возможности осуществлять асинхронный ввод/ вывод, помимо возможности осуществлять фоновую запись в файловую систему. Интерфейс асинхронного ввода/вывода был определен группой POSIX. lb-1993 realtime. Вскоре после его принятия к FreeBSD была добавлена реализация.
Асинхронное чтение начинается aioread; асинхронная запись начинается aio_write. Ядро строит структуру запроса асинхронного ввода/вывода, которая содержит все нужные для выполнения запрошенной операции сведения. Если запрос не может быть удовлетворен немедленно из буферов ядра, структура запроса помещается в очередь для обработки расположенным в ядре демоном асинхронного ввода/вывода и системный вызов возвращается. Следующий доступный демон асинхронного ввода/вывода обрабатывает запрос, используя обычный путь синхронного ввода/вывода ядра.
Когда демон завершает ввод/вывод, структура асинхронного ввода/вывода помечается как завершенная, с возвращаемым значением или кодом ошибки. Приложение использует системный вызов aio_error для запроса о том, завершен ли ввод/вывод. Этот вызов реализован путем проверки состояния структуры запроса асинхронного ввода/вывода, созданной ядром. Если приложение доходит до места, с которого оно не может продолжить выполнение, пока ввод/вывод не будет завершен, оно использует системный вызов aiosuspend, чтобы подождать завершения ввода/вывода. В этом месте приложение помещается в спящее состояние в ожидании структуры запроса асинхронного ввода/вывода и пробуждается демоном асинхронного ввода/вывода.
Когда последний завершается. В качестве альтернативы приложение может потребовать, чтобы ему после завершения ввода/вывода был послан определенный сигнал.
Системный вызов aioj-eturn получает возвращаемое значение из асинхронного запроса, когда aio_error, aio suspend или поступление сигнала завершения известят о том, что ввод/вывод завершен. FreeBSD добавил также нестандартный системный вызов aiowaitcomplete, который объединяет функции aiosuspend и aioreturn в одну операцию. Как для aioreturn, так и для aiowaitcomplete возвращаемая информация копируется в приложение из структуры запроса асинхронного ввода/вывода, а затем структура запроса асинхронного ввода/вывода освобождается.
- 10/11/2010 06:57 - Интерфейс виртуальной файловой системы
- 09/11/2010 19:30 - Перемещение данных внутри ядра
- 09/11/2010 18:56 - Реализация select
- 08/11/2010 02:22 - Мультиплексирование ввода/вывода для дескрипторов
- 04/11/2010 08:33 - Блокировка дескриптора файла
- 02/11/2010 10:14 - Управление дескрипторами
- 31/10/2010 09:00 - Открытые элементы файлов
- 29/10/2010 16:19 - Управление дескрипторами и службы дескрипторов
- 27/10/2010 14:46 - Метки дисков
- 27/10/2010 14:21 - Сортировка запросов дискового ввода/вывода