Обезврежена ошибка
Дата публикации: 24.12.2004

Недокументированная проблема Windows–программирования.


Наших программистов, честно говоря, уже трудно чем-то удивить, за долгий опыт работы повидали всякого, но ЭТА проблема заставила понервничать все предприятие.


Технология Direct X, использованная в восьмой версии GOAL на аппаратном уровне, безусловно является серьезным достижением персонального компьютера по работе с ВИДЕО. Применение ее дало ощутимый результат и резко разгрузило ресурсы основного процессора. Сегодня почти каждый знает, если в требовании программного обеспечения указывается поддержка аппаратного Direct X, значит, мы имеем дело с высокопроизводительным продуктом. Однако эта технология менее всего изучена, и на сегодняшний день еще мало практических описаний ее применения. Отсюда и большое число сбойных программ, поступающих на рынок. Не секрет, что высокопроизводительные игрушки очень часто завершают игру перезагрузкой компьютера. И только опыт работы с этой технологией способен помочь создать устойчивый продукт. Понимая, что за нами идут и другие, мы делимся опытом и публикуем проблемы Windows–программирования.
После большого периода испытаний казалось, что решения нет, и что технология Direct X - сырая сама по себе. Крайне редко, не на всех компьютерах, не во всех режимах, но постоянно проявлялась ошибка, приводившая к зависанию компьютера. Месяцами она могла не выдавать себя. Для ее отслеживания были применены все средства от самых современных отладчиков до самых опытных программистов и тестеров, «перекопана» вся информация последних лет по этой технологии и Windows–программированию. Одних только специализированных программных средств отладки было закуплено на 30 000 долларов. Но…

Под угрозой срыва был серьезный коммерческий продукт – GOAL v8. Снимать его с рельсов аппаратных ускорителей ВИДЕО, тем самым уменьшая мощность, крайне не хотелось. Ценой неимоверных усилий и серьезных исследований удалось найти недокументированную проблему драйвера Direct X.

Дальше для программистов:

В очень редких случаях программы, использующие аппаратно эту технологию, неожиданно завершают работу с катастрофической ошибкой D1 - DRIVER_IRQL_NOT_LESS_OR_EQUAL. Эта ошибка возникает тогда, когда драйвер пытается обратиться к выгружаемой странице памяти (или по неверному адресу) при слишком большом уровне прерываний. В драйвере не была учтена ситуация, когда после обработки прерывания, отложенная процедура (служит для завершения обработки прерывания на более низком уровне запроса прерываний) вызывалась не сразу, а с некоторой задержкой. Эта задержка в обработке, как выяснилось, связана с тем, что отложенные процедуры имеют свои приоритеты и процедуры с низким приоритетом, как было в ошибочном драйвере, в крайне редких случаях обрабатываются не сразу. Увеличение приоритета отложенной процедуры исправляет ситуацию.

Вот такая мелочь, не описанная ни в каких известных источниках по программированию, может испортить жизнь серьезной компании.

НИИ СпецЛаб подготавливает целый цикл статей по проблемам ошибок программирования в системах видеозаписи на базе ПК. Подписаться на него можно, прислав письмо по адресу expertCCTV@arena2000.ru .
Защита от любых ошибок
Программная часть системы ААУ – автоматическое антизависающее устройство – теперь поставляется бесплатно. Новогодний подарок
Второе переиздание
Вышла новая версия SL-Control 6.0. Более 6-и лет этому продукту, первые его версии работали под DOS в резидентном режиме, потом под Windows 3.1 и т.д.