В компьютерной архитектуре, 64-битныецелые числа, адреса памяти или другие блоки данных - это те, которые имеют размер 64 бит (8 октетов ) шириной. Кроме того, 64-битные архитектуры CPU и ALU основаны на регистрах , адресных шин или шин данных. такого размера. 64-битные микрокомпьютеры - это компьютеры, в которых 64-битные микропроцессоры являются нормой. С точки зрения программного обеспечения, 64-битные вычисления означают использование кода с 64-битными адресами виртуальной памяти. Однако не все 64-битные наборы инструкций поддерживают полные 64-битные адреса виртуальной памяти; x86-64 и ARMv8, например, поддерживают только 48 бит виртуального адреса, а оставшиеся 16 бит виртуального адреса должны состоять из 0 или всех единиц, а несколько 64 -битовые наборы инструкций поддерживают менее 64 бит адреса физической памяти.
Термин «64-битные» описывает поколение компьютеров, в которых 64-битные процессоры являются нормой. 64 бита - это слово размером, которое определяет определенные классы компьютерной архитектуры, шин, памяти и ЦП и, соответственно, программное обеспечение, которое на них работает. 64-битные процессоры использовались в суперкомпьютерах с 1970-х годов (Cray-1, 1975) и в вычислениях с сокращенным набором команд (RISC) на основе рабочие станции и серверы с начала 1990-х, особенно MIPS R4000, R8000 и R10000, DEC Alpha, Sun UltraSPARC и IBM RS64 и POWER3 и выше POWER микропроцессоры. В 2003 году 64-разрядные процессоры были представлены на (ранее 32-разрядном ) основном рынке персональных компьютеров в виде процессоров x86-64 и PowerPC G5, и были представлены в 2012 году в архитектуре ARM, нацеленной на смартфоны и планшетные компьютеры, впервые проданные 20 сентября 2013 года в iPhone 5S на базе системы ARMv8-A Apple A7 на микросхеме (SoC).
64-битный регистр может содержать любое из 2 (более 18 квинтиллионов или 1,8 × 10) различных значений. Диапазон целочисленных значений, которые могут быть сохранены в 64-битных значениях, зависит от используемого целочисленного представления. В двух наиболее распространенных представлениях диапазон от 0 до 18 446 744 073 709 551 615 (2 - 1) для представления в виде (беззнакового ) двоичного числа и от -9 223 372 036 854 775 808 (−2) до 9 223 372 036 854 775 807 ( 2-1) для представления как дополнение до двух. Следовательно, процессор с 64-битными адресами памяти может напрямую обращаться к 2 байтам (= 16 эксабайт ) адресуемой байтами памяти.
Без дополнительных уточнений, 64-битная компьютерная архитектура обычно имеет целочисленные и адресные регистры процессора шириной 64 бита, что обеспечивает прямую поддержку 64-битных типов данных и адресов. Однако ЦП может иметь внешние шины данных или адресные шины с размерами, отличными от регистров, даже большего размера (32-битный Pentium имел 64-битный шина данных, например). Термин может также относиться к размеру низкоуровневых типов данных, таких как 64-битные числа с плавающей запятой.
Регистры процессора обычно делятся на несколько групп: целые, с плавающей запятой, одиночные инструкция-несколько-данных (SIMD ), управляющие и часто специальные регистры для адресной арифметики, которые могут иметь различное использование и имена, такие как адресные, индексные или базовые регистры. Однако в современных конструкциях эти функции часто выполняются целочисленными регистрами более общего назначения. В большинстве процессоров для адресации данных в памяти можно использовать только целочисленные регистры или регистры адреса; другие типы регистров не могут. Поэтому размер этих регистров обычно ограничивает объем непосредственно адресуемой памяти, даже если есть регистры, такие как регистры с плавающей запятой, которые шире.
Самые высокопроизводительные 32-битные и 64-битные процессоры (некоторые заметные исключения - старые или встроенные архитектура ARM (ARM) и 32-битная архитектура MIPS (MIPS) CPU) имеют интегрированное оборудование с плавающей запятой, которое часто, но не всегда, основано на 64-битных единицах данных. Например, хотя архитектура x86 / x87 имеет инструкции, способные загружать и хранить 64-битные (и 32-битные) значения с плавающей запятой в памяти, внутренние данные с плавающей запятой и Формат регистров составляет 80 бит, а регистры общего назначения - 32 бита. Напротив, семейство 64-битных Alpha использует 64-битные данные с плавающей запятой и формат регистров, а также 64-битные целочисленные регистры.
Многие компьютерные наборы команд спроектированы таким образом, что один целочисленный регистр может хранить адрес памяти в любом месте физического или виртуальная память. Поэтому общее количество адресов в память часто определяется шириной этих регистров. IBM System / 360 1960-х годов был ранним 32-разрядным компьютером; у него были 32-битные целочисленные регистры, хотя для адресов использовались только младшие 24 бита слова, в результате получилось адресное пространство 16 MiB [16 × 1024 байта]. 32-битные суперминикомпьютеры, такие как DEC VAX, стали обычным явлением в 1970-х годах, а 32-битные микропроцессоры, такие как семейство Motorola 68000 и 32-разрядные члены семейства x86, начиная с Intel 80386, появились в середине 1980-х годов, сделав 32-разрядные версии чем-то вроде фактического консенсуса в качестве удобного размер регистра.
32-битный адресный регистр означал, что можно ссылаться на 2 адреса или 4 ГиБ из оперативной памяти (RAM). Когда разрабатывались эти архитектуры, 4 ГБ памяти были настолько больше, чем обычно (4 МБ) в инсталляциях, что считалось достаточным запасом для адресации. 4,29 миллиарда адресов считались подходящим размером для работы по другой важной причине: 4,29 миллиарда целых чисел достаточно для назначения уникальных ссылок на большинство объектов в таких приложениях, как базы данных.
Некоторые суперкомпьютерные архитектуры 1970-х годов и 1980-е, такие как Cray-1, использовали регистры шириной до 64 бит и поддерживали 64-битную целочисленную арифметику, хотя они не поддерживали 64-битную адресацию. В середине 1980-х разработка Intel i860 начала завершиться выпуском 1989 года (слишком поздно для Windows NT); i860 имел 32-битные целочисленные регистры и 32-битную адресацию, поэтому он не был полностью 64-битным процессором, хотя его графический блок поддерживал 64-битную целочисленную арифметику. Тем не менее, 32 бита оставались нормой до начала 1990-х годов, когда постоянное снижение стоимости памяти привело к установкам с объемом ОЗУ, приближающимся к 4 ГБ, и использование пространств виртуальной памяти, превышающих потолок 4 ГБ, стало желательным для обработки определенных типов. проблем. В ответ на это MIPS и DEC разработали 64-битные микропроцессорные архитектуры, первоначально для высокопроизводительных рабочих станций и серверов. К середине 1990-х годов HAL Computer Systems, Sun Microsystems, IBM, Silicon Graphics и Hewlett Packard разработали 64-битные архитектуры для своих рабочих станций и серверных систем. Заметным исключением из этой тенденции были мэйнфреймы от IBM, которые тогда использовали 32-битные данные и 31-битные адреса; мэйнфреймы IBM не включали 64-битные процессоры до 2000 года. В 1990-х годах несколько недорогих 64-битных микропроцессоров использовались в бытовой электронике и встроенных приложениях. Примечательно, что Nintendo 64 и PlayStation 2 имели 64-битные микропроцессоры до их внедрения в персональных компьютерах. Высококачественные принтеры, сетевое оборудование и промышленные компьютеры также использовали 64-битные микропроцессоры, такие как Quantum Effect Devices R5000. 64-битные вычисления начали проникать на настольные ПК с 2003 года, когда некоторые модели в линейке Macintosh Apple перешли на процессоры PowerPC 970 (Apple называла G5), и AMD выпустила свой первый 64-битный процессор x86-64.
В принципе, 64-разрядный микропроцессор может адресовать 16 EiB (16 × 1024 = 2 = 18 446 744 073 709 551 616 байтов, или около 18,4 эксабайт) памяти. Однако не все наборы инструкций и не все процессоры, реализующие эти наборы инструкций, поддерживают полное 64-битное виртуальное или физическое адресное пространство.
Архитектура x86-64 (по состоянию на 2016 год) допускает 48 бит для виртуальной памяти и до 52 бит для физической памяти для любого данного процессора. Эти ограничения допускают размеры памяти 256 TiB (256 × 1024 байтов) и 4 PiB (4 × 1024 байта) соответственно. В настоящее время ПК не может содержать 4 пебибайта памяти (из-за физического размера микросхем памяти), но AMD предполагала большие серверы, кластеры общей памяти и другие способы использования физического адресного пространства, которые могут приблизиться к этому в обозримом будущем. Таким образом, 52-битный физический адрес предоставляет достаточно места для расширения, не неся при этом затрат на реализацию полных 64-битных физических адресов. Точно так же 48-битное виртуальное адресное пространство было разработано так, чтобы обеспечить 65 536 (2) раз больше 32-битного ограничения в 4 ГиБ (4 × 1024 байта), оставляя место для последующего расширения и не неся накладных расходов на перевод полных 64-битных адресов.
Power ISA v3.0 позволяет использовать 64 бита для эффективного адреса, сопоставленного с сегментированным адресом с разрешенными от 65 до 78 бит, для виртуальной памяти и, для любого данного процессора, до 60 бит для физической памяти.
Oracle SPARC Architecture 2015 позволяет использовать 64 бита для виртуальной памяти и, для любого данного процессора, от 40 до 56 бит для физической памяти.
Архитектура системы виртуальной памяти ARM AArch64 допускает 48 бит для виртуальной памяти и, для любого данного процессора, от 32 до 48 бит для физической памяти.
DEC Alpha Для спецификации требуется минимум 43 бита адресного пространства виртуальной памяти (8 ТиБ), а аппаратное обеспечение должно проверять и перехватывать, если оставшиеся неподдерживаемые биты равны нулю (для поддержки совместимости с будущими процессорами). Alpha 21064 поддерживал 43 бита адресного пространства виртуальной памяти (8 ТиБ) и 34 бита адресного пространства физической памяти (16 ГиБ). Alpha 21164 поддерживает 43 бита адресного пространства виртуальной памяти (8 ТиБ) и 40 бит адресного пространства физической памяти (1 ТиБ). Alpha 21264 поддерживает настраиваемые пользователем 43 или 48 битов адресного пространства виртуальной памяти (8TiB или 256TiB) и 44 бита адресного пространства физической памяти (16TiB).
Переход с 32-битной на 64-битную архитектуру является фундаментальным изменением, как и большинство Операционные системы должны быть значительно изменены, чтобы воспользоваться преимуществами новой архитектуры, поскольку это программное обеспечение должно управлять фактическим оборудованием адресации памяти. Другое программное обеспечение также должно быть перенесено на для использования новых возможностей; старое 32-разрядное программное обеспечение может поддерживаться либо на основании того, что 64-разрядный набор инструкций является надмножеством 32-разрядного набора инструкций, так что процессоры, поддерживающие 64-разрядный набор инструкций, также могут выполнять код для 32-разрядной инструкции установлен, либо с помощью программной эмуляции, либо путем фактической реализации ядра 32-битного процессора в 64-битном процессоре, как в некоторых процессорах Itanium от Intel, которые включают IA-32 ядро процессора для запуска 32-битных приложений x86. Операционные системы для этих 64-битных архитектур обычно поддерживают как 32-битные, так и 64-битные приложения.
Одним из важных исключений является AS / 400, программное обеспечение для которого скомпилировано в виртуальная архитектура набора команд (ISA), называемая технологически независимым машинным интерфейсом (TIMI); Затем код TIMI транслируется в машинный код низкоуровневым программным обеспечением перед выполнением. Программное обеспечение перевода - это все, что необходимо переписать, чтобы переместить полную ОС и все программное обеспечение на новую платформу, как, например, когда IBM переместила собственный набор инструкций для AS / 400 со старого 32/48-разрядного IMPI на новый 64-разрядный PowerPC. -AS, кодовое название Amazon. Набор инструкций IMPI сильно отличался даже от 32-битного PowerPC, поэтому этот переход был даже больше, чем перемещение данного набора инструкций с 32 на 64 бит.
На 64-битном оборудовании с архитектурой x86-64 (AMD64) большинство 32-битных операционных систем и приложений могут работать без проблем с совместимостью. Хотя большее адресное пространство 64-битных архитектур упрощает работу с большими наборами данных в таких приложениях, как цифровое видео, научные вычисления и большие базы данных, ведутся серьезные споры о том, можно ли они или их 32-битные режимы совместимости будут быстрее, чем 32-битные системы с сопоставимой ценой для других задач.
Скомпилированная программа Java может работать на 32- или 64-битной виртуальной машине Java без изменений. Длина и точность всех встроенных типов, таких как char
, short
, int
, long
, float.
и double
, а также типы, которые могут использоваться в качестве индексов массива, указаны стандартом и не зависят от базовой архитектуры. Программы Java, работающие на 64-битной виртуальной машине Java, имеют доступ к большему адресному пространству.
Скорость - не единственный фактор, который следует учитывать при сравнении 32-битных и 64-битных процессоров. Такие приложения, как многозадачность, стресс-тестирование и кластеризация - для высокопроизводительных вычислений (HPC) - могут больше подходить для 64-разрядной архитектуры при правильном развертывании. По этой причине 64-битные кластеры широко используются в крупных организациях, таких как IBM, HP и Microsoft.
Резюме:
Распространенное заблуждение состоит в том, что 64-битные архитектуры не лучше 32-битных, если только компьютер имеет более 4 ГиБ оперативной памяти. Это не совсем так:
int a, b, c, г, д; for (a = 0; a < 100; a++) { b = a; c = b; d = c; e = d; }
Главный недостаток 64-битных архитектур состоит в том, что по сравнению с 32-битными архитектурами одни и те же данные занимают больше места в памяти (из-за более длинных указателей и, возможно, других типов, и выравнивание). Это увеличивает требования к памяти для данного процесса и может иметь последствия для эффективного использования кэша процессора. Поддержание частичной 32-разрядной модели - один из способов справиться с этим, и в целом он достаточно эффективен. Например, z / O Операционная система S использует этот подход, требуя, чтобы программный код размещался в 31-битных адресных пространствах (старший бит не используется при вычислении адреса на базовой аппаратной платформе), в то время как объекты данных могут необязательно размещаться в 64-битных областях. Не все такие приложения требуют большого адресного пространства или манипулируют 64-битными элементами данных, поэтому эти приложения не получают преимуществ от этих функций.
64-битные системы на базе x86 иногда не имеют эквивалентов программного обеспечения, написанного для 32-битных архитектур. Самая серьезная проблема в Microsoft Windows - несовместимость драйверов устройств для устаревшего оборудования. Большинство 32-разрядных приложений может работать в 64-разрядной операционной системе в режиме совместимости , также называемом режимом эмуляции, например, технология Microsoft WoW64 для IA-64 и AMD64. Среда 64-разрядного драйвера Windows Native Mode работает поверх 64-разрядной NTDLL.DLL, которая не может вызывать 32-разрядный код подсистемы Win32 (часто устройства, фактическая аппаратная функция которых эмулируется в программном обеспечении пользовательского режима, например Winprinters). Поскольку 64-разрядные драйверы для большинства устройств были недоступны до начала 2007 года (Vista x64), использование 64-разрядной версии Windows считалось проблемой. However, the trend has since moved toward 64-bit computing, more so as memory prices dropped and the use of more than 4 GB of RAM increased. Most manufacturers started to provide both 32-bit and 64-bit drivers for new devices, so unavailability of 64-bit drivers ceased to be a problem. 64-bit drivers were not provided for many older devices, which could consequently not be used in 64-bit systems.
Driver compatibility was less of a problem with open-source drivers, as 32-bit ones could be modified for 64-bit use. Support for hardware made before early 2007, was problematic for open-source platforms, due to the relatively small number of users.
64-bit versions of Windows cannot run 16-bit software. However, most 32-bit applications will work well. 64-bit users are forced to install a virtual machine of a 16- or 32-bit operating system to run 16-bit applications.
Mac OS X 10.4 "Tiger" and Mac OS X 10.5 "Leopard" had only a 32-bit kernel, but they can run 64-bit user-mode code on 64-bit processors. Mac OS X 10.6 "Snow Leopard" had both 32- and 64-bit kernels, and, on most Macs, used the 32-bit kernel even on 64-bit processors. This allowed those Macs to support 64-bit processes while still supporting 32-bitдрайверы устройств; хотя не 64-битные драйверы и преимущества производительности, которые могут прийти с ними. Mac OS X 10.7 «Lion» работал с 64-битным ядром на других компьютерах Mac, а OS X 10.8 «Mountain Lion» и более поздние версии macOS имеют только 64-битное ядро. В системах с 64-битными процессорами как 32-битные, так и 64-битные ядра macOS могут запускать 32-битный код пользовательского режима, и все версии macOS включают 32-битные версии библиотек, которые будут использовать 32-битные приложения, поэтому 32 -bit программное обеспечение пользовательского режима для macOS будет работать в этих системах.
Linux и большинство других Unix-подобных операционных систем, а также C и C++ toolchains для них, имеют поддерживает 64-битные процессоры в течение многих лет. Многие приложения и библиотеки для этих платформ представляют собой программное обеспечение с открытым исходным кодом, написанное на C и C ++, поэтому, если они являются 64-битными, их можно скомпилировать в 64-битные версии. Эта модель распространения на основе исходного кода с акцентом на частые выпуски делает доступность прикладного программного обеспечения для этих операционных систем менее важной проблемой.
В 32-битных программах указатели и типы данных, такие как целые числа, обычно имеют одинаковую длину. Это не обязательно верно на 64-битных машинах. Таким образом, смешивание типов данных в языках программирования, таких как C и его потомков, таких как C ++ и Objective-C, может работать в 32-разрядных реализациях, но не в 64-разрядных. битовые реализации.
Во многих средах программирования для языков C и производных от C на 64-битных машинах переменные int
по-прежнему имеют ширину 32 бита, но длинные целые числа и указатели имеют ширину 64 бита. Они описаны как имеющие модель данных LP64 . Другие модели - это модель данных ILP64, в которой все три типа данных имеют ширину 64 бита, и даже модель SILP64, в которой короткие целые числа также имеют ширину 64 бита. Однако в большинстве случаев требуемые модификации относительно незначительны и просты, и многие хорошо написанные программы можно просто перекомпилировать для новой среды без изменений. Другой альтернативой является модель LLP64, которая поддерживает совместимость с 32-битным кодом, оставляя для int
и long
32-битные. LL относится к длинному длинному целочисленному типу, который составляет не менее 64 бит на всех платформах, включая 32-битные среды.
Модель данных | short (integer) | int | long (integer) | long long | указатели,. size_t | Примеры операционных систем |
---|---|---|---|---|---|---|
LLP64 | 16 | 32 | 32 | 64 | 64 | Microsoft Windows (x86-64 и IA-64) с использованием Visual C ++ ; и MinGW |
LP64 | 16 | 32 | 64 | 64 | 64 | Большинство Unix и Unix-подобных систем, например, Solaris, Linux, BSD, macOS. Windows при использовании Cygwin ; z / OS |
ILP64 | 16 | 64 | 64 | 64 | 64 | HAL Computer Системы перенос Solaris на SPARC64 |
SILP64 | 64 | 64 | 64 | 64 | 64 | Classic UNICOS (по сравнению с UNICOS / mp и т. Д.) |
Многие 64-битные платформы сегодня используют модель LP64 (включая Solaris, AIX, HP-UX, Linux, macOS, BSD и IBM z / OS). Microsoft Windows использует модель LLP64. Недостатком модели LP64 - это то, что сохранение long
в int
может быть усечено. С другой стороны, преобразование указателя в long
будет «работать» в LP64. В модели LLP64 все наоборот. Это не проблемы, которые влияют на код, полностью соответствующие стандарты, но код часто пишется с неявными предположениями о типе данных. Код C должен предпочесть (u
)intptr_t
вместо long
при преобразовании указателей в целочисленные объекты.
Модель программирования - это выбор, который подходит для данного компилятора, и некоторые из них могут Однако обычно преобладает модель программирования, выбранная в основной модели для ОС интерфейс прикладного программирования (API).
Еще одним соображением является модель данных, используемая для драйверы устройств. Драйверы включают в себя указатели для управления данными, а в некоторых случаях драйверы используют указатели для управления данными. Указатели определенного размера в оборудовании, которое они используют для прямого доступа к памяти (DMA). Устройство DMA в верхние области памяти 64-битной машины не может удовлетворить запросы системы на устройство в памяти выше барьера в 4 гигибайта, поскольку указатели для этих адресов не помещаются в регистры DMA устройства. Эта проблема решается за счет того, что ОС принимает во внимание ограничение памяти устройства при генерации запросов к драйверам для DMA, или за счет использования блока управления памятью ввода-вывода (IOMMU).
По состоянию на май 2018 года 64-битные архитектуры, для которых производятся процессоры, включая:
Большинство 64-битных архитектур, которые являются производными от той же 32-битной архитектуры, могут выполнять код, написанный для 32-битных версий, без потерь производительности. Этот вид поддержки обычно называется поддержкой двух арок, в более общем смысле, поддержкой нескольких арок.