32 или 64 бита

Материал из MediaWiki
Версия от 21:39, 27 февраля 2023; Admin (обсуждение | вклад) (1 версия импортирована)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску
Содержимое устарело
Информация ниже частично устарела. Вы можете проверить её и актуализировать.

{{#if: | [[Категория:{{{category}}}]] }}



Все чаще на форумах возникают темы с вопросом что ставить — 32- или 64-битную систему. В этой статье перечислены важные и не очень особенности обеих архитектур, которые мы смогли вспомнить. А выбор уже за вами. Ну и естественно, что вопрос имеет смысл на том железе, которое поддерживает оба варианта (это практически все современные x86-совместимые процессоры, кроме Intel Atom N2XX и Z5XX).

32 бита

Она же IA-32, x86_32 или просто x86. В названии бинарных пакетов могут встречаться обозначения i386, i486, i586, i686 (названия процессоров, в режиме совместимости с набором команд которых ПО было скомпилировано).

Плюсы x86

  • Самый главный плюс 32-битной системы в том, что нет проблем с поиском ПО для нее. Если программа существует и не является современной игрой, то в 99.9% случаев будет и ее 32-битная сборка.
  • Ещё один плюс этой архитектуры в том, что ПО, будучи запущенным, занимает меньше ОЗУ по причине того, что размер указателя — 4 байта.

Минусы x86

  • В силу особенностей архитектуры (см. второй «плюс» x86) не поддерживается больше 4 гигабайт ОЗУ. Это ограничение можно частично обойти с помощью PAE (Physical Address Extension): операционная система будет способна использовать до 64 Гб ОЗУ, однако выделение памяти одному процессу по-прежнему не сможет превышать 4 Гб. На деле это 3гб или 2гб, так как часть адресного пространства всегда зарезервирована за ядром.
  • К сожалению, небольшое число старых (и некоторых сторонних) драйверов не работают в режиме PAE, либо работают с глюками, так как не рассчитаны на такой режим.
  • При сборке пакетов по умолчанию не используются возможности новых процессоров такие, как SSE, операции с плавающей точкой и т. д., если такую возможность не предусмотрели авторы программы (как, например, glibc, кодеки аудио и видео). Остальные пакеты для совместимости собираются с набором инструкций i486 (иногда i586 и i686, используется в Mandriva и ArchLinux соответственно). Исключение составляют Gentoo и другие source-based дистрибутивы — там можно компилировать с теми оптимизациями, с какими душа пожелает.
  • Многие современные игры выпускаются только под x86_64.

64 бита

Известна как x86_64, x86-64, amd64, EM64T и x64. Обратите внимание, что IA-64 — это совсем другая архитектура (Itanium/Itanium2), которая совсем не совместима с той, о которой идет речь в этой статье.

Плюсы x86_64

  • Нет проблем с использованием больших объемов ОЗУ (более 4 Гб на процесс, теоретический максимум 264 байта, т. е. 16777216 Тб).
  • Как следствие, можно отображать (mmap()) в виртуальную память процесса большие файлы (более 4 Гб).
  • Прирост производительности по сравнению с IA-32 колеблется от 0.6% до 45% (Сравнение производительности 32-битной и 64-битной версий дистрибутивов Fedora 9, openSUSE 11.0, Ubuntu 8.04.1). Возникает благодаря:
  • Возможна отладка программ собранных с флагом GCC -fomit-frame-pointer (включен по умолчанию в -O2 на 64-битной архитектуре).
  • Повышенная безопасность:
    • 64-битные ядра Linux по умолчанию используют NX-бит (на IA-32 NX-бит используется только на ядрах с PAE).
    • Благодаря большей разрядности виртуальных адресов, больше возможностей рандомизации адресного пространства процесса, а значит, улучшается защита от некоторых видов атак.

Минусы x86_64

  • Опять-таки в силу особенностей архитектуры увеличивается размер занимаемой приложениями памяти: указатели (смещения) и некоторые другие типы данных становятся вдвое больше в расчете на один объект.
  • В силу предыдущего минуса, а также увеличения длины некоторых инструкций и использования SSE/SSE2 вместо более компактного x87-кода, в процессорные кэши влезает меньше объектов. Это теоретически может приводить к падению производительности (количество обрабатываемых объектов в секунду). На практике же в большинстве программ наблюдается либо равная производительность, либо ускорение, так как другие плюсы 64-битности чаще всего перевешивают данный минус.
  • Многие проприетарные программы не имеют 64-битных версий, например, Google Earth. Некоторые open source приложения практически не работают в родном 64-битном режиме, например, wine. Тем не менее, все они работают при установке соответствующих 32-битных библиотек. Сложность установки необходимых библиотек зависит от дистрибутива.
  • На процессорах архитектуры Intel Core 2 не задействуется Macrofusion (технология, увеличивающая число инструкций, обрабатываемых процессором за один такт), поэтому прирост производительности от перехода на 64 бита может не совсем оправдать ожидания. Для Nehalem и более поздних не актуально, источник. Тем более не актуально для процессоров AMD.
  • GCC компилирует в 64-битный код несколько медленнее, чем тот же самый исходный код для 32 бит.

32 битная система + 64 битное ядро

Плюсы

  • Нет проблем с использованием больших объемов ОЗУ (более 4 Гб)
  • Возможность использования и 64-битных программ (в таком случае получается 64-битная multilib система с сильным перекосом в сторону 32-бит)
  • Те же плюсы, что и у 32 бит

Минусы

  • Поддержка «из коробки» есть только в Debian
  • Невозможность адресации более 3 гигабайт памяти одним 32-битным процессом
  • Конфликты в некоторых программах. использующих модули ядра(например 32-битный VirtualBox не может работать в такой системе). Проприетарный драйвер NVIDIA будет работать на таких системах без проблем, однако для этого потребуется ручная установка 64-битного модуля и 32-битных библиотек (из разных пакетов), а вот установщик с официального сайта будет работать некорректно.
  • Нагрузка на процессор будет существенно выше (kernel-userspace переключает не только контекст, но и режим процессора long-compat)
  • Сложности и конфликты с установкой и сборкой программного обеспечения в такой системе (архитектура определяется как 64-битная, рекомендуется использовать утилиту i386 (она же — setarch) для корректности)