Архитектура современных операционных систем
147 Время Поток 1 Поток 2 Устройство t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 read (hf,r2,buf1) ... wait (hf) ... read (hf,r5,buf2) … wait (hf) Запуск операции 1(r2) Завершение операции 1(r2) Запуск операции 2(r5) Завершение операции 2(r5) Рис. 4.26. Второй поток запускает асинхронную операцию чтения записи r5 из файла hf в момент времени t4, затем также некоторое время делает свою работу и в момент времени t6 переходит в ожидание установки hf. Устройство завершает операцию 1 в момент времени t7, в результате hf бу- дет установлен диспетчером ввода-вывода и оба потока выйдут из ожидания. Но операция 2 еще не выполнилась и содержимое buf2 – не определено. Для избегания подобных недоразумений необходимо, чтобы либо только 1 поток в процессе выполнял все асинхронные операция ввода/вывода, либо по- токи использовали разные синхронизационные объекты. Многоуровневые драйверы При работе с устройствами, поддерживающими файловую систему или при работе с сетевыми сервисами, Windows использует многоуровневые драйверы. Схема ввода/вывода тогда имеет вид (рис. 4.27.):
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy