Что означают синхронные и асинхронные запросы в Linux Kyber I / O Scheduler?
Изучая планировщики ввода-вывода, я прочитал некоторые документы для планировщиков ввода-вывода в ядре Linux. Есть некоторые непонятные вещи, особенно для Kyber Scheduler. В статьях по следующей ссылке (https://lwn.net/Articles/720675/), Kyber Scheduler имеет две основные очереди: одну для синхронных запросов, а другую для асинхронных запросов. В этой статье говорится
Процесс, выдающий запрос на чтение, обычно не может продолжаться, пока этот запрос не завершится и данные не станут доступны, поэтому такие запросы рассматриваются как синхронные.
Я думал, что синхронные и асинхронные запросы зависят от процессора и драйвера устройства, а не от типов операций ввода-вывода.
Есть идеи по этому вопросу?
Ответы
Это было бы больше похоже на «концептуально синхронный» или, возможно, «синхронный на более высоком уровне абстракции, чем тот, о котором вы думали». Программа считывает данные, чтобы как-то их обработать, поэтому, пока она не получит эти данные, она не сможет выполнить обработку: поэтому чтение должно быть синхронной операцией.
Запросы на запись, с другой стороны, могут быть отложены до тех пор, пока другие операции будут «видеть» данные как эквивалент записанные в конечный пункт назначения. Другими словами, любые операции чтения должны сначала проверить, существует ли измененная версия данных, которые они собираются прочитать, в кэше записи, и если да, то вместо этого «читать» из кеша.