Готовый перевод Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): 6.2. Блокирующий ввод/вывод
Ранее в главе 3 мы рассмотрели как реализуется методы чтения и записи драйвера. Тогда мы, тем не менее, пропустили одну важную проблему: как драйвер отвечает, если он не может немедленно удовлетворить запрос? Запрос чтения может завершиться, когда данные станут доступны, но обычно это требует ожидания. Или процесс может попытаться записать, но устройство не готово к приёму данных, потому что буфер переполнен. Вызываемый процесс обычно не заботится о таких проблемах; программист просто ждёт вызова чтения или записи и получает вызова возврата после выполнения затребованного действия. В такой ситуации ваш драйвер должен (по умолчанию) блокировать процесс, переводя в режим ожидания, пока запрос не будет выполнен.
Данный раздел демонстрирует как перевести процесс в режим ожидания и активировать его снова. Как обычно, мы в начале рассмотрим несколько подходов.
Обзор режима ожидания
Что подразумевает режим "ожидания"? Когда процесс переводится в режим ожидания, то он помечается специальным состоянием и удаляется из очереди планировщика выполнения. Пока что либо случится для изменения этого состояния процесс не будет запланирован для любого CPU и поэтому выполнен. Ожидающий процесс выведен из системы пока не случится какое либо событие.
Перевод процесса в режим ожидания является для драйвера устройства в Linux простой задачей. Конечно же, что бы программировать режим ожидания правильно вам потребуется помнить пару правил.
Внимание! Этот перевод, возможно, ещё не готов.
Его статус: идёт перевод
Переведено на Нотабеноиде
http://notabenoid.org/book/11832/38297
Переводчики: fpinger
Настройки
Готово:
