|
27 декабря 2004 г. |
НИИ СпецЛаб: Обезврежена ошибка
  Недокументированная проблема Windows-программирования. Программистов НИИ СпецЛаб уже трудно чем-то удивить, за долгий опыт работы повидали всякого, но ЭТА проблема заставила понервничать все предприятие.
 Технология Direct X, использованная в восьмой версии цифровой системы видеонаблюдения GOAL на аппаратном уровне, безусловно является серьезным достижением персонального компьютера по работе с ВИДЕО. Применение ее дало ощутимый результат и резко разгрузило ресурсы основного процессора.
 После большого периода испытаний казалось, что решения нет, и что технология Direct X - сырая сама по себе. Крайне редко, не на всех компьютерах, не во всех режимах, но постоянно проявлялась ошибка, приводившая к зависанию компьютера. Месяцами она могла не выдавать себя. Для ее отслеживания были применены все средства от самых современных отладчиков до самых опытных программистов и тестеров, "перекопана" вся информация последних лет по этой технологии и Windows-программированию. Одних только специализированных программных средств отладки было закуплено на 30 000 долларов. Но…
 Под угрозой срыва был серьезный коммерческий продукт - GOALv8. Снимать его с рельсов аппаратных ускорителей ВИДЕО, тем самым уменьшая мощность, крайне не хотелось. Ценой неимоверных усилий и серьезных исследований удалось найти недокументированную проблему драйвера Direct X.
 Дальше для программистов:
 В очень редких случаях программы, использующие аппаратно эту технологию, неожиданно завершают работу с катастрофической ошибкой D1 - DRIVER_IRQL_NOT_LESS_OR_EQUAL. Эта ошибка возникает, когда драйвер пытается обратиться к выгружаемой странице памяти (или по неверному адресу) при слишком большом уровне прерываний. В драйвере не была учтена ситуация, когда после обработки прерывания отложенная процедура (служит для завершения обработки прерывания на более низком уровне запроса прерываний) вызывалась не сразу, а с некоторой задержкой. Эта задержка в обработке, как выяснилось, связана с тем, что отложенные процедуры имеют свои приоритеты и процедуры с низким приоритетом, как было в ошибочном драйвере, и в крайне редких случаях обрабатываются не сразу. Увеличение приоритета отложенной процедуры исправляет ситуацию.
 Вот такая мелочь, неописанная ни в каких известных источниках по программированию, может испортить жизнь серьезной компании.
|
|