Решение проблем ограничения доступа к памяти в 64-битных технологиях фирмы Microsoft

КОМПЬЮТЕРНЫЕ СИСТЕМЫ И ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ

УДК 004.258

РЕШЕНИЕ ПРОБЛЕМ ОГРАНИЧЕНИЯ ДОСТУПА К ПАМЯТИ В 64-БИТНЫХ ТЕХНОЛОГИЯХ ФИРМЫ MICROSOFT

М.Я. Беккер

Ведущий консультант Application Development Core Microsoft Deutschland GmbH, выпускник СПбГУ ИТМО

Приводится анализ проблем 32-битной технологии, являющихся причиной перехода на 64-битную технологию, рассмотрены базовые технические характеристики аппаратных платформ, основанных на 64-битной адресации памяти и поддерживаемых программным обеспечением Microsoft, приведен обзор специфических аспектов перевода информационных систем и производственных процессов на 64-битные технологии, сформулированы связанные с этим ключевые рекомендации организаторам производственных информационных процессов и специалистам по разработке, сопровождению и администрированию программного обеспечения.

Ключевые слова: Microsoft, Адресация памяти, архитектура процессора, x86, x64, IA64, 64-битные технологии, разработка ПО, сопровождение ПО, администрирование ПО, сервер.

Введение

Современная обработка информации - это, прежде всего, растущие требования к быстродействию систем при параллельном росте объема обрабатываемых данных [1]. На фоне постоянного совершенствования аппаратной части информационных систем (роста быстродействия процессоров, увеличения объема физической памяти компьютеров) многие традиционные технологии обработки информации неожиданно быстро достигли своих пределов, считавшихся длительное время теоретическими. К таким пределам относится и техническое ограничение 32-битной адресации компьютерной памяти. Преодолеть это ограничение эволюционными методами не представилось возможным, и только внедрение 64-битной адресации позволило радикально изменить количественные и качественные технические характеристики информационных систем, что незамедлительно отразилось также и в существенном улучшении экономических показателей этих систем. В данной статье приводится краткий обзор специфики 64-битных технологий от Microsoft, сопровождающийся рекомендациями кругу специалистов, связанных с дизайном, разработкой, внедрением, сопровождением и администрированием систем на их основе.

Преимущества 64-битной технологии

Для оценки новизны 64-битной технологии (использующей 64-битную адресацию) в области использования памяти компьютеров достаточно сравнить только следующие цифры: до 4.294.967.296 Байт памяти как максимум могут быть использованы процессами, работающими на основе 32-битной технологии, в то время как новый предел составляет 18.446.744.073.709.551.616 Байт - таким количеством памяти располагает каждый процесс, работающий на основе 64-битной технологии, безо всяких дополнительных специальных решений и настроек.

Таким образом, основная отличительная черта 64-битной технологии - это новый предел физической адресации памяти. Именно благодаря этой основной черте и пользователи, и разработчики программного продукта получили в свое распоряжение новые, недоступные ни 32-битной, ни тем более отдаляющейся от нашего времени 16-битной технологиям преимущества.

4

Прежде всего, пользователи 64-битных систем располагают новыми сценариями производственных процессов, пришедшими вместе с отменой ограничений на использование памяти в условиях 32-битной адресации памяти. Нельзя не отметить и существенный рост показателей быстродействия программного обеспечения: очевидно, что прямой обмен информацией между центральным процессором (или процессорами) и памятью - без более «медлительных посредников» типа дисковых накопителей, сетевых адаптеров и пр. - является наиболее быстрым способом обмена информацией. Поскольку стоимость и время разработки программ при использовании 64-битной технологии существенно сокращаются, значительно улучшаются такие ключевые экономические показатели внедрения, как возврат инвестиций (ROI) и пр. Наконец, нельзя не упомянуть продолжающуся поддержку многих продуктов и модулей, созданных на базе 32-битной технологии, но поддерживаемых в среде 64-битных информационных систем - таким образом гарантируется рентабельность уже осуществленных капиталовложений в решения предыдущего информационно-технического поколения.

Системные администраторы и организаторы производства выигрывают благодаря 64-битной технологии, главным образом, вследствие сокращения общего количества оборудования, необходимого для обеспечения работоспособности информационных систем (консолидирование серверного парка).

Архитекторы, дизайнеры и инженеры программного продукта вкупе с сопровождающим их персоналом, обеспечивающим контроль качества (тестеры), внедрение и сопровождение разработок, также находятся в выигрыше от перехода на 64-битные технологии: благодаря «плоской» адресации памяти для размещения и обработки в памяти компьютера гигантских, прежде немыслимых обьектов и фрагментов данных на второй план отошли затраты на необходимые разработки специальных операций по оптимизации использования адресного пространства с учетом органичений 32-битных технологий. Резервирование областей памяти для хранения и обработки в памяти монолитных обьектов размером более 4 Гигабайт предполагает новые, более экономичные стратегии, сценарии и алгоритмы программного продукта, освобождающие ресурсы разработки для их использования в области реализации предметных проблем, нежели расходуемые на технические решения преодоления физических пределов 32-битной адресации памяти [2].

Новые границы доступа к памяти стали предпосылками для реализации новых подходов и процессов, базирующихся на операциях с большими, до сих пор не реализуемыми разделами памяти: обработка гигантских многомерных массивов данных в Analysis Services, создание комплексных цифровых моделей и пр.

Аппаратная платформа

Решающими предпосылками для развития 64-битных технологий являются аппаратные платформы и архитектуры, поддерживающие 64-битную адресацию памяти. Продукты Microsoft©, ориентированные на использование новой технологии, предусматривают использование либо процессоров традиционной 32-битной архитектуры с 64-битными расширениями („Extended Technology" - x64 - типа EM64T от фирмы Intel© [3] или AMD64 от фирмы AMD [4]), либо процессоров кардинально новой RISC архитектуры Itanium© фирмы Intel (известной также как IA64) [5].

Процессоры x64 семейства наследуют известную и хорошо освоенную традиционную архитектуру 32-битных процессоров (так называемых x86 процессоров), дополненную усовершенствованиями, осуществляющими 64-битную адресацию памяти. В условиях относительно небольшого расширения словаря машинных команд процессоров этого семейства (заключенного, главным образом, в области доступа к памяти) разработчики программного обеспечения с минимальными затратами переводят свои про-

дукты на использование 64-битной адресации памяти при полной поддержке стандартных x86 процессорных инструкций. Создание компьютерных систем на базе x64 процессоров во многом использует опыт, накопленный в ходе эксплуатации нескольких поколений 32-битных систем, аппаратную совместимость и отшлифованные временем экономические и технические решения.

Тем не менее, не следует забывать, что процессорная архитектура x86 изначально не была предназначена для работы с обьектами памяти, выходящими за рамки 32-битной адресации. Задуманный тремя ключевыми игроками рынка информационных технологий (Intel, HP, Microsoft) в начале 90-х годов прошлого века переход к новому уровню работы с компьютерной памятью выразился в основании во многом принципиально новой процессорной RISC архитектуры - Intel Itanium (IA64). Появившись гораздо ранее x64 архитектуры, заявив о себе процессорами Itaniuml и Itanium2 в промышленном масштабе, архитектура IA64 предвосхитила индустриальную эпоху массового применения 64-битной технологии. Основу этой архитектуры составляют не только 64-битные операции с памятью, но и множество специфических функций, разработанных исключительно для усиления эффекта использования нового обращения к памяти: оптимизация загрузки данных в регистровую область памяти процессора, параллелизация работы с памятью - два и более обращений к памяти за один такт работы процессора, кольцевое использование процессорных регистров широкого назначения и пр. [6].

Изначально ориентированные на максимально эффективную работу с большими обьемами оперативной памяти, процессоры архитектуры IA64, в свою очередь, не в состоянии непосредственно обрабатывать 32-битные процессорные команды архитектуры x86, что существенно снижает совместимость такого рода компьютерных систем с 32-битными программными приложениями и модулями. Встроенный аппаратный интерпретатор 32-битных команд не обеспечил ожидаемых показателей быстродействия 32-битных приложений на платформе IA64, и в настоящее время специальное программное обеспечение - эмулятор архитектуры x86 для IA64 процессоров (EL32) -осуществляет выполнение x86 команд на уровне процессов ядра. Таким образом, программная эмуляция 32-битной архитектуры на платформе IA64 оказалась более эффективной, чем аппаратное решение [7].

В то время как x64 процессоры используются как для рабочих станций, где доля 32-битных приложений пока еще велика, так и в широком спектре серверных решений, архитектура IA64, первоначально и задуманная для масштабируемых систем, предназначается для сектора систем обработки экстремально больших объемов данных, перенимая эстафету у x64 процессоров по мере роста требований к обьему обрабатываемой информации и быстродействию операций. Принципиальное различие архитектур x64 и IA64 процессоров обусловливает абсолютную несовместимость их программного обеспечения на уровне машинных команд между этими двумя платформами: процессы уровня ядра - драйверы устройств, службы и пр. - строго ориентированы на свои целевые архитектуры и не являются взаимозаменяемыми. Этот аспект должен учитываться при выборе или замене аппаратной части информационных систем у конечных пользователей и при определении стратегии разработки программного продукта производителями информационных систем.

Поддержка памяти в операционных системах от Microsoft

Microsoft уже не в первый раз масштабирует доступ к памяти в своих операционных системах. Появившись впервые на рынке операционных систем с 16-битными продуктами, Microsoft впоследствии постепенно перевела их на 32-битную адресацию. Специфика архитектуры операционных систем Microsoft такова, что каждому выполняемому процессу в 32-битной среде доступны всего лишь половина из теоретически

максимально доступных 4 ГБ: 2 ГБ в адресном пространстве каждого процесса резервирует для себя операционная система, и лишь вторые 2 ГБ процесс может использовать для своих нужд самостоятельно [8].

В ходе развития своих 32-битных операционных систем Microsoft расширил объем доступной процессу памяти до 3 ГБ, сократив до 1 ГБ объем памяти, резервируемый операционной системой в адресном пространстве процесса. Это усовершенствование получило название 4 GB Tuning (4GT)[9]. Дальнейшие попытки увеличить объем доступной процессу памяти в среде 32-битных систем являлись узконаправленными решениями, сопряженными с дополнительными ограничениями (Physical Address Extension, PAE) [10].

Вскоре стало ясно, что только переход на 64-битную адресацию памяти позволит решить растущие с каждым днем проблемы «ограничения 4 ГБ». Поддержка 64-битных аппаратных платформ довольно рано стала одной из центральных составляющих глобальной стратегии Microsoft. Уже первые промышленные системы на базе IA64 архитектуры стали основой для разработки и внедрения продуктов линейки операционных систем: Windows Server 2003 Enterprise for IA64 (сервер) и Windows XP Professional for IA64 (выпуск и поддержка которой были, однако, прекращены после остановки производства рабочих станций HP с процессорами Itanium2) [11].

Вышеупомянутый эмулятор x86 архитектуры для IA64 процессоров (EL32) включен в первый сервисный пакет для Windows Server 2003 Enterprise for IA64 и необходим для установки и работы .NET Framework 2.0 и следующих версий этого окружения создания приложений. Через короткий промежуток времени после выпуска Windows Server 2003 Enterprise for IA64 Microsoft выпустил сразу две новых версии операционных систем для x64 процессорной архитектуры: Windows XP Professional x64 Edition для поддержки рабочих станций и Windows Server 2003 x64 Edition для серверного окружения. Любопытно, что ядра обеих этих операционных систем имеют под собой общую базу исходного кода - в отличие от Windows Server 2003 for IA64. Таким образом, ни Windows Server 2003 for x64, ни Windows XP Professional x64 Edition не нуждались в сервисном пакете SP1 (в отличие от более старшей версии для IA64) - он был уже интегрирован.

Начиная с этого момента, Microsoft определился с последующими версиями операционных систем следующим образом:

каждая следующая версия операционной системы для рабочих станций будет синхронно выпускаться для архитектур х86 и х64;

каждая последующая версия операционной системы для серверов будет синхронно выпускаться для архитектур x86, x64 и IA64, при этом x86 не входит в долгосрочные стратегические планы для серверных решений;

- поддержка различных архитектур не означает аналогичного набора функций для каждой архитектуры - операционные системы отличаются в этом плане в зависимости от целевой архитектуры;

- программные модули операционных систем не являются взаимозаменяемыми - для каждой из трех поддерживаемых архитектур существует своя индивидуальная, строго ориентированная версия пакета внедрения, не применимая на любой другой архитектуре.

Уже с момента выпуска Windows Vista Microsoft следует вышеизложенным принципам: Windows Vista x86 и Windows Vista x64 появились на рынке одновременно, и сервисные пакеты для них - тоже. В области операционных систем для рабочих станций эта же линия прослеживается и для Windows 7: x86 и x64 вышли на рынок синхронно. На линейке продуктов для серверов последней версией Microsoft операционной системы с поддержкой всех трех архитектур - x86, x64 и IA64 - стала версия Windows Server 2008. Причем следующий малый релиз - Windows Server 2008 R2 - стал первой

версией серверной операционной системы, которая уже не существует для x86 архитектуры и не может быть установлена на ней. Началась новая эпоха серверных операционных систем Microsoft: отныне все серверные операционные системы исключительно 64-битные - для x64 и IA64 архитектур.

Основное преимущество 64-битных операционных систем состоит в новых масштабах доступа к памяти [8]. Это особенно видно в сравнении с подобными характеристиками 32-битной технологии (таблица).

Тип памяти Ограничения 32-битной Windows Ограничения 64-битной Windows

Виртуальное адресное пространство пользовательского уровня «User-mode» для 32-битного процесса 2 ГБ (до 3 ГБ для модулей, собранных с параметром IMAGE_FILE_LARGE_ADDRESS_A WARE и при использовании 4GT) 2 ГБ для модулей, собранных без параметра IMAGE_FILE_LARGE_ADDRESS_A WARE (по умолчанию) 4 ГБ для модулей, собранных с параметром IMAGE_FILE_LARGE_ADDRESS_A WARE

Виртуальное адресное пространство пользовательского уровня «User-mode» для 64-битного процесса Невозможно в принципе x64: 8 ТБ IA64: 7 ТБ 2 ГБ для модулей, собранных специально с запрещением параметра IMAGE_FILE_LARGE_ADDRESS_A WARE

Виртуальное адресное пространство уровня ядра «Kernelmode» 2 ГБ или от 1 ГБ до максимально 2 ГБ при использовании 4GT 8 ТБ

Выгружаемый пул «Paged pool» Ограничен вакантным адресным пространством уровня ядра «kemel-mode» или значением параметра PagedPool-Limit регистра операционной системы. Windows Vista: Ограничен только вакантным адресным пространством уровня ядра «kemel-mode». Начиная с Windows Vista с сервисным пакетом Service Pack 1 (SP1), «paged pool» может быть дополнительно ограничен значением параметра PagedPoolLimit регистра операционной системы. Windows Home Server and Windows Server 2003: 530 МБ Windows XP: 490 МБ Windows 2000: 350 МБ 128 ГБ Windows Server 2003 and Windows XP: до 128 ГБ в зависимости от конфигурации и объема физически установленной оперативной памяти.

Невыгружаемый пул «Nonpaged pool» Ограничен вакантным адресным пространством уровня ядра «kernel-mode», значением параметра NonPagedPool-Limit регистра операционной системы или объемом физически установленной оперативной памяти. Windows Vista: Ограничен только вакантным адресным пространством уровня ядра «kernel-mode». Начиная с Windows Vista с сервисным пакетом Service Pack 1 (SP1), «paged pool» может быть дополнительно ограничен значением параметра NonPagedPool-Limit регистра операционной системы. Windows Home Server, Windows Начиная от 75% от объема физически установленной оперативной памяти до максимально 128 ГБ. Windows Vista: начиная от 40% от объема физически установленной оперативной памяти до максимально 128 ГБ. Windows Server 2003 and Windows XP: максимально до 128 ГБ в зависимости от конфигурации и объема физически установленной оперативной памяти.

Server 2003, and Windows XP/2000: 256 МБ либо 128 МБ при использовании 4GT.

Системный кэш виртуального адресного пространства Ограничен вакантным адресным пространством уровня ядра «kemel-mode» или значением параметра SystemCacheLimit регистра операционной системы. Windows Vista: Ограничен только вакантным адресным пространством уровня ядра «kemel-mode». Начиная с Windows Vista с сервисным пакетом Service Pack 1 (SP1), «paged pool» может быть дополнительно ограничен значением параметра SystemCacheLimit регистра операционной системы. Windows Home Server, Windows Server 2003, and Windows XP/2000: 860 МБ при установленном параметре LargeSystemCache регистра операционной системы и при условии неиспользования 4GT; до максимально 448 MB при использовании 4GT. Всегда 1 ТБ независимо от объема физически установленной оперативной памяти. Windows Server 2003 and Windows XP: до максимально 1 ТБ в зависимости от конфигурации и объема физически установленной оперативной памяти.

Таблица. Сравнительная характеристика параметров использования памяти для 32-битного и 64-битного семейств операционных систем Windows

Особенности новой модели данных

Изменения в адресации памяти привели к изменению модели данных, взятой за основу в 64-битных версиях операционных систем Microsoft. 32-битные версии Windows оперируют моделью данных, известной как ILP32: типы данных Integer, Long и Pointer имеют длину 32 бита. В среде Windows тип данных Pointer имеет особое значение: его наследуют многие специфические типы данных в операционной системе, например, Window Handle, Module Handle и пр. 64-битная версия Windows оперирует моделью LLP64: типы данных Pointer и LongLong имеют теперь длину 64 бита. В то же время типы Integer и Long сохранили длину 32 бита.

Изменения модели данных повлекли за собой, помимо всего прочего, еще и появление на свет так называемых гибридных типов данных, длина которых зависит от применяемой в настоящий момент адресации памяти. Например, тип данных INT_PTR есть тип данных Integer, имеющий длину, аналогичную длине типа Pointer. Переменная этого типа данных имеет длину, соответствующую адресации памяти версии операционной системы, которая выполняется в настоящий момент: в среде Windows x86 эта переменная будет иметь длину 32 бита, в среде Windows для архитектур IA64 или x64 -длину 64 бита [12].

Поскольку главным отличием между используемыми Windows 32-битной и 64-битной моделями данных является длина указателя на область памяти (фактически -длина адреса ячейки памяти), то одной из важнейших задач для разработчиков программного продукта под Windows при переходе от 32-битной версии к 64-битной является тщательная проверка всех фрагментов кода, связанных с приведением типов данных (Type Casting) и с арифметикой указателей (Pointer Calculation) - здесь возможна потеря данных вплоть до полной неработоспособности программ.

Заполнение и выравнивание данных в памяти

Не только длина указателя на область памяти отличает работу с данными для 32-битной и 64-битной версии Windows. Размещение данных в памяти компьютера осуществляется не простым последовательным заполнением ячеек памяти, а отвечает требованиям аппаратной платформы к заполнению памяти (как правило, определяемым архитектурой центрального процессора). Каждый тип архитектуры процессора требует выравнивания размещенных в памяти данных согласно определенным интервалам ячеек памяти (Data Alignment). Для процессоров с архитектурой x86 этот интервал имеет длину 4 Б (или 32 бита), для архитектур IA64 и x64 этот интервал равен 8 Б (или 64 битам). Размещение данных в памяти, при котором адреса отдельных переменных или полей структур кратны заранее определенным интервалам, автоматически приводит к появлению неполностью используемых участков памяти. Свободные от данных фрагменты памяти могут быть заполнены нулями или случайными данными. Это заполнение неиспользуемых ячеек памяти (Padding) требует от разработчиков программного продукта понимания разницы типов архитектур используемых процессоров и внимания при использовании арифметики указателей. В качестве примера на рисунке представлено размещение одной и той же комплексной структуры данных в памяти 32-битной и 64-битной Windows (рисунок) [12].

Рисунок. Пример заполнения и выравнивания данных (Padding и Alignment) в 32-битной и 64-битной версии Windows

Нетрудно заметить, что из-за различий в длине некоторых типов данных и в интервалах заполнения ячеек между 32-битной и 64-битной версиями Windows изменяются как общий объем памяти, требуемый для размещения структуры данных, так и относительные адреса доступа к отдельным полям структуры.

Два вывода следуют из вышеизложенного: - при переводе программного продукта с 32-битной на 64-битную платформу может увеличиться требуемый объем памяти для размещения обрабатываемых данных; если программный продукт использует арифметику указателей для динамического доступа к отдельным полям комплексных структур данных, то подобные фрагменты кода должны быть обязательно проверены с учетом различий в интервалах выравнивания данных в памяти компьютера между 32-битной и 64-битной версиями Windows.

Поддержка 32-битных приложений в 64-битных версиях Windows

Мгновенный перевод всего существующего программного обеспечения для Microsoft Windows с 32-битной технологии на 64-битную экономически неоправдан, а зачастую и технически невозможен. В связи с этим Microsoft приняла решение о поддержке 32-битного программного обеспечения в среде 64-битных версий Windows как для архитектуры x64, так и для IA64. Эта поддержка осуществляется за счет встроенной в Windows подсистемы «Windows-On-Windows 64» (WOW64)[13]. Подсистема устанавливается автоматически при установке любой из 64-битных операционных систем (за исключением версии Windows Server 2008 R2 Core, где WOW64 является дополнительным пакетом и требует отдельной установки) и несет ответственность за эмуляцию архитектуры x86 для 32-битных приложений.

Продолжая следовать ограничению в 4 ГБ для адресации памяти, 32-битные приложения, тем не менее, могут ослабить фактическое ограничение в 2 ГБ (см. выше) и использовать все 4 ГБ для размещения и обработки данных (см. в таблице использование параметра IMAGE_FILE_LARGE_ADDRESS_AWARE).

Однако не удалось и избежать некоторых ограничений в условиях поддержки 32-битного программного обеспечения в среде 64-битных версий Windows. В частности:

- Программное обеспечение, содержащие фрагменты 16-битной технологии, не поддерживается, в том числе и 16-битные инсталляционные модули;

- Не поддерживаются 32-битные программные модули уровня ядра. Наиболее важно это ограничение для драйверов устройств - отсутствие 64-битных драйверов для используемой аппаратной архитектуры может сделать невозможным использование части аппаратного обеспечения;

- Размещение и использование программных модулей различных технологий - 32-битной и 64-битной - в адресном пространстве одного процесса невозможно. Особенно важно учитывать, что в связи с этим ограничением 32-битные процессы не могут пользоваться 64-битными динамически подгружаемыми модулями (DLL), и 64-битные процессы, аналогично, не могут пользоваться 64-битными модулями;

- Практически все известные методы передачи информации между процессами поддерживаются в среде 64-битной версии Windows независимо от того, на какой технологии основаны процессы, обменивающиеся информацией: 32-битные процессы могут обмениваться информацией как с 32-битными, так и с 64-битными процессами, 64-битные процессы могут обмениваться информацией как с 64-битными, так и с 32-битными процессами. Тем не менее, следует учитывать различия в моделях данных между 32-битной и 64-битной технологиями во избежание потери или ошибочной интерпретации данных, передаваемых между процессами, основанными на различных технологиях.

Вследствие этого переводу парка информационной инфраструктуры с 32-битных версий Windows на 64-битные версии должны предшествовать подробный анализ используемого 32-битного программного обеспечения и существующих его 64-битных аналогов, прогноз его работоспособности в среде 64-битной версии операционной системы и тестирование используемых сценариев работы в лабораторных условиях.

Драйверы устройств и исполняемые модули

Несмотря на то, что Microsoft в настоящее время поддерживает три архитектуры процессоров - x86, x64 и IA64, модули операционных систем, содержащие исполняемые процессорные команды, не являются взаимозаменяемыми. К таким модулям относятся, в первую очередь, драйверы устройств. Дополнительно к ограничению, изложенному выше (32-битные драйверы устройств и модули уровня ядра не работают на

64-битных платформах), появляется еще одно: 64-битные драйверы для архитектуры процессора x64 не работают на компьютерах, оснащенных процессорами архитектуры IA64, и наоборот. Кроме того, программные модули и динамические библиотеки, содержащие исполняемые команды процессоров архитектуры x64, не работают на компьютерах, оснащенных процессорами архитектуры IA64, и наоборот. Это ограничение не распространяется на следующее программное обеспечение:

- 32-битные приложения, выполняемые в среде подсистемы WOW64, эмулирующей архитектуру x86; такие приложения, как правило, поддерживаются на обеих 64-битных архитектурах (х64 и IA64) с незначительными отличиями;

- Программные модули и библиотеки, содержащие символьный код, преобразуемый в исполняемые процессорные команды непосредственно в момент исполнения - например, модули, созданные с помощью технологии разработки управляемых приложений .NET Framework. Такие модули (при условии использования версии .NET Framework не менее 2.0 и использовании при сборке параметра /platform:anycpu) содержат не исполняемые процессорные команды, а символьный код (MSIL -Microsoft Intermediate Language), который преобразуется в команды процессора в момент выполнения кода специальным модулем операционной системы - JIT компилятором (JIT от Just-IN-Time);

Программные модули, созданные на основе скриптовых технологий и обрабатываемые в момент исполнения дополнительными средствами - например, интерпретаторами скриптов - при условии работоспособности этих интерпретаторов на конкретной платформе.

Поддержка 32-битных приложений в среде подсистемы WOW64 не распространяется на 32-битные драйверы устройств (как указано выше). Вместо этого появилось новое, дополнительное требование к драйверам, созданным для 64-битных версий Windows: каждый такой драйвер обязан предоставлять свои службы как 64-битным, так и 32-битным приложениям. Для этого было решено расширить номенклатуру сервисов ядра операционной системы и ввести несколько новых функций, позволяющих драйверу определить, является ли обратившийся к нему процесс 32-битным или 64-битным, и соответственно реагировать. Излишне упоминать, что 64-битные драйверы должны поддерживать модели данных для 32-битной и 64-битной технологий (см. выше).

Средства разработки программного обеспечения

Несмотря на существенную разницу по многим ключевым характеристикам как между 32-битной и 64-битной технологиями, так и между 64-битными процессорными архитектурами - x64 и IA64, средства разработки программного обеспечения для всех вышеупомянутых версий и архитектур Windows по-прежнему консолидированы в единые пакеты.

Минимально необходимый пакет для разработки программного обеспечения под операционные системы Windows - Microsoft Windows Platform SDK [14]. Выпускаемый синхронно с каждой новой версией операционной системы, этот пакет содержит все минимально необходимые модули, библиотеки, ресурсы, документацию и примеры для разработки и сопровождения как 32-битного, так и 64-битного программного обеспечения. Кроме того, в области 64-битных технологий Microsoft Windows Platform SDK поддерживает разработку программного обеспечения для обеих процессорных архитектур - x64 и IA64.

Аналогичными пакетами для разработки программного обеспечения, также с полной параллельной поддержкой архитектур х86, х64 и IA64, являются:

- Windows Driver Foundation (WDF) - разработка модулей уровня ядра операционной системы Windows (драйверов и пр.) [15],

- .NET Framework SDK - разработка приложений на основе .NET Framework [16].

Для организации настоящей профессиональной разработки программного обеспечения и управления связанными с этим производственными процессами Microsoft предлагает линейку продуктов Visual Studio, масштабируемую от бесплатной Express Edition до версии Team Suite с Team Foundation Server [17].

Касательно изменений в методике программирования под операционную систему Windows в связи с переходом на 64-битные технологии следует заметить, что отличий от аналогичной методики для 32-битной технологии относительно мало. В основном, эти изменения коснулись модели данных и нескольких связанных с этим служебных функций Windows. Вследствие этого минимизируются экономические затраты перехода к разработке программного обеспечения для 64-битных технологий: отпадают или остаются пренебрежимо малыми расходы на приобретение новых средств разработки, дополнительное обучение и приобретение опыта разработчиками программ.

64-битные продукты Microsoft

В сфере разделения 32-битной и 64-битной технологий Microsoft придерживается несколько отличных друг от друга стратегий развития программного обеспечения для персональных компьютеров и для серверов. Соответственно стратегии о переводе серверных продуктов полностью на 64-битные технологии, уже длительное время практически все продукты серверной линейки от Microsoft выпускаются либо одновременно для 64-битных и 32-битной технологии (например, Microsoft SQL Server 2008, Microsoft BizTalk Server 2009), либо исключительно для 64-битной технологии (например, Microsoft Exchange Server 2007, Microsoft Exchange Server 2010). В перспективе 32-битные версии серверных продуктов не будут больше производиться. Кроме того, существенно отличается поддержка 64-битных архитектур x64 и IA64: широкомасштабная архитектура x64 поддерживается всеми серверными продуктами Microsoft, в то время как список продуктов Microsoft для узкоспециализированной архитектуры IA64 на сегодняшний день состоит практически исключительно из системы управления базой данных Microsoft SQL Server for IA64, впервые выпущенный в 2003 году как версия Microsoft SQL Server 2000 только для архитектуры IA64.

В области программного обеспечения персональных компьютеров еще долгое время будут поддерживаться архитектуры x86 (32-битная технология) и x64 (64-битная технология), но не IA64, ввиду отсутствия персональных компьютеров на ее основе. Начиная с версии 2010, один из наиболее известных и успешных продуктов Microsoft для персональных компьютеров - Microsoft Office - также увидит свет сразу в двух вариантах: для 32-битной и для 64-битной технологий [18].

Ввиду того, что требования к объемам памяти в сфере персональных компьютеров пока существенно ниже аналогичных требований в сфере серверов, а также с учетом широкого спектра существующего 32-битного программного обеспечения Microsoft будет продолжать выпуск 32-битных версий своих продуктов для персональных компьютеров при постоянном расширении выпуска их 64-битных версий.

Заключение

64-битные технологии Microsoft позволяют снять ограничения прежних 32-битных стандартов адресации памяти и предоставляют массу преимуществ для пользователей и специалистов по разработке, сопровождению и администрированию программного обеспечения. Максимально возможные технический и экономический эффекты от внедрения 64-битных технологий могут быть достигнуты лишь при правильном стратегическом подходе как к переводу существующих ландшафтов информационных систем на новые технологии, так и к созданию новых ландшафтов на их основе,

в том числе - при своевременном фундаментальном предварительном ознакомлении с техническими особенностями новых продуктов и методик.

Как стало известно после завершения работы над статьей, Майкрософт официально объявила 02.04.2010 о прекращении поддержки процессоров Itanium (архитектура IA64) в следующих версиях своих продуктов. Существующие версии продуктов для IA64 будут поддерживаться до конца 2011-2013 годов (в зависимости от типа продукта). Параллельно с этим Майкрософт предлагает широкую программу поддержки перевода пользовательских систем с архитектуры IA64 на x64.

Литература

1. Moore's Law Meets Its Match, IEEE Specturm [Электронный ресурс]. - Режим доступа: http://spectrum.ieee.org/computing/hardware/moores-law-meets-its-match, свободный, язык английский, последний вход 18.03.2010.

2. The Benefits of x64 Technology, Microsoft [Электронный ресурс]. - Режим доступа: http://www.microsoft.com/servers/64bit/x64/benefits.mspx, свободный, язык английский, последний вход 18.03.2010.

3. Intel 64 Architecture, Intel [Электронный ресурс]. - Режим доступа: http://www.intel.com/info/em64t/, свободный, язык английский, последний вход 18.03.2010.

4. AMD64 Solutions, AMD [Электронный ресурс]. - Режим доступа: http://www.amd.com/us/products/technologies/amd-64/Pages/amd-64.aspx, свободный, язык английский, последний вход 18.03.2010.

5. INTEL ITANIUM PROCESSOR FAMILY, Intel, [Электронный ресурс]. - Режим доступа: http://www.intel.com/itcenter/products/itanium/, свободный, язык английский, последний вход 18.03.2010.

6. Scott Townsend, Itanium Processor Family Performance Advantages: Register Stack Architecture, Intel, [Электронный ресурс]. - Режим доступа: http://software.intel.com/en-us/articles/itaniumr-processor-family-performance-advantages-register-stack-architecture/, свободный, язык английский, последний вход 18.03.2010.

7. Leonid Baraz, Tevi Devor, Orna Etzion, Shalom Goldenberg, Alex Skaletsky, Yun Wang and Yigal Zemach, IA-32 Execution Layer: a two-phase dynamic translator designed to support IA-32 applications on Itanium-based systems, Intel [Электронный ресурс]. -Режим доступа: http://software.intel.com/en-us/articles/ia-32-execution-layer-technical-whitepaper/, свободный, язык английский, последний вход 18.03.2010.

8. Memory Limits for Windows Releases, Microsoft [Электронный ресурс]. - Режим доступа: http://msdn.microsoft.com/en-us/library/aa366778%28VS.85%29.aspx, свободный, язык английский, последний вход 18.03.2010.

9. 4-Gigabyte Tuning, Microsoft [Электронный ресурс], режим доступа: http://msdn.microsoft.com/en-us/library/bb613473%28VS.85%29.aspx, свободный, язык английский, последний вход 18.03.2010.

10. Operating Systems and PAE Support, Microsoft [Электронный ресурс]. - Режим доступа: http://www.microsoft.com/whdc/system/platform/server/PAE/pae_os.mspx, свободный, язык английский, последний вход 18.03.2010.

11. Michael Kanellos , HP discontinues its Itanium workstations [Электронный ресурс]. -Режим доступа: http://news.cnet.com/HP-discontinues-its-Itanium-workstations/2100-1006_3-5381398.html, свободный, язык английский, последний вход 18.03.2010.

БЫСТРЫЙ ЛОГИЧЕСКИЙ ВЫВОД В СРЕДЕ ПРОГРАММИРОВАНИЯ ...

12. Mike Becker, 64-Bit-Technologie von Microsoft, Microsoft [Электронный ресурс]. -Режим доступа: http://msdn.microsoft.com/de-de/library/bb978906.aspx, свободный, язык немецкий, последний вход 18.03.2010.

13. Running 32-bit Applications, Microsoft [Электронный ресурс]. - Режим доступа: http://msdn.microsoft.com/en-us/library/aa384249%28VS.85%29.aspx, свободный, язык английский, последний вход 18.03.2010.

14. Windows SDK for Windows Server 2008 and .NET Framework, Microsoft [Электронный ресурс]. - Режим доступа: 3.5http://www.microsoft.com/downloads/details.aspx?familyid=E6E1C3DF-A74F-4207-8586-711EBE331CDC&displaylang=en, свободный, язык английский, последний вход 18.03.2010.

15. Windows Driver Foundation (WDF), Microsoft [Электронный ресурс]. - Режим доступа: http://www.microsoft.com/whdc/driver/wdf/default.mspx, свободный, язык английский, последний вход 18.03.2010.

16. The .NET Framework, Microsoft [Электронный ресурс]. - Режим доступа: http://www.microsoft.com/net/, свободный, язык английский, последний вход 18.03.2010.

17. Team Foundation Server Home, Microsoft [Электронный ресурс]. - Режим доступа: http://msdn.microsoft.com/en-us/teamsystem/dd408382.aspx, свободный, язык английский, последний вход 18.03.2010.

18. 64-Bit-Editionen von Office 2010, Microsoft [Электронный ресурс]. - Режим доступа: http://technet.microsoft.com/de-de/library/ee681792%28office.14%29.aspx, свободный, язык немецкий, последний вход 18.03.2010.

Беккер Михаил Яковлевич - Microsoft Germany GmbH, ведущий консультант, выпускник СПбГУ

ИТМО, mbecker@microsoft.com

УДК 004.89

БЫСТРЫЙ ЛОГИЧЕСКИЙ ВЫВОД В СРЕДЕ ПРОГРАММИРОВАНИЯ VISUAL PROLOG

И.А. Бессмертный

В статье обсуждается реализация логического вывода в системах искусственного интеллекта, построенных на продукционной модели знаний, с использованием теоретико-множественных операций в среде программирования Visual Prolog. Предлагается набор предикатов, реализующих быстрое выполнение операций реляционной алгебры. Приводятся результаты натурных экспериментов, подтверждающих существенное, не менее чем на три порядка, ускорение логического вывода для баз знаний с большим числом фактов.

Ключевые слова: искусственный интеллект, реляционная алгебра, Prolog

Введение

Язык программирования Prolog, имеющий встроенный механизм исчисления предикатов MODUS PONENS, является привлекательным инструментом для построения систем искусственного интеллекта, поскольку конструкции на языке Prolog максимально приближены к логическим выражениям, которыми может быть описана решаемая проблема. Обратной стороной изящности Prolog-программ является их низкая производительность в связи с тем, что резолюция цели достигается путем «наивного» логического вывода, т.е. перебора всех возможных вариантов, а значит, обхода всех ветвей на дереве решений.