Здавалка
Главная | Обратная связь

Программная модель AMD64



 

Практически все современные операционные системы сейчас имеют версии для архитектуры AMD64. Так Microsoft предоставляет Windows XP 64bit, Windows Server 2003 64bit, Windows Vista 64bit. Крупнейшие разработчики UNIX систем также поставляют 64-битные версии, как например Linux Debian 3.1 x86-64. Однако это не означает, что весь код такой системы является полностью 64-битным. Часть кода ОС и многие приложения вполне могут оставаться 32-битными, т.к. AMD64 обеспечивает обратную совместимость.

64-битная версия Windows, к примеру, использует специальный режим WoW (Windows-on-Windows 64), который транслирует вызовы 32-битных приложений к ресурсам 64-битной операционной системы. Рассмотрим более подробно программную модель AMD64, доступную программисту в 64-битной системе Windows, для краткости называемой Win64.

Начнем с адресного пространства. Хотя 64-битный процессор теоретически может адресовать 16 экзабайт памяти (2^64), Win64 в настоящий момент поддерживает 16 терабайт (2^44). Этому есть несколько причин. Текущие процессоры могут обеспечивать доступ лишь к 1 терабайту (2^40) физической памяти. Архитектура (но не аппаратная часть) может расширить это пространство до 4 петабайт (2^52). Однако в любом случае, необходимо огромное количество памяти для страничных таблиц, отображающих память (см. таблицу 3).

  32-битный режим 64-битный режим
Общее адресное пространство процесса 4Гб 16Тб
Адресное пространство, доступное 32-битному процессу 2Гб (3Гб, если система загружена с ключом /3GB) 4Гб, если приложение скомпилировано с ключом /LARGEADDRESSAWARE (2Гб иначе)
Адресное пространство, доступное 64-битному процессу Невозможно 8Тб
Нерезидентный пул (paged pool) 470Мб 128Гб
Резидентный пул (non-paged pool) 256Мб 128Гб
System Page Table (PTE) 660Мб - 900Мб 128Гб

Таблица 3. Основные ограничения памяти в Windows

Как и в Win32, адресуемый диапазон памяти делится на пользовательские адреса и на системные. Каждый процесс получает 8Тб и 8Тб остается системе (в отличие от 2Гб и 2Гб в Win32 соответственно). Различные версии Windows имеют различные ограничения, представленные в таблице 4.

Физическая память и количество процессоров 32-битные модели 64-битные модели
Windows XP Home 4 Гбайт, 1 CPU Не существует
Windows XP Professional 4 Гбайт, 1-2 CPU 128 Гбайт, 1-2 CPU
Windows Server 2003, Standard 4 Гбайт, 1-4 CPU 32 Гбайт, 1-4 CPU
Windows Server 2003, Enterprise 64 Гбайт, 1-8 CPU 1 Тбайт, 1-8 CPU
Windows Server 2003, Datacenter 64 Гбайт, 8-32 CPU 1 Тбайт, 8-64 CPU
Windows Server 2008, Datacenter 64 Гбайт, 2-64 CPU 2 Тбайт, 2-64 CPU
Windows Server 2008, Enterprise 64 Гбайт, 1-8 CPU 2 Тбайт, 1-8 CPU
Windows Server 2008, Standard 4 Гбайт, 1-4 CPU 32 Гбайт, 1-4 CPU
Windows Server 2008, Web Server 4 Гбайт, 1-4 CPU 32 Гбайт, 1-4 CPU
Vista Home Basic 4 Гбайт, 1 CPU 8 Гбайт, 1 CPU
Vista Home Premium 4 Гбайт, 1-2 CPU 16 Гбайт, 1-2 CPU
Vista Business 4 Гбайт, 1-2 CPU 128 Гбайт, 1-2 CPU
Vista Enterprise 4 Гбайт, 1-2 CPU 128 Гбайт, 1-2 CPU
Vista Ultimate 4 Гбайт, 1-2 CPU 128 Гбайт, 1-2 CPU

Таблица 4.Ограничения различных версий Windows.

Также как и в Win32 размер страницы составляет 4Кб. Первые 64Кб адресного пространства никогда не отображаются, т.е. наименьший правильный адрес это 0x10000. В отличие от Win32, системные DLL загружаются выше 4Гб.

Все процессоры, реализующие AMD64, имеют поддержку для "CPU No Execution" бита, который Windows использует для реализации аппаратной технологии "Data Execution Protection" (DEP), которая запрещает исполнение пользовательских данных вместо кода. Это позволяет повысить надежность программ, исключая влияние ошибок типа выполнения буфера с данными как кода.

Особенность компиляторов для AMD64 в том, что они могут наиболее эффективно использовать регистры для передачи параметров в функции, вместо использования стека. Это позволило разработчикам Win64 архитектуры избавиться от такого понятия как соглашение о вызовах (calling convention). В Win32 можно использовать разные соглашения (способы передачи параметров): __stdcall, __cdecl, __fastcall и т.д. В Win64 есть только одно соглашение о вызовах. Рассмотрим пример, как передаются в регистрах четыре аргумента типа integer:

· RCX: первый аргумент

· RDX: второй аргумент

· R8: третий аргумент

· R9: четвертый аргумент

Аргументы после первых четырех integer передаются на стеке. Для float аргументов используются XMM0-XMM3 регистры, а также стек.

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

При написании 64-битного кода можно получить дополнительный выигрыш в производительности за счет специальной оптимизации. Подробно этот вопрос рассмотрен в руководстве по оптимизации.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.