Итак, вы если вы программист, вы наверняка знаете о таком понятии как ‘heap’ – куча: область в памяти, в которой находится особая структура данных, поверх которой реализована динамическая память приложений. Как работает heap можно кратко прочитать в той же Википедии или в MSDN.
С heap связана масса проблем, так как неправильная работа с памятью может вызывать множество разнообразных проблем: переполнение буфера при чтении/записи, неправильное освобождение памяти в процессе работы/при выходе, освобождение неправильного участка памяти, неправильное аллоцирование памяти после предварительного освобождения и так далее… Короче, все эти сложные слова для пользователя значат, что программы у него чаще “падают” из-за “кривой” работы их с памятью. “Падений” программ из-за кривой работы с heap очень много – десятки процентов от всех проблем.
Проанализировав существующие сообщения об ошибках на примере Vista, в Microsoft решили написать такую подсистему, применяемую в настольной Windows 7, которая позволяет автоматически определять программы, которые “падают” из-за heap и применять к ним автоматизированные методики предотвращения возникновения heap-ошибок превентивно! То есть, программе создают такие условия, в которых она не падает или падает реже ;-) FTH “знает” большое количество способов решения проблем в heap и интеллектуально их применяет.
Информация о “падениях” собирается и анализируется, периодически через WER происходит связь с центральной базой знаний (кто знает, FTH использует Dr. Watson), куда отправляется статистика о проблемах и успешных их решениях, а также различная служебная диагностика проблем с программами, не содержащая приватных данных.
FTH является расширением (WDI) Windows Diagnostics, а также тонким механизмом, работающим поверх оригинального NT heap, перенаправляющим некоторые запросы. В расчёт приняты необходимости наносить минимальный вред общей производительности.
FTH включается системой автоматически для избранных приложений, которые “падают” и которым FTH может помочь – система анализирует crash и принимает об этом решение. Система может выключить FTH если приложение например почему-то перестало падать или включить через некоторое время снова если падения возобновились.
FTH работает тогда, когда это реально требуется нестабильным приложениям и не пытается помогать тем программам, которым помочь не получается – FTH позволяет им падать и падать сколько угодно :-)
FTH – не панацея, но средство, незаметно для пользователя помогающее избежать падений некоторых программ или уменьшить число ошибок. FTH не имеет API, его можно только включить или выключить. FTH также не имеет пользовательского интерфейса ;-) Он просто есть.
Если ваша программа падает – Windows попробует понять, является ли проблемой “кривая” работа этой программы с heap и пример решение присматривать ли за ней с помощью FTH. FTH может помочь сделать так, что 1) программа будет падать реже или совсем перестанет 2) расскажет об этом в Центр, в базу данных об ошибках 3) возможно разработчик программы увидит эту проблему и её исправит 4) с очередным апдейтом программы проблема будет решена 5) счастье :)
Эта одна из очень крутых фишек Windows 7, работу которой конечный пользователь никогда не увидит, но она очень важна. Собственно, когда вы думаете “за что я плачу при апгрейде OS???” – помните про множество таких вот прекрасных фич ;-)
(для информации – большинство проблем с падением программ из-за проблем с heap по статистике найдено НЕ в софте от Microsoft)
|