company_banner

64 бита


    Статья раскрывает смысл термина «64 бита». В статье кратко рассмотрена история развития 64-битных систем, описаны наиболее распространенные на данный момент 64-битные процессоры архитектуры Intel 64 и 64-битная операционная система Windows.


    Введение


    В рамках архитектуры вычислительной техники под термином «64-битный» понимают 64-битные целые и другие типы данных, имеющих размер 64 бита. Под «64-битными» системами могут пониматься 64-битные архитектуры микропроцессоров (например, EM64T, IA-64) или 64-битные операционные системы (например, Windows XP Professional x64 Edition). Можно говорить о компиляторах, генерирующих 64-битный программный код.

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

    История 64-битных систем


    64-битность только недавно вошла в жизнь большинства пользователей и прикладных программистов. Однако работа с 64-битными данными имеет уже длинную историю.

    1961: IBM выпускает суперкомпьютер IBM 7030 Stretch, в котором используются 64-битные слова данных, 32-битные или 64-битные машинные инструкции.

    1974: Control Data Corporation запускает векторный суперкомпьютер CDC Star-100, в котором используется архитектура 64-битных слов (предыдущие системы CDC имели 60-битную архитектуру).

    1976: Cray Research выпускает первый суперкомпьютер Cray-1, в котором реализована архитектура 64-битных слов и который послужит основой для всех последующих векторных суперкомпьютеров Cray.

    1985: Cray выпускает UNICOS — первую 64-битную реализацию операционной системы Unix.

    1991: MIPS Technologies производит первый 64-битный процессор, R4000, в котором реализована третья модификация разработанной в их компании архитектуры MIPS. Этот процессор используется в графических рабочих станциях SGI начиная с модели IRIS Crimson. Kendall Square Research выпускает свой первый суперкомпьютер KSR1, построенный на основе их собственной запатентованной 64-битной архитектуры RISC под операционной системой OSF/1.

    1992: Digital Equipment Corporation (DEC) представляет полностью 64-битную архитектуру Alpha — детище проекта PRISM.

    1993: DEC выпускает 64-битную Unix-подобную операционную систему DEC OSF/1 AXP (позже переименованную в Tru64 UNIX) для своих систем, построенных на архитектуре Alpha.

    1994: Intel объявляет о своих планах по разработке 64-битной архитектуры IA-64 (совместно с компанией Hewlett-Packard) — преемника их 32-битных процессоров IA-32. Дата выпуска назначена на 1998-1999 годы. SGI выпускает IRIX 6.0 с 64-битной поддержкой чипсета R8000.

    1995: Sun запускает 64-битный процессор семейства SPARC UltraSPARC. HAL Computer Systems, подчиненная Fujitsu, запускает рабочие станции, созданные на основе 64-битного процессора SPARC64 первого поколения, независимо разработанного компанией HAL. IBM выпускает микропроцессоры A10 и A30, а также 64-битные процессоры PowerPC AS. IBM также выпускает 64-битное обновление для системы AS/400, способное преобразовывать операционную систему, базы данных и приложения.

    1996: Nintendo представляет игровую консоль Nintendo 64, созданную на основе более дешевого варианта MIPS R4000. HP выпускает реализацию 64-битной 2.0 версии собственной архитектуры PA-RISC PA-8000.

    1997: IBM запускает линейку RS64 64-битных процессоров PowerPC/PowerPC AS.

    1998: Sun выпускает Solaris 7 с полной 64-битной поддержкой UltraSPARC.

    1999: Intel выпускает набор команд для архитектуры IA-64. AMD публично объявляет о своем наборе 64-битных расширений для IA-32, который был назван x86-64 (позже переименован в AMD64).

    2000: IBM выпускает свой первый 64-битный мэйнфрейм zSeries z900, совместимый с ESA/390, а также новую операционную систему z/OS.

    2001: Intel наконец запускает линейку 64-битных процессоров, которые теперь получают название Itanium и рассчитаны на высокопроизводительные серверы. Проект не соответствует ожиданиям из-за многочисленных задержек при выпуске IA-64 на рынок. NetBSD становится первой операционной системой, которая запускается на процессоре Intel Itanium после его выхода. Кроме того, Microsoft также выпускает Windows XP 64-Bit Edition для архитектуры IA-64 семейства Itanium, хотя в ней сохраняется возможность запускать 32-битные приложения при помощи прослойки WoW64.

    2003: AMD представляет линейки процессоров Opteron и Athlon 64, созданные на основе архитектуры AMD64, которая является первой 64-битной процессорной архитектурой, основанной на архитектуре x86. Apple начинает использовать 64-битный процессор «G5» PowerPC 970 производства IBM. Intel утверждает, что процессорные чипы семейства Itanium останутся единственными 64-битными процессорами, разработанными в их компании.

    2004: В ответ на коммерческий успех AMD, Intel признается, что они разрабатывали клон расширений AMD64, которому дали название IA-32e (позже переименован в EM64T, и затем еще раз в Intel 64). Intel также выпускает обновленные версии семейств процессоров Xeon и Pentium 4 с поддержкой новых команд.

    2004: VIA Technologies представляет свой 64-битный процессор Isaiah.

    2005: 31 января Sun выпускает Solaris 10 с поддержкой процессоров AMD64 / Intel 64. 30 апреля Microsoft выпускает Windows XP Professional x64 Edition для процессоров AMD64 / Intel 64.

    2006: Sony, IBM и Toshiba начинают выпуск 64-битного процессора Cell для PlayStation 3, серверов, рабочих станций и других устройств. Microsoft выпускает Windows Vista с включенной 64-битной версией для процессоров AMD64 / Intel 64, которая поддерживает 32-битную совместимость. Все Windows-приложения и компоненты являются 64-битными, однако многие из них имеют 32-битные версии, включенные в систему в виде плагинов в целях совместимости.

    2009: Как и Windows Vista, Windows 7 компании Microsoft включает полную 64-битную версию для процессоров AMD64 / Intel 64, и на большинство новых компьютеров по умолчанию устанавливается 64-битная версия. Выходит операционная система компании Apple Mac OS X 10.6, «Snow Leopard» которая имеет 64-битное ядро и предназначена для процессоров AMD64 / Intel 64, однако по умолчанию эта система устанавливается только на некоторые из последних моделей компьютеров компании Apple. Большинство приложений, поставляемых с Mac OS X 10.6, теперь также являются 64-битными.

    Более подробно с историей развития 64-битных систем можно познакомиться в статье Джона Машей "Долгая дорога к 64 битам" [1] и в энциклопедической статье в Wikipedia "64-bit" [2].

    Прикладное программирование и 64-битные системы


    На момент написания статьи в 2010 году, наиболее известными и распространенными являются две 64-битные архитектуры микропроцессоров: IA64 и Intel 64.
    1. IA-64 64-битная микропроцессорная архитектура, разработанная совместно компаниями Intel и Hewlett Packard. Реализована в микропроцессорах Itanium и Itanium 2. Для более подробного знакомства с архитектурой IA-64 можно обратиться к следующим статьям в Wikipedia: "IA-64", "Itanium", "Itanium 2". Архитектуру Itanium поддерживает большое количество производителей серверов: Bull, Fujitsu, Fujitsu Siemens Computers, Hitachi, HP, NEC, SGI и Unisys. Эти производители присоединились к Intel и множеству разработчиков ПО для создания Itanium Solutions Alliance, с целью продвижения архитектуры и ускорения темпов портирования ПО.
    2. Intel 64 (AMD64 / x86-64 / x64 / EM64T) — данная архитектура представляет собой расширение архитектуры x86 с полной обратной совместимостью. Существует множество вариантов названия данной архитектуры, что приводит к путанице, хотя, по сути, все эти названия обозначают одно и тоже: x86-64, AA-64, Hammer Architecture, AMD64, Yamhill Technology, EM64T, IA-32e, Intel 64, x64. Более подробно узнать о том, как появилось так много названий, можно в статье из Wikipedia: "X86-64". Процессоры с архитектурой Intel 64 нашли широкое распространение персональных компьютерах. И скорее всего ваш компьютер оснащен именно процессором с данной архитектурой.
    Важно понимать, что IA-64 и Intel 64 (AMD64) это совершенно разные, несовместимые друг с другом, микропроцессорные архитектуры. Далее в статье мы будем рассматривать только архитектуру Intel 64 (x64 / AMD64), как более популярную среди разработчиков прикладного программного обеспечения для операционной системы Windows. Для краткости программную модель Intel 64, доступную программисту в 64-битной системе Windows, называют Win64.

    Архитектура Intel 64 (AMD64)


    Рассматриваемая архитектура Intel 64 простое, но в то же время мощное обратно совместимое расширение устаревшей промышленной архитектуры x86. Она добавляет 64-битное адресное пространство и расширяет регистровые ресурсы для поддержки большей производительности перекомпилированных 64-битных программ. Архитектура обеспечивает поддержку устаревшего 16-битного и 32-битного кода приложений и операционных систем без их модификации или перекомпиляции.

    Отличительной особенностью Intel 64 является поддержка шестнадцати 64-битных регистров общего назначения (в x86-32 имелось восемь 32-битных регистров). Поддерживаются 64-битные арифметические и логические операции над целыми числами. Поддерживаются 64-битные виртуальные адреса. Для адресации новых регистров для команд введены «префиксы расширения регистра», для которых был выбран диапазон кодов 40h-4Fh, использующихся для команд INC <регистр> и DEC <регистр> в 32- и 16-битных режимах. Команды INC и DEC в 64-битном режиме должны кодироваться в более общей, двухбайтовой форме.

    Регистры:

    16 целочисленных 64-битных регистра общего назначения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 — R15),
    8 80-битных регистров с плавающей точкой (ST0 — ST7),
    8 64-битных регистров Multimedia Extensions (MM0 — MM7, имеют общее пространство с регистрами ST0 — ST7),
    16 128-битных регистров SSE (XMM0 — XMM15),
    64-битный указатель RIP и 64-битный регистр флагов RFLAGS.

    Необходимость 64-битной архитектуры определяется приложениями, которым необходимо большое адресное пространство. В первую очередь это высокопроизводительные серверы, системы управления базами данных, САПР и, конечно, игры. Такие приложения получат существенные преимущества от 64-битного адресного пространства и увеличения количества регистров. Малое количество регистров, доступное в устаревшей x86 архитектуре, ограничивает производительность в вычислительных задачах. Увеличенное количество регистров обеспечивает достаточную производительность для многих приложений.

    Подчеркнем основные достоинства архитектуры x86-64:
    • 64-битное адресное пространство;
    • расширенный набор регистров;
    • привычный для разработчиков набор команд;
    • возможность запуска старых 32-битных приложений в 64-битной операционной системе;
    • возможность использования 32-битных операционных систем.

    64-битные операционные системы


    Практически все современные операционные системы сейчас имеют версии для архитектуры Intel 64. Например, Microsoft предоставляет Windows XP x64. Крупнейшие разработчики UNIX систем также поставляют 64-битные версии, как например Linux Debian 3.5 x86-64. Однако это не означает, что весь код такой системы является полностью 64-битным. Часть кода ОС и многие приложения вполне могут оставаться 32-битными, так как Intel 64 обеспечивает обратную совместимость с 32-битными приложениями. Например, 64-битная версия Windows использует специальный режим WoW64 (Windows-on-Windows 64), который транслирует вызовы 32-битных приложений к ресурсам 64-битной операционной системы.

    Далее в статье мы будем рассматривать только 64-битные операционные системы семейства Windows.

    WoW64


    Windows-on-Windows 64-bit (WoW64) — подсистема операционной системы Windows, позволяющая запускать 32-битные приложения на всех 64-битных версиях Windows.

    Подсистема WoW64 не поддерживает следующие программы:
    • программы, скомпилированные для 16-разрядных операционных систем;
    • программы режима ядра, скомпилированные для 32-разрядных операционных систем.

    Существуют различия WoW64 в зависимости от архитектуры процессора. Например, 64-битная версия Windows разработанная для процессора Intel Itanium 2 использует WoW64 для эмуляции x86 инструкций. Такая эмуляция весьма ресурсоемка по сравнению с WoW64 для архитектуры Intel 64, так как происходит переключение с 64-битного режима в режим совместимости, при выполнении 32-битных программ.

    WoW64 на архитектуре Intel 64 (AMD64 / x64) не требует эмуляции инструкций. Здесь подсистема WoW64 эмулирует только 32-битное окружение, за счет дополнительной прослойки между 32-битным приложением и 64-битным Windows API. Где-то эта прослойка тонкая, где-то не очень. Для средней программы потери в производительности из-за наличия такой прослойки составят около 2%. Для некоторых программ это значение может быть больше. Два процента это немного, но следует учитывать, что 32-битные приложения работают немного медленнее под управлением 64-битной операционной системы Windows, чем в 32-битной среде.

    Компиляция 64-битного кода не только исключает необходимость в WoW64, но и дает дополнительный прирост производительности. Это связано с архитектурными изменениями в микропроцессоре, такими как увеличение количества регистров общего назначения. Для средней программы можно ожидать в пределах 5-15% прироста производительности от простой перекомпиляции.

    Из-за наличия прослойки WoW64 32-битные программы работают менее эффективно в 64-битной среде, чем в 32-битной. Но все-таки, простые 32-битные приложения могут получить одно преимущество от их запуска в 64-битной среде. Вы, наверное, знаете, что программа, собранная с ключом /LARGEADDRESSAWARE:YES может выделять до 3-х гигабайт памяти, если 32-битная операционная система Windows запущена с ключом /3gb. Так вот, эта же 32-битная программа, запущенная на 64-битной системе, может выделить почти 4 GB памяти (на практике около 3.5 GB).

    Подсистема WoW64 изолирует 32-разрядные программы от 64-разрядных путем перенаправления обращений к файлам и реестру. Это предотвращает случайный доступ 32-битных программ к данным 64-битных приложений. Например, 32-битное приложение, которое запускает файл DLL из каталога %systemroot%\System32, может случайно обратиться к 64-разрядному файлу DLL, который несовместим с 32-битной программой. Во избежание этого подсистема WoW64 перенаправляет доступ из папки %systemroot%\System32 в папку %systemroot%\SysWOW64. Это перенаправление позволяет предотвратить ошибки совместимости, поскольку при этом требуется файл DLL, созданный специально для работы с 32-разрядными приложениями.

    Подробнее с механизмами перенаправления файловой системы и реестра можно познакомиться в разделе MSDN "Running 32-bit Applications".

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


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

    Особенность компиляторов для Intel 64 в том, что они могут наиболее эффективно использовать регистры для передачи параметров в функции, вместо использования стека. Это позволило разработчикам Win64 архитектуры избавиться от такого понятия как соглашение о вызовах (calling convention). В Win32 можно использовать разные соглашения: __stdcall, __cdecl, __fastcall и так далее. В Win64 есть только одно соглашение о вызовах. Рассмотрим пример, как передаются в регистрах четыре аргумента типа integer:
    • RCX: первый аргумент
    • RDX: второй аргумент
    • R8: третий аргумент
    • R9: четвертый аргумент
    Аргументы после первых четырех integer передаются на стеке. Для float аргументов используются XMM0-XMM3 регистры, а также стек.

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

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

    Адресное пространство


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

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

    Windows XP Professional — 128 Gbyte;
    Windows Server 2003, Standard — 32 Gbyte;
    Windows Server 2003, Enterprise — 1 Tbyte;
    Windows Server 2003, Datacenter — 1 Tbyte;
    Windows Server 2008, Datacenter — 2 Tbyte;
    Windows Server 2008, Enterprise — 2 Tbyte;
    Windows Server 2008, Standard — 32 Gbyte;
    Windows Server 2008, Web Server — 32 Gbyte;
    Vista Home Basic — 8 Gbyte;
    Vista Home Premium — 16 Gbyte;
    Vista Business — 128 Gbyte;
    Vista Enterprise — 128 Gbyte;
    Vista Ultimate — 128 Gbyte;
    Windows 7 Home Basic — 8 Gbyte;
    Windows 7 Home Premium — 16 Gbyte;
    Windows 7 Professional — 192 Gbyte;
    Windows 7 Enterprise — 192 Gbyte;
    Windows 7 Ultimate — 192 Gbyte;

    Разработка 64-битных приложений


    Наиболее полно вопросы разработки 64-битных приложений рассмотрены в курсе "Уроки разработки 64-битных приложений на языке Си/Си++". Содержание:

    Урок 01. Что такое 64-битные системы.
    Урок 02. Поддержка 32-битных приложений.
    Урок 03. Перенос кода на 64-битные системы. За и против.
    Урок 04. Создание 64-битной конфигурации.
    Урок 05. Сборка 64-битного приложения.
    Урок 06. Ошибки в 64-битном коде.
    Урок 07. Проблемы выявления 64-битных ошибок.
    Урок 08. Статический анализ для выявления 64-битных ошибок.
    Урок 09. Паттерн 01. Магические числа.
    Урок 10. Паттерн 02. Функции с переменным количеством аргументов.
    Урок 11. Паттерн 03. Операции сдвига.
    Урок 12. Паттерн 04. Виртуальные функции.
    Урок 13. Паттерн 05. Адресная арифметика.
    Урок 14. Паттерн 06. Изменение типа массива.
    Урок 15. Паттерн 07. Упаковка указателей.
    Урок 16. Паттерн 08. Memsize-типы в объединениях.
    Урок 17. Паттерн 09. Смешанная арифметика.
    Урок 18. Паттерн 10. Хранение в double целочисленных значений.
    Урок 19. Паттерн 11. Сериализация и обмен данными.
    Урок 20. Паттерн 12. Исключения.
    Урок 21. Паттерн 13. Выравнивание данных.
    Урок 22. Паттерн 14. Перегруженные функции.
    Урок 23. Паттерн 15. Рост размеров структур.
    Урок 24. Фантомные ошибки.
    Урок 25. Практическое знакомство с паттернами 64-битных ошибок.
    Урок 26. Оптимизация 64-битных программ.
    Урок 27. Особенности создания инсталляторов для 64-битного окружения.
    Урок 28. Оценка стоимости процесса 64-битной миграции Си/Си++ приложений.

    Также рекомендую раздел с обзорами статей по тематике связанной с 64-битнми технологиями.

    Библиографический список

    1. Джон Р. Машей. Долгая дорога к 64 битам. http://www.viva64.com/go.php?url=321
    2. Wikipedia. 64-bit. http://www.viva64.com/go.php?url=203
    Intel
    178.08
    Company
    Share post

    Comments 80

      –7
      16 целочисленных 64-битных регистра общего назначения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 — R15)

      Рассмотрим пример, как передаются в регистрах четыре аргумента типа integer:
      RCX: первый аргумент
      RDX: второй аргумент
      R8: третий аргумент
      R9: четвертый аргумент


      integer тут который понимается? 64хбитный? А как будут 32хбитные инты передаваться в 64хбитном приложении? Или они всё равно выравниванием превратятся в 64хбитные?
        +2
        Здесь под integer, передаваемом в 64-битном регистре, стоит понимать любой целочисленный тип или указатель. (short, unsigned, DWORD_PTR, ...).
          +1
          Если что, EAX, EBX и др. никто не отменял.
          –9
          Ха-ха. Напомню что первыми 64 разрядные процессоры для настольных ПК были у AMD: потому архитектура и называется AMD64. К тому же ОС Windows не 64 разрядная, уж больно в ней много 32 битного.
            –3
            Главное что там ядро таки 64разрядное, но конечно вин разрабы уж очень люто слоупочат. Иной раз просто не по себе становится, когда даже в Win7 находишь куски которые не обновлялись со времен вин95.
              0
              Брэхня, в Windows NT-ядре не осталось кода от DOSа. Учитывая количество модификаций и то, что семерка все же на MinWin…

              и, да, как в х64 остались 16битные куски, которые под ней не работают?
                0
                Вин95 таки была 32 битной уже. Иконки вот точно некоторые с 95 года тянутся, да и диалоги некоторые ну к примеру в ИЕ уже точно лет 10 не обновлялись
                  0
                  Миллениум(после 98ой) — и та была 16/32, а 95ая, значит, была 32 целиком? Странно.
                    0
                    Ну так там коктейл был, но юзерспейс проги то дефолтовые были вин32. Таки да вин16 проги по другому выглядят
            +43
            Название AMD64 — батхёрт для интела. Есть i386, есть AMD64. Усё. Навсегда.
              +2
              Ужас, невозможно, когда столько маркетинга в технической статье.
              «Архитектура Intel 64 бла-бла-бла»
                +4
                x86-64 (также x64/AMD64/Intel64/EM64T) — 64-битная аппаратная платформа: архитектура микропроцессора и соответствующий набор инструкций и чипсет, разработанные компанией AMD. Это расширение архитектуры x86 с полной обратной совместимостью. Набор инструкций x86-64 в настоящее время поддерживается процессорами AMD Athlon 64, Athlon 64 FX, Athlon 64 X2,Phenom, Phenom II, Turion 64, Opteron, последними моделями Sempron. Этот набор инструкций поддержан компанией Intel (с незначительными дополнениями) под названием Intel 64

                Wikipedia
            • UFO just landed and posted this here
                –1
                Да уж… без описания Unix'ового ABI и в частности OS X'овского формата universal binary статья ну никак не может претендовать на полный охват
                  0
                  Можете дополнить? Напишите небольшой раздел — я вставлю в статью.
                    –1
                    Я сам то не слишком большой спец в этом деле, хотя собирал когда-то и Universal binary, там бинарники и dylib'ы содержат код для всех архитектур и на нужной архитектуре в память только нужный код загружается.
                  • UFO just landed and posted this here
                  +2
                  Да, из могучих старичков не выжил никто, ни Cray, ни DEC, ни даже Sun… А как много они сделали для развития отрасли!
                    0
                    Cray говорите не выжил?
                      +2
                      больше на конвульсии похоже…
                    +16
                    «AMD64» в тегах нехватает
                      0
                      Ох. Уговорили. В теги добавил. :)
                      0
                      Процессоры с архитектурой Intel 64 нашли широкое распространение персональных компьютерах. И скорее всего ваш компьютер оснащен именно процессором с данной архитектурой.

                      Хм, вот у меня в ноуте стоит процессор Core 2 Duo T7100, если верить википендии то он поддерживает этот набор инструкций. Но почему же при попытке поставить ось х64 выскакивает сообщение мол ай-яй-яй и всё такое. Это я дурак или ось виновата?
                        +2
                        Должно ставится, core2 duo специально 64 битным разрабатывался
                          +1
                          Если верить официальному сайту — справочнику по процессорам Intel :) то 64-битные инструкции поддерживаются. Попробуйте еще раз ;)
                            +11
                            Оно у вас не при попытке запустить 64-битный инсталлятор под 32-битной осью ругается?
                              –6
                              Вы из-под винды ставились? И, да, зачем на ноуте х64? Лишние 700 метров рамки отхватить?
                              +2
                              Добротная статья. Спасибо. А почему здесь Вы говорили только про Windows?
                                +3
                                1) Тематика 64-битности актуальней для пользователей/программистов Windows. В Unix/Linux/… 64-битность прижилась как то быстрее и проще. Возможно из-за того, что эти системы традиционно работают на более разнообразных аппаратных платформах.
                                2) Я лучше знаком с Windows. Считаю что лучше писать о том, что знаешь, чем заниматься бездумной компиляцией текстов. Это не избавляет от всех ошибок и неточностей, но по крайней мере и нет откровенной технической глупости, как это нередко бывает.
                                  +1
                                  Меня сравнение рассмешило.
                                  «Debian 3.5 x86-64»

                                  Эт как-то странно. То что 6-ая версия Debian на носу, вас не интересует?
                                  Сижу на Debian/Kubuntu x64, даже слой совместимости ia32 не установлен, и ничего.

                                  Это у вас там не всё выпилено, не надо тут третий дебиан вспоминать.
                                –5
                                Статья хорошая, но видно, что некоторые источники весьма устарели:
                                Практически все современные операционные системы сейчас имеют версии для архитектуры Intel 64. Например, Microsoft предоставляет Windows XP x64.
                                  +2
                                  Ага, с учетом того, что Солярка на спарках была 64 битной еще стопицот лет назад.
                                    0
                                    Ну тогда надо бы вспомнить, что NT на Альфах была 64-битной тоже с самого начала
                                  0
                                  Статья сильно проинтеловская и даже промайкрософсткая. Еще AMD Athlon поддерживали 64 бита, процессоры от intel тогда этим похвастаться не могли.
                                    +9
                                    Ну какбы в блоге Интела сложно было бы встретить проамдешную статью
                                      +3
                                      Справедливости ради надо заметить, что Интел не сильно опоздали с выходом на рынок. Уже в 2005 году у меня был Pentium4 531, который поддерживал EM64T. Модель 541, а также более поздние прескотты тоже поддерживали x64.
                                      –4
                                      *Написано по нерусски.

                                      з.ы. в архитектуре вообще ничего не понимаю((
                                        0
                                        а можно подробнее про:
                                        «приложения получат существенные преимущества от 64-битного адресного пространства и увеличения количества регистров. Малое количество регистров, доступное в устаревшей x86 архитектуре, ограничивает производительность в вычислительных задачах.»
                                        каким образом?
                                          0
                                          Большой объем оперативной памяти дает колоссальный прирос производительности на ряде задач. Если удается держать все данные в памяти, то производительность из-за отсутствия работы с жестким диском, может вырасти на порядок. Можно использовать алгоритмы, получающие выигрыш от дополнительного объема памяти. В ряде случаев упрощается программирование, так как не следует думать о барьере в 2 гигабайта. Большее количество регистров позволяет передавать в них параметры, позволяет компилятору лучше оптимизировать код. Дополнительные регистры позволяют реже обращаться к памяти, чтобы сохранять значения переменных.
                                            0
                                            про память то ясно, вопрос был именно про регистры. зависимость производительности от количества регистров (не размерности)
                                              +4
                                              Кажется преимущество достаточно очевидно. Есть абстрактный алгоритм в циклах:
                                              for (size_t i = 0; i < a; i++)
                                                for (size_t j = 0; j < b; j++)
                                                  for (size_t k = 0; k < c; k++)
                                                  {
                                                    // Алгоритм
                                                  }
                                              

                                              Раньше, чтобы выполнить код алгоритма внутри циклов, нам могло не хватать регистров для хранения значений i, j, k и требовалось сохранить эти значение в памяти. Теперь регистров может хватить. Следствие — сокращение обращения к памяти и просто устранение лишних операций.
                                                0
                                                да, извините, 2 суток не спал, почему-то переклинило — думал что говорю о списке инструкций процессора, когда говорил про количество регистров.
                                                  +1
                                                  Иногда ощущение, что на Хабре сидят исключительно неспящие по два-три дня.
                                                +2
                                                Регистры — это часть процессора и работают они со скоростью процессора. Плюс к ним не надо стучаться через материнскую плату. Чем больше в них можно всунуть данных, тем лучше. Оператива-таки большой тормоз по сравнению с процом. Обычно в функции передаётся не более четырёх параметров — всё что больше считается плохим тоном. Да и вообще не так часто надо. Тем не менее иметь несколько регистров про запас — это значит что 90% функций будут общаться через регистры. Перформанс сильно возрастает.
                                            0
                                            Windows Server 2008, Enterprise — 2 Tbyte;

                                            Как можно засунуть столько? Вообще поясните мне как подключаются большие объемы памяти типа 64, 128 Гб. Спасибо.
                                              +3
                                              Ну уж не в десктопные материнки, явно. Некоторые серверные платформы это позволяют.
                                                +6
                                                  0
                                                  Фотка ваша? Какую задачу решает подобный сервер?
                                                +2
                                                Если вас интересует физическая сторона вопроса, то она решается экстенсивными методами.

                                                Если программная, то советую почитать про механизмы PAE ну и виртуальную память вообще.
                                                  0
                                                  Мне интересно следующее: вот мне нужно засунуть в сервер 1Tb оперативной памяти. Как мне решить эту задачу? А 2Tb возможно? А сколько максимум? Я не про программное ограничение в 64 бита, чисто аппаратный вопрос. Количество слотов, объемы планок, какие-то расширителньые платы и так далее. Вопрос перехода на кластер не затрагиваю.
                                                    0
                                                    Основная проблема с памятью заключается в сложности схемотехники. При высоких частотах очень большое значение начинают играть сами проводники. Паразитные индуктивности и емкости ограничивают допустимые длины проводников и вводят очень строгие ограничения на их разводку.

                                                    Когда основной памятью была SDRAM, то количество слотов ограничивалось разве что возможностями контроллеров памяти того времени. DDR, DDR2 и DDR3 особенно, не позволяют вешать больше нескольких слотов на канал. Иначе уже не работает нифига.

                                                    Из всего вышесказанного следует, что расширять память в сервере можно только увеличивая количество каналов. Собственно, так и делают. На больших машинах, как правило, применяется архитектура NUMA, при которой память организована неоднородно. Каждой кучке процессоров дается собственный контроллер памяти и, конечно, шина позволяет использовать память соседних узлов. Но тут уже на первый план вылезают проблемы когерентности кэшей и распределения памяти по узлам.

                                                    В общем и целом, если речь идет о NUMA, то максимум ограничен разве что адресным пространством. В классических архитектурах ограничения носят физический характер.
                                                      0
                                                      Под SDRAM я имел в виду память, существовавшую до DDR. Потому что, строго говоря, DDR тоже относится к синхронной динамической памяти.
                                                0
                                                ну вот например, www.supermicro.com/products/motherboard/QPI/5500/X8DTN_.cfm?IPMI=Y

                                                до 192 ГБ
                                                  +1
                                                  Почитал по диагонали, но неточности режут глаз

                                                  >> Apple также выпускает 64-битный процессор «G5» PowerPC 970 с разрешения IBM.
                                                  Apple ничего не выпускал. PowerPC 970 это процессор, спроектированный и выпускаемый IBM.

                                                  >> 2006: Sony, IBM и Toshiba начинают разработку 64-битного процессора Cell для PlayStation 3
                                                  В начале состоялся запуск PS3, а в 2005 CELL уже был готов. Разработка началась в 2001г

                                                    0
                                                    * В начале 2006 состоялся…
                                                    +1
                                                    Кстати, быть может кого-то заинтересует вот это видео на тему 64-битности. Так себе, но раз попалось сейчас под руку, то решил написать :) — 32bit vs WoW64 vs 64bit.
                                                      0
                                                      Меня всегда интересовало _точное_ определение понятия 'разрядность', не могли бы вы привести его?
                                                        +1
                                                        разрядность = количество разрядов. В данном двоичном случае — количество бит на что-либо

                                                        Разрядность адресная — количество бит на указатель. Например, если 32 бита — то максимальный указатель — 4 Гб.
                                                        0
                                                        А таки есть какая-то разница между AMD64 и EM64T? Когда всё это начиналось объясняли что EM64T это только 64-битная адресация памяти для поддержки больше 4 ГБ, а на деле получается что AMD64 и EM64T это практически одна платформа.
                                                          0
                                                          Так и есть. Просто были различные маркетинговые моменты. Изначально Intel планировал считать полноценной 64-битной архитектурой только IA-64. То что предложила AMD64 они решили объявить как просто технологией для доступа к большему объему памяти, а не как новой 64-битной архитектурой. Для них настоящей 64-битной архитектурой была только IA-64. Потом все изменилось.

                                                          P.S. Это мое личное мнение, которое может расходиться с действительностью. И еще напоминаю, что я не сотрудник Intel и говорю не от ее имени.
                                                          0
                                                          Кстати, до сих пор понять не могу, почему MS втирает, что 32 битная OS больше 4ГБ не поддерживает, когда Windows Server 2008 x86 поддерживает до 16GB без того, чтобы быть 64 битным.

                                                          Если у них ядро одно и то же, то и Vista и 7-ка должны по идее тянуть больше 4х… Не на процесс, а как общедоступную память.
                                                            0
                                                            в 32 битном режиме это все держится через костыль PAE в котором прога не может адресовать больше 3х гигов оперативки
                                                              0
                                                              Наверное так говорится для простоты обывателям. Попробуй, объясни им тонкости… Думаю правильно, пусть и дальше так говорят. А тот кто понимает технические моменты, тот и так понимает.
                                                                0
                                                                Вы путаете несколько понятия адресуемой памяти и физической. Разрядность влияет на понятие адресуемой памяти. У вас на компе даже при 1Гб ОС x32 будет адресовать всегда 4 гигабата — используя интенсивно своп, для сохранения страниц из физической памяти, которые не нужны в данный момент. И для PAE (для x32) тоже 4ГБ будет, только в адресуемом пространстве будет выделено окно, куда будет отображаться физическая память из доступной > 4Гб.

                                                                Windows Server x86 использует PAE, а Windows 7 нет — поэтому вы и не сможете воспользовать более 4Гб.

                                                                А вот в x64 режиме у вас для адресации доступно теоретически 2^64 байт памяти. Понятно что современные объемы физической памяти с лихвой укладываются в этот диапазон, и никакие костыли до тех пор пока не достигнем этого предела не нужны.
                                                                  0
                                                                  Ничего я не путаю. Я в курсе, что один процесс больше 4ГБ физически адресовать не может, а если вычесть зарезервированные куски — так и все 3ГБ. Но это совсем не значит, что на уровне 32х битного ядра эту память использовать никак нельзя. Костыль-не костыль этот PAE, но например, как дополнительный дисковый кэш, как быстрый своп типо ready boost, главное, что эта память не простаивает.

                                                                  Ведь прецеденты есть — Windows Server 2008 x86, по заявлениям MS, у них с Vista одно и то же ядро. Спрашивается, почему в Vista они про эту фишку умолчали? Форсируют прогресс?
                                                                    0
                                                                    Она есть в Vista, но воспользоваться ей нельзя.
                                                                0
                                                                Парни, кто что может сказать о таком разительном потреблении памяти у х64 — почти в 2 раза?
                                                                Логично предположить о необходимости хранения чисел 64бит для новых регистров, но ведь это не может затрагивать ВСЮ работу как системы так и приложений?
                                                                Прошу Вас.
                                                                  0
                                                                  Все сильно зависит от приложения. Откуда собственно данные?
                                                                    0
                                                                    Например, требования для Вин7 х64 — 2 Гб, для х32 — 1 Гб
                                                                      0
                                                                      «Нельзя 10 лет в одном свитере ходить» © анекдот. :)
                                                                        0
                                                                        Андрей, это не ответ ;)
                                                                        Спасибо
                                                                          0
                                                                          Я уже давно планирую пост в духе «Куда уходит память в 64-битных программах». Там попробую ответить на эти вопрос. Но надо будет еще поэкспериментировать. Потерпите немного. :)
                                                                            –1
                                                                            а там есть што-то кроме банального «все указатели на структуры занимают в два раза больше места»? интересно!
                                                                +1
                                                                Я тоже поначалу думал, что если скомпилировать код в 64-битный екзешник — то он будет работать быстрее. Но на деле не все так просто. Преимущества 64-битной архитектуры, отсутствия эмуляции и повышенного количества регистров могут быть сведены на нет двумя вещами:

                                                                1) Пониженная плотность кода. В результате в тот же объем кэша процессора влезает меньше инструкций. С точки зрения производительности по сравнению с 32-битным кодом это приводит к эффективному уменьшению размера кэша в 2 раза (или какое там соотношение у плотности кода x86 и x64). Также для извлечения увеличенного размера кода возрастает нагрузка на пропускную способность основной памяти (DRAM)
                                                                2) Если алгоритм таков, что хранит в памяти много указателей — то из-за увеличившегося в 2 раза размера этих указателей возникают те же проблемы, что описанные в п.1, не только для кода, но и для данных. Кэша данных (в расчете на число обрабатываемых указателей) становится меньше; также увеличивается потребление памяти и нагрузка на ее пропускную способность.

                                                                Поэтому далеко не всегда переход на 64-битную архитектуру повысит производительность. Это очень сильно зависит от алгоритма; от того, какие данные он обрабатывает.
                                                                  +1
                                                                  Статье-то три года :) Догадываюсь, откуда вы пришли — из статьи про ARM от Apple. Ну и конечно тоже не могу не заметить заангажированности в пользу Intel — начиная с того, что как будто другим разработчикам не может понадобиться уметь программировать под x64

                                                                Only users with full accounts can post comments. Log in, please.