Архитектура современных операционных систем
146 Эта процедура выполняет следующие действия: 1. копирует результаты выполнения операции ввода/вывода в буфер процесса; 2. переводит в установленное состояние файловый объект, связанный с завершившийся операцией; 3. удаляет IRP; 4. в случае выполнения асинхронной операции ввода/вывода эта проце- дура также запустит пользовательский АРС, который известит поток о завершении операции. Замечание: диспетчер ввода/вывода работает на уровне DPC, поэтому АРС сработает только, когда будет выполняться прикладной поток. Особенности асинхронного ввода/вывода При выполнении асинхронной операций ввода/вывода поток, продолжает работать параллельно с запущенной операцией. Поэтому для определения со- стояния операции ввода/вывода, он должен использовать средства синхрониза- ции: 1. связать с операцией какое-либо событие или семафор; 2. использовать асинхронный вызов процедур АРС; 3. связать с операцией сам описатель файла. Последний способ самый простой, но может привести к ошибкам. Рассмотрим, к каким ошибкам может привести использование описателя файлового объекта для синхронизации при асинхронной операции вво- да/вывода. Пусть два потока одного процесса (рис. 4.26.) работают с одним файлом (описатель - hf). В момент времени t1 первый поток запускает асинхронную операцию чтения записи r2 из файла hf, затем некоторое время делает свою ра- боту и в момент времени t3 переходит в ожидание завершения операции, т.е. установки hf.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy