Вебинар: Использование статических анализаторов кода при разработке безопасного ПО - 19.12
Довольно давно появились 64-битные процессоры, операционные системы, отдельные программы. Однако полностью на 64 бита перешли еще далеко не все пользователи. В статье рассматриваются причины этого.
Инструменты Viva64 и VivaMP более не развиваются как отдельные программы. Все возможности поиска специфических ошибок, связанных с разработкой 64-битных приложений, а также переносом кода с 32-битной на 64-битную платформу теперь доступны в рамках анализатора PVS-Studio.
В 2003-2004 годах в мире персональных компьютеров началась очередная революция. Она захватила все без исключения компьютеры, операционные системы, прикладные программы. Стремительно начавшись, она должна была поднять вычислительную технику на очередной уровень уже к 2005-2006 годам. Однако на момент написания этих строк (заканчивается 2008 год) революция так и не достигла своего пика. Речь идет о переходе на 64-битные технологии. Давайте посмотрим, с чего начался этот переход, как продолжался и каково состояние дел сейчас.
Вообще 64-битные технологии в мире не являлись новинкой даже в 2003 году. На платформах альтернативных современным персональным компьютерам 64-битные решения существуют достаточно давно. Однако только в 2003 появились первые 64-битные процессоры для персональных компьютеров. Эти процессоры представляли собой реализацию технологий AMD64 компании AMD и EM64T компании Intel. Причина появления новых 64-битных процессоров банальна. У старых 32-битных процессоров существует принципиальное ограничение - они могут работать только с четырьмя гигабайтами оперативной памяти, при этом каждому отдельному пользовательскому приложению доступно не более двух гигабайт. Пока подобные ограничения мешали лишь в профессиональной среде (дизайнерам, инженерам и т.п.), то вопрос решался просто. Специалисты обычно использовали нестандартную вычислительную технику, и это снимало проблемы. Однако когда обыкновенные игры для персональных компьютеров подобрались к пределу в два гигабайта оперативной памяти, уже и "домашним" пользователям понадобились новые процессоры.
Естественно, рынок прекрасно подготовился к новым потребностям пользователей. В 2003 году только появились первые образцы 64-битных процессоров, а в 2005 году уже нельзя было купить в магазине не 64-битный процессор. Казалось бы, проблема решена? К сожалению, для того чтобы преимущества 64-битных систем стали доступны пользователям, надо иметь в компьютере четыре гигабайта оперативной памяти (или более). А на 2005 год наиболее распространенной конфигурацией были машины с одним, максимум двумя гигабайтами.
К концу 2006 года оперативная память в обыкновенных персональных компьютерах уже стала приближаться к трем-четырем гигабайтам. Казалось бы, уж теперь самое время оценить преимущества 64-битных компьютеров. Но для того, чтобы это сделать, нужно иметь еще и 64-битную операционную систему. К счастью, Microsoft выпустила 64-битные версии Windows XP и Windows Server 2003 задолго до этого. Но на компьютерах пользователей эти операционные системы не спешили появляться. И эта ситуация сохраняется в настоящем времени. Практически на всех пользовательских компьютерах установлены 32-битные операционные системы семейства Windows XP и Windows Vista. Это объясняется отсутствием (как тогда, так и сейчас) 64-битных драйверов и что более важно недостаточным количеством 64-битных программ. Ведь хотя 32-битные программы и работают на 64-битных операционных системах почти без проблем, но больший объем оперативной памяти могут использовать только 64-битные программы.
Именно в 64-битных программах и кроется объяснение того факта, что до сих пор большинство пользователей не могут сказать, что используют 64-битную инфраструктуру при работе на компьютере, несмотря на все ее преимущества. Как оказалось, процесс переноса программ с 32-битных систем на 64-битные на практике не так уж и прост. И именно разработчики программ оказались "виноваты" в отсутствии 64-битных программ. Разберемся, в чем же дело.
Для того чтобы выпустить 64-битную версию программы ее нужно перекомпилировать специальным компилятором, который сгенерирует 64-битный код. Какие-то компании (как например Microsoft, Intel) выпустили 64-битные компиляторы довольно оперативно. Это значит, что уже в 2005 году эти компиляторы были доступны разработчикам. Другие же (как например Borland) до сих пор не выпустили 64-битных версий своих средств разработки. Это приводит к тому, что программы, разработанные в среде Borland C++, никак не могут быть скомпилированы для работы в 64-битном окружении.
Но поскольку многие программы разрабатываются с использованием средств от Microsoft и Intel, то, казалось бы, 64-битных программ должно быть все-таки довольно много? Увы, опыт многих компаний, занимающихся разработкой программного обеспечения, показал, что недостаточно просто перекомпилировать программу новым 64-битным компилятором.
Дело в том, что в программах, скомпилированных для 64-битных платформ, могут проявляться неожиданные (даже для разработчиков программ) ошибки. Приведем несколько примеров.
Будучи перекомпилированной под 64 бита обычная пользовательская программа делала вид, что прекрасно работает. До тех пор, пока пользователь не нажал клавишу F1. Вместо ожидаемого открытия справочной системы на экране появилось окошко с короткой фразой про невозможность загрузить справку. Казалось бы, какое отношение имеет справочная система к разрядности процессора? Но дело оказалось действительно в некорректной работе программы на новой системе. Поведение функций, отвечающих за справочную систему, изменилось и справка просто "сломалась".
Другой пример. Приложение для визуализации данных, в котором используемый объем оперативной памяти приближался к двум гигабайтам, было естественным кандидатом на 64-битную версию. Новая 64-битная версия работала прекрасно, пользователи не видели никаких проблем. До тех пор, пока кто-то не захотел построить изображение по данным, превышающим несколько гигабайт. Картинка была построена, но на экране показалось... только половина изображения. Почему? Некорректная работа в программе с большими объемами данных.
Незнакомый с индустрией разработки программных систем человек может задаться вопросом: "Почему подобные ошибки в программах не выявляются на этапе тестирования?" Ответ на этот вопрос не совсем очевиден. Дело в том, что существующие системы внутренних и внешних тестов программного обеспечения не позволяют выявить ошибки, характерные именно для 64-битных систем. Ведь по своей сути часто тесты должны выполняться очень быстро, поэтому, скажем, тестировать обработку нескольких гигабайт данных в таких тестах не будут. Инструменты для разработчиков долгое время также оставались в стороне от проблемы 64-битного программного обеспечения. Специализированные инструменты начали появляться относительно недавно, в 2007 году. В разработке одного из таких инструментов и принимает участие автор данной статьи.
О каких инструментах идет речь? Есть специальный класс программ, называемый статические анализаторы кода. Этот анализатор кода "разбирает" исходный код программы и выдает программисту список потенциальных проблем в коде. После чего программист их исправляет, и программа уже получается готовой к выходу в 64-битный мир.
Теперь, когда разработчикам программ стали доступны самые новые инструменты в области создания 64-битных программ, можно уже наконец-то ожидать массового перехода на 64-битные системы. В ближайшее время должны появиться 64-битные версий практически всех наиболее часто используемых программ. И уж тогда-то пользователи смогут, наконец, полностью получить все преимущества 64-битного мира.
Евгений Рыжков работает в компании ООО "СиПроВер" (www.viva64.com), где занимается разработкой программных продуктов Viva64 и VivaMP. Это инструменты для программистов, предназначенные для тестирования 64-битных и параллельных программ, путем анализа их исходного кода. Является автором публикаций по проблеме тестирования и создания сложных программных комплексов.
0