next up previous
Next: Реализованные опции Up: Linux & POSIX.1b Previous: Планирование

Асинхронный ввод - вывод (aio)

POSIX.1b определяет ряд функций, которые позволяют послать длинный список на чтение/запись ядру, при котором производится поиск положений различных блоков в файле по одному единственному lio_listio() системному вызову. В то время как процесс продолжает выполнить следующие инструкции, ядро будет асинхронно читать или писать требуемые страницы и будет посылать сигналы когда задача завершена (если это нужно).

Это очень хорошо для базы данных, которая знает что будет требовать много различных блоков рассеянных по файлу. Довольно просто передавать список блоков к ядру, и ядро может оптимизировать движение головок диска перед посылкой запросов на устройство. Кроме того это минимизирует число системных вызовов и позволяет базе данных делать что-нибудь еще тем временем. Например ждущий процесс клиента, посылающий инструкцию аварийного прекращения работы, когда сервер базы данных может отменить async i/o запросы с помощью aio_cancel().

Другое важное приложение aio - системы мультимедиа подобно MPEG или плэерам и системам записи звуковых файлов. Эти программы хотят предзагрузить идущий несколько секунд поток данных от жесткого диска в захваченную память, но также хотят продолжать показывать видео на экране в то же самое время без лишних прерываний, вызванных синхронным вводом - выводом. POSIX.1b async запросы ввода - вывода обеспечивают хороший способ для такой упреждающей загрузки.

POSIX.1b также определяет приоритеты для асинхронного ввода - вывода, то есть имеется способ сообщить ядру, что запрос на чтение с MPEG плэера более важен чем запрос на чтение для gcc. На будущем реал-тайм Linux-е, вы не захотите видеть какие-любо искажения изображения при наблюдении MPEG видео и компилировании ядра в то же самое время, если вы дали MPEG плэеру более высокий статический приоритет.

Новые функции в этой области: aio_read(), aio_write(), lio_listio(), aio_suspend(), aio_cancel(), aio_error(), aio_return(), aio_fsync().

Состояние выполнения: Richard Neitzel (thor@atd.ucar.edu) работает над libaio пакете, который использует Linux-Threads пакет. Самая последняя версия доступна на:
ftp://ftp.atd.ucar.edu/pub/thor/.



Vladimir Chernenkov
Fri Jun 13 10:57:19 MSD 1997