194
информацию. Альтернативной является асинхронная организация ввода-
вывода, при которой системный вызов read/write только инициирует
операцию, далее процесс продолжает выполняться параллельно со вводом-
выводом. Параллельное выполнение позволяет повысить эффективность
работы как самого процесса, так и всей системы, так как снимает
необходимость в переключении процессов, но синхронизация все равно
необходима. Если, например, процесс запросил ввод данных, то прежде,
чем он начнет их использовать, он должен убедиться, что ввод завершился.
Ответственность за такую синхронизацию перекладывается на процесс.
Для предоставления процессу возможности синхронизировать свои
действия с выполнением операций ввода-вывода ОС обеспечивает
процессу виртуальные прерывания, поддерживаемые системными
вызовами, описываемыми далее.
Ждать завершения операции на устройстве:
wait(devHandle, delay)
Вызов блокирует процесс – переводит его в состояние ожидания до тех
пор, пока не поступит виртуальное прерывание, сигнализирующее о
завершении операции на устройстве, определяемом devHandle. Если
операция к моменту вызова уже завершилась, процесс не блокируется.
Параметр delay задает максимально допустимое время, которое процесс
может ожидать. Если это время выходит, системный вызов wait
заканчивается, возвращая признак ошибки. Это время может быть
установлено и бесконечно большим.
Установить обработчик виртуального прерывания от устройства:
setHandler(devHandle, procAddr)
Возможность, предоставляемая этим вызовом, обеспечивает полное
сходство виртуального прерывания с реальным. При поступлении
виртуального прерывания от устройства выполнение процесса
прерывается и управление передается на процедуру с адресом procAddr,