Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #48, НОЯБРЬ 2004 г.

Нуклонная смесь

Крис Касперски aka мыщъх

Спецвыпуск: Хакер, номер #048, стр. 048-004-2


Microsoft, проводя агрессивную рекламную компанию, выдает разрядность кода за главное достоинство своих операционных систем. Сначала нам долго и упорно втирали, что Windows 9x - полностью 32-разрядная операционная система. Затем выяснилось, что "в военное время значение синуса угла может достигать четырех" и Windows NT еще намного более 32-разрядна, чем Windows 9x :).

Действительно, Windows 9x содержит большое количество 16-разрядного кода, оставленного в системе по чисто техническим соображениям. Единственным x86 процессором, тормозящим при выполнении 16-разрядного кода, был и остается Pentium Pro, пользовавшийся большой популярностью у изготовителей серверов и высокопроизводительных (по тем временам) рабочих станций. Современные процессоры (Pentium 4 в частности) выполняют 16- и 32-разрядный код практически с одинаковой скоростью. Причем, 16-разрядный код в силу своей компактности зачастую выполняется даже быстрее! К тому же, он занимает меньше места на диске и в памяти. Другое дело, что 32-разрядный код существенно упрощает программирование. Но поскольку 16-разряные фрагменты кода глубоко зарыты в Windows 9x, никакой разницы между Windows NT и Windows 9x с потребительской точки зрения нет.

Но прогресс не стоит на месте, и разрядность кода непрерывно растет. Сейчас разрабатываются x86-совместимые процессоры, поддерживающие 64- и 128-разрядные режимы. 16- и 32-разрядный режимы сохранятся только в виде эмуляции и будут жутко тормозить. Естественно, сам по себе 64-разрядный режим не увеличивает скорости обработки данных, и, по большому счету, это просто хитрый маркетинговый трюк. Но нам, конечным пользователям, от этого не легче! Windows 9x будет крайне неэффективна на таких машинах, а ее перенос потребует чудовищных и бессмысленных трудозатрат. Перенести Windows NT гораздо проще, и Microsoft действительно ее переносит (или во всяком случае пытается это сделать). Возникает вопрос: какой процент 32-разрядного кода сохранится в 64/128-разрядных версиях Windows NT?

Полнота поддержки Win32 API

Программный интерфейс Windows 3.1 был невероятно убог и противоречив. Поэтому группе разработчиков Windows 9x было поручено создать принципиально новый API, учитывающий горький опыт предыдущего API и призванный ликвидировать его слабые места. От разработчиков Windows NT требовалось обеспечить обратную совместимость с win32 API (именно такое название получил новый интерфейс), на уровне одной из подсистем времени выполнения. Поначалу это никого особенно не взволновало, поскольку Windows NT ориентировалась преимущественно на OS/2-приложения, win32 долгое время оставался побочным проектом. Однако со смертью OS/2 и феерическим взлетом Windows 3.1 все изменилось и задача совместимости с Windows 9x (в ее успехе уже никто не сомневался) вышла на передний план.

Дико матерясь и проклиная Билла Гейтса, команда разработчиков Windows NT существенно переработала программный интерфейс, добавив к нему множество функций, которых не было и не могло быть в рамках Windows 9x. Какое-то время разработчики пытались найти компромисс, но потом поняли, что это бесполезно. И, махнув рукой, установили на место тех функций, которые они не смогли реализовать, своеобразные "заглушки", всегда возвращающие ошибку выполнения :). То есть формально функция есть, но толку от нее меньше, чем от нарисованного очага (помнишь Буратино?).

Назад на стр. 048-004-1  Содержание  Вперед на стр. 048-004-3