stringtranslate.com

64-битные вычисления

В компьютерной архитектуре 64 -битные целые числа , адреса памяти или другие единицы данных [a] — это те, которые имеют ширину 64 бита . Кроме того, 64-битные центральные процессоры (ЦП) и арифметико-логические устройства (АЛУ) — это те, которые основаны на регистрах процессора , адресных шинах или шинах данных такого размера. Компьютер , использующий такой процессор, является 64-битным компьютером .

С точки зрения программного обеспечения, 64-битные вычисления означают использование машинного кода с 64-битными адресами виртуальной памяти . Однако не все 64-битные наборы команд поддерживают полные адреса 64-битной виртуальной памяти; Например, x86-64 и AArch64 поддерживают только 48 бит виртуального адреса, а остальные 16 бит виртуального адреса должны состоять только из нулей (000...) или всех единиц (111...), а также нескольких 64-бит. Наборы битовых команд поддерживают менее 64 бит адреса физической памяти.

Термин «64-бит» также описывает поколение компьютеров, в которых 64-битные процессоры являются нормой. 64 бита — это размер слова , который определяет определенные классы компьютерной архитектуры, шин, памяти и процессоров и, соответственно, программного обеспечения, которое на них работает. 64-битные процессоры используются в суперкомпьютерах с 1970-х годов ( Cray-1 , 1975), а в рабочих станциях и серверах на базе компьютеров с сокращенным набором команд (RISC) — с начала 1990-х годов. В 2003 году 64-битные процессоры были представлены на массовом рынке ПК в виде процессоров x86-64 и PowerPC G5 .

64-битный регистр может хранить любое из 264 ( более 18 квинтиллионов или 1,8×1019 ) различных значений. Диапазон целочисленных значений, которые могут храниться в 64 битах, зависит от используемого целочисленного представления . Для двух наиболее распространенных представлений диапазон составляет от 0 до 18 446 744 073 709 551 615 (равный 2 64 - 1) для представления в виде двоичного числа ( без знака ) и от −9 223 372 036 854 775 808 (-2 63 ) до 9 223 372 036 854,7. 75 807 (2 63 − 1) для представления в виде дополнение до двух . Следовательно, процессор с 64-битными адресами памяти может напрямую обращаться к 264 байтам (16 эксбибайт или EiB) памяти с байтовой адресацией .

Без каких-либо дополнительных уточнений, 64-битная компьютерная архитектура обычно имеет целочисленные и адресные регистры шириной 64 бита, что обеспечивает прямую поддержку 64-битных типов данных и адресов. Однако ЦП может иметь внешние шины данных или адресные шины с размерами, отличными от регистров, даже больше ( например, 32-битный Pentium имел 64-битную шину данных). [1]

Архитектурные последствия

Регистры процессора обычно делятся на несколько групп: целочисленные , с плавающей запятой , одиночные инструкции, несколько данных (SIMD), управление и часто специальные регистры для адресной арифметики, которые могут иметь различное использование и названия, такие как адресные , индексные или базовые регистры . Однако в современных конструкциях эти функции часто выполняются целочисленными регистрами более общего назначения. В большинстве процессоров для адресации данных в памяти можно использовать только целочисленные или адресные регистры; другие типы регистров не могут. Поэтому размер этих регистров обычно ограничивает объем памяти с прямой адресацией, даже если существуют регистры, такие как регистры с плавающей запятой, которые шире.

Большинство высокопроизводительных 32-битных и 64-битных процессоров (некоторыми заметными исключениями являются более старые или встроенные ЦП с архитектурой ARM (ARM) и 32-битной архитектурой MIPS (MIPS)) имеют встроенное оборудование с плавающей запятой, которое часто, но не всегда, основано на на 64-битных единицах данных. Например, хотя в архитектуре x86 / x87 есть инструкции, способные загружать и сохранять в памяти 64-битные (и 32-битные) значения с плавающей запятой, внутренние данные с плавающей запятой и формат регистров имеют ширину 80 бит, в то время как общий формат Регистры назначения имеют ширину 32 бита. Напротив, 64-битное семейство Alpha использует 64-битные данные и формат регистров с плавающей запятой, а также 64-битные целочисленные регистры.

История

Многие наборы команд компьютера устроены таким образом, что один целочисленный регистр может хранить адрес памяти в любом месте физической или виртуальной памяти компьютера . Поэтому общее количество адресов памяти часто определяется шириной этих регистров. IBM System / 360 1960-х годов был первым 32-битным компьютером; у него были 32-битные целочисленные регистры, хотя для адресов использовались только младшие 24 бита слова, в результате чего получалось адресное пространство размером 16  МБ ( 16 × 1024 2 байта ). 32-битные суперминикомпьютеры , такие как DEC VAX , стали обычным явлением в 1970-х годах, а 32-битные микропроцессоры, такие как семейство Motorola 68000 и 32-битные представители семейства x86, начиная с Intel 80386 , появились в середине 1970-х годов. 1980-е годы, когда 32 бита стали чем-то вроде фактического консенсуса как удобный размер регистра.

32-битный адресный регистр означал, что можно было обращаться к 2 32 адресам или 4  ГБ оперативной памяти (ОЗУ). Когда были разработаны эти архитектуры, 4 ГиБ памяти настолько превышали типичные объемы (4 МБ) в установках, что это считалось достаточным запасом для адресации. 4,29 миллиарда адресов считались подходящим размером для работы по другой важной причине: 4,29 миллиарда целых чисел достаточно для назначения уникальных ссылок большинству объектов в таких приложениях, как базы данных .

Некоторые суперкомпьютерные архитектуры 1970-х и 1980-х годов, такие как Cray-1 , [2] использовали регистры шириной до 64 бит и поддерживали 64-битную целочисленную арифметику, хотя они не поддерживали 64-битную адресацию. В середине 1980-х годов разработка Intel i860 [3] завершилась выпуском в 1989 году; i860 имел 32-битные целочисленные регистры и 32-битную адресацию, поэтому он не был полностью 64-битным процессором, хотя его графический модуль поддерживал 64-битную целочисленную арифметику. [4] Однако 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 [5] и PlayStation 2 имели 64-битные микропроцессоры до их появления на персональных компьютерах. Высокопроизводительные принтеры, сетевое оборудование и промышленные компьютеры также использовали 64-битные микропроцессоры, такие как Quantum Effect Devices R5000 . [ нужна цитация ] 64-битные вычисления начали проникать на настольные персональные компьютеры с 2003 года, когда некоторые модели линейки Apple Macintosh перешли на процессоры PowerPC 970 (названные Apple G5 ), и была выпущена компания Advanced Micro Devices (AMD). свой первый 64-битный процессор x86-64 . Физическая память в конечном итоге достигла 32-битного ограничения. В 2023 году портативные компьютеры обычно оснащались 16 ГБ памяти, а серверы — до 64 ГБ памяти, что значительно превышало емкость адреса в 4 ГБ, составляющую 32 бита.

64-битная временная шкала данных

1961 год
IBM поставляет суперкомпьютер IBM 7030 Stretch , который использует 64-битные слова данных и 32- или 64-битные слова инструкций.
1974 год
Корпорация Control Data запускает векторный суперкомпьютер CDC Star-100 , использующий 64-битную словесную архитектуру (предыдущие системы CDC основывались на 60-битной архитектуре).
Компания International Computers Limited выпускает серию ICL 2900 с 32-битными, 64-битными и 128-битными целыми числами с дополнением до двух ; 64-битная и 128-битная с плавающей запятой; 32-битные, 64-битные и 128-битные упакованные десятичные числа и 128-битный аккумуляторный регистр. Архитектура пережила ряд машин ICL и Fujitsu. Последней является Fujitsu Supernova, которая эмулирует исходную среду на 64-битных процессорах Intel.
1976 год
Компания Cray Research поставляет первый суперкомпьютер Cray-1 , основанный на 64-битной текстовой архитектуре и лягущий в основу последующих векторных суперкомпьютеров Cray.
1983 год
Elxsi выпускает параллельный мини-суперкомпьютер Elxsi 6400 . Архитектура Elxsi имеет 64-битные регистры данных, но 32-битное адресное пространство.
1989 год
Intel представляет компьютерный процессор Intel i860 с сокращенным набором команд (RISC). Продаваемый как «64-битный микропроцессор», он по сути имел 32-битную архитектуру, дополненную трехмерным графическим процессором, способным выполнять 64-битные целочисленные операции. [6]
1993 год
Atari представляет игровую консоль Atari Jaguar , архитектура которой включает в себя несколько 64-битных путей передачи данных. [7]

Временная шкала 64-битного адреса

1991 год
MIPS Computer Systems производит первый 64-битный микропроцессор R4000 , реализующий архитектуру MIPS III , третью версию архитектуры MIPS . [8] ЦП используется в графических рабочих станциях SGI , начиная с IRIS Crimson . Kendall Square Research представила свой первый суперкомпьютер KSR1, основанный на собственной архитектуре 64-битного RISC-процессора под управлением OSF/1 .
1992 год
Digital Equipment Corporation (DEC) представляет чистую 64-битную архитектуру Alpha , которая родилась в результате проекта PRISM . [9]
1994 г.
Intel объявляет о планах по созданию 64-битной архитектуры IA-64 (разработанной совместно с Hewlett-Packard ) в качестве преемника своих 32-битных процессоров IA-32 . Была намечена дата запуска с 1998 по 1999 год.
1995 год
Sun выпускает 64-битный процессор SPARC UltraSPARC . [10] HAL Computer Systems , принадлежащая Fujitsu , выпускает рабочие станции на базе 64-битного процессора SPARC64 первого поколения, независимо разработанного HAL . IBM выпускает микропроцессоры A10 и A30, первые 64-разрядные процессоры PowerPC AS. [11] IBM также выпускает обновление 64-битной системы AS/400, которое позволяет преобразовать операционную систему, базу данных и приложения.
1996 год
Nintendo представляет игровую консоль Nintendo 64 , созданную на основе недорогого варианта MIPS R4000. HP выпускает первую реализацию своей 64-битной архитектуры PA-RISC 2.0 — PA-8000 . [12]
1998 год
IBM выпускает линейку 64-битных процессоров PowerPC/ POWER POWER3 . [13]
1999 год
Intel выпускает набор инструкций для архитектуры IA-64 . AMD публично раскрывает свой набор 64-битных расширений IA-32 под названием x86-64 (позже получивший название AMD64).
2000 г.
IBM поставляет свой первый 64-битный мэйнфрейм z/ArchitecturezSeries z900. z/Architecture — это 64-битная версия 32-битной архитектуры ESA/390 , потомок 32-битной архитектуры System/360 .
2001 г.
Intel отправляет линейку процессоров IA-64 после неоднократных задержек с выходом на рынок. Теперь продажи под брендом Itanium и ориентированы на высокопроизводительные серверы не оправдывают ожиданий.
2003 г.
AMD представляет линейки процессоров Opteron и Athlon 64 , основанные на архитектуре AMD64 , которая является первой 64-битной процессорной архитектурой на базе x86. Apple также поставляет 64-битный процессор PowerPC 970 «G5» производства IBM. Intel утверждает, что чипы Itanium останутся ее единственными 64-битными процессорами.
2004 г.
Intel, реагируя на рыночный успех AMD, признает, что разрабатывает клон расширения AMD64 под названием IA-32e (позже переименованный в EM64T, а затем снова переименованный в Intel 64). Intel поставляет обновленные версии своих семейств процессоров Xeon и Pentium 4 , поддерживающие новый 64-битный набор команд.
VIA Technologies анонсирует 64-битный процессор Isaiah . [14]
2006 г.
Sony, IBM и Toshiba начинают производство 64-битного процессора Cell для использования в PlayStation 3 , серверах, рабочих станциях и других устройствах. Intel выпустила Core 2 Duo как первый массовый процессор x86-64 для своей линейки мобильных, настольных компьютеров и рабочих станций. Предыдущие линейки 64-битных процессоров расширения не были широко доступны на потребительском розничном рынке (большая часть 64-битных Pentium 4/D производились OEM), 64-битные Pentium 4, Pentium D и Celeron не были запущены в массовое производство до конца 2006 года. из-за проблемы с низкой производительностью (большинство пластин с хорошей производительностью были ориентированы на серверы и мэйнфреймы, в то время как до 2006 года массовая линейка 32-битных процессоров все еще оставалась 130-нм) и вскоре после дебюта Core 2 стала низкосортной. AMD выпустила свой первый 64-битный мобильный процессор, изготовленный по 90-нм техпроцессу.
2011 год
ARM Holdings анонсирует ARMv8-A, первую 64-битную версию семейства архитектуры ARM . [15]
2012 год
30 октября 2012 года ARM Holdings анонсировала свои ядра Cortex-A53 и Cortex-A57, свои первые ядра на основе 64-битной архитектуры. [16] [17]
2013
Apple анонсирует iPhone 5S с первым в мире 64-битным процессором в смартфоне, который использует свою систему на кристалле A7 на базе ARMv8-A наряду с iPad Air и iPad Mini 2 , которые являются первыми в мире 64-битными процессорами. процессор в планшете.
2014 год
Google анонсирует планшет Nexus 9 , первое устройство Android, работающее на 64-битном чипе Tegra K1.
2015 год
Apple анонсирует iPod Touch (6-го поколения) , первый iPod Touch, использующий 64-битный процессор A8 на базе ARMv8-A, наряду с Apple TV (4-го поколения) , который является первым в мире 64-битным процессором. процессор в Apple TV.
2018 год
Apple анонсирует Apple Watch Series 4 , первые Apple Watch, использующие 64-битный процессор S4 на базе ARMv8-A.
2020 год
Synopsis анонсирует ARCv3 ISA, первую 64-битную версию ARC ISA . [18]

Хронология 64-битной операционной системы

1985 год
Cray выпускает UNICOS , первую 64-битную реализацию операционной системы Unix . [19]
1993 год
DEC выпускает 64-битную Unix-подобную операционную систему DEC OSF/1 AXP (позже переименованную в Tru64 UNIX) для своих систем, основанных на архитектуре Alpha .
1994 г.
Поддержка процессора R8000 добавлена ​​компанией Silicon Graphics в операционную систему IRIX в версии 6.0.
1995 год
DEC выпускает OpenVMS 7.0, первую полную 64-битную версию OpenVMS для Alpha. Выпущен первый 64-битный дистрибутив Linux для архитектуры Alpha. [20]
1996 год
Поддержка процессоров R4x00 в 64-битном режиме добавлена ​​компанией Silicon Graphics в операционную систему IRIX в версии 6.2.
1998 год
Sun выпускает Solaris 7 с полной поддержкой 64-битного UltraSPARC .
2000 г.
IBM выпускает z/OS , 64-битную операционную систему, произошедшую от MVS , для новых 64-битных мэйнфреймов zSeries ; 64-битная версия Linux на z Systems следует за выпуском ЦП почти сразу.
2001 г.
Linux становится первым ядром ОС, полностью поддерживающим x86-64 (на симуляторе, поскольку процессоры x86-64 еще не были выпущены). [21]
2001 г.
Microsoft выпускает 64-битную версию Windows XP для архитектуры Itanium IA-64; он мог запускать 32-битные приложения через уровень выполнения.
2003 г.
Apple выпускает операционную систему Mac OS X 10.3 «Panther», в которой добавлена ​​поддержка встроенной 64-битной целочисленной арифметики на процессорах PowerPC 970 . [22] Несколько дистрибутивов Linux выпускаются с поддержкой AMD64 . Выпуски FreeBSD с поддержкой AMD64.
2005 г.
4 января Microsoft прекращает выпуск 64-разрядной версии Windows XP, поскольку с сентября прошлого года не было компьютеров с процессорами IA-64, и объявляет, что разрабатывает версии Windows x86-64 для ее замены. [23] 31 января Sun выпускает Solaris 10 с поддержкой процессоров AMD64 и EM64T. 29 апреля Apple выпускает Mac OS X 10.4 «Tiger», которая обеспечивает ограниченную поддержку 64-битных приложений командной строки на машинах с процессорами PowerPC 970; более поздние версии для компьютеров Mac на базе Intel поддерживали 64-битные приложения командной строки на компьютерах Mac с процессорами EM64T. 30 апреля Microsoft выпускает Windows XP Professional x64 Edition и Windows Server 2003 x64 Edition для процессоров AMD64 и EM64T. [24]
2006 г.
Microsoft выпускает Windows Vista , включая 64-битную версию для процессоров AMD64/EM64T, сохраняющую 32-битную совместимость. В 64-битной версии все приложения и компоненты Windows являются 64-битными, хотя во многие из них также включены 32-битные версии для совместимости с плагинами .
2007 год
Apple выпускает Mac OS X 10.5 «Leopard», которая полностью поддерживает 64-битные приложения на машинах с процессорами PowerPC 970 или EM64T.
2009 год
Microsoft выпускает Windows 7 , которая, как и Windows Vista, включает полную 64-разрядную версию для процессоров AMD64/Intel 64; большинство новых компьютеров по умолчанию загружаются с 64-битной версией. Microsoft также выпускает Windows Server 2008 R2 , первую 64-разрядную серверную операционную систему. Apple выпускает Mac OS X 10.6 «Snow Leopard», которая поставляется с 64-битным ядром для процессоров AMD64/Intel64, хотя только некоторые последние модели компьютеров Apple будут работать с 64-битным ядром по умолчанию. Большинство приложений, входящих в состав Mac OS X 10.6, теперь также являются 64-разрядными. [22]
2011 год
Apple выпускает Mac OS X 10.7 «Lion», которая по умолчанию запускает 64-битное ядро ​​на поддерживаемых компьютерах. На старых машинах, которые не могут запускать 64-битное ядро, используется 32-битное ядро, но, как и в более ранних версиях, они все равно могут запускать 64-битные приложения; Lion не поддерживает машины с 32-битными процессорами. Почти все приложения, входящие в состав Mac OS X 10.7, теперь также являются 64-разрядными, включая iTunes.
2012 год
Microsoft выпускает Windows 8 , которая поддерживает UEFI Class 3 ( UEFI без CSM) и безопасную загрузку . [25]
2013
Apple выпускает iOS 7 , которая на машинах с процессорами AArch64 имеет 64-битное ядро, поддерживающее 64-битные приложения.
2014 год
Google выпускает Android Lollipop — первую версию операционной системы Android с поддержкой 64-битных процессоров.
2017 год
Apple выпускает iOS 11 , поддерживающую только машины с процессорами AArch64. Он имеет 64-битное ядро, которое поддерживает только 64-битные приложения. 32-битные приложения больше не совместимы.
2018 год
Apple выпускает watchOS 5 , первую версию watchOS с поддержкой 64-битной версии.
2019 год
Apple выпускает macOS 10.15 «Catalina», отказываясь от поддержки 32-битных приложений Intel.
2021 год
Microsoft выпускает Windows 11 5 октября, которая поддерживает только 64-битные системы, отказавшись от поддержки систем IA-32.
2022 год
Google выпускает Pixel 7 , в котором прекращена поддержка не64-битных приложений. Apple выпускает watchOS 9 , первую версию watchOS, которая будет работать исключительно на моделях Apple Watch с 64-битными процессорами (включая Apple Watch Series 4 или новее, Apple Watch SE (1-го поколения) или новее, а также недавно представленные Apple Watch Ultra ), отказавшись от нее. поддержка Apple Watch Series 3 как последней модели Apple Watch с 32-битным процессором.

Ограничения процессоров

В принципе, 64-битный микропроцессор может адресовать 16 EiB ( 16 × 1024 6 = 2 64 = 18 446 744 073 709 551 616 байт , или около 18,4 эксабайт) памяти. Однако не все наборы команд и не все процессоры, реализующие эти наборы команд, поддерживают полное 64-битное виртуальное или физическое адресное пространство.

Архитектура x86-64 (по состоянию на 2016 год ) допускает 48 бит для виртуальной памяти и для любого процессора до 52 бит для физической памяти. [26] [27] Эти ограничения допускают размеры памяти 256  ТиБ ( 256 × 1024 4 байта ) и 4  ПиБ ( 4 × 1024 5 байт ) соответственно. В настоящее время ПК не может содержать 4  пебибайта памяти (из-за физического размера микросхем памяти), но AMD предусмотрела большие серверы, кластеры с общей памятью и другие варианты использования физического адресного пространства, которые могут приблизиться к этому в обозримом будущем. Таким образом, 52-битный физический адрес предоставляет достаточно возможностей для расширения, не требуя при этом затрат на реализацию полных 64-битных физических адресов. Точно так же 48-битное виртуальное адресное пространство было спроектировано так, чтобы обеспечить в 65 536 (2 16 ) раз больше 32-битного предела в 4 ГиБ ( 4 × 1024 3 байта ), что дает место для последующего расширения и не требует дополнительных затрат на преобразование полного 64-битного пространства. адреса.

Power ISA v3.0 допускает 64 бита для эффективного адреса, сопоставленного с сегментированным адресом с допустимыми значениями от 65 до 78 бит для виртуальной памяти и для любого процессора до 60 бит для физической памяти. [28]

Архитектура Oracle SPARC 2015 допускает 64 бита для виртуальной памяти и для любого процессора от 40 до 56 бит для физической памяти. [29]

Архитектура системы виртуальной памяти ARM AArch64 допускает 48 бит для виртуальной памяти и для любого процессора от 32 до 48 бит для физической памяти. [30]

Спецификация DEC Alpha требует поддержки минимум 43 бит адресного пространства виртуальной памяти (8 ТиБ), а аппаратное обеспечение должно проверять и перехватывать, если оставшиеся неподдерживаемые биты равны нулю (для поддержки совместимости с будущими процессорами). Alpha 21064 поддерживал 43 бита адресного пространства виртуальной памяти (8 ТиБ) и 34 бита адресного пространства физической памяти (16 ГиБ). Alpha 21164 поддерживал 43 бита адресного пространства виртуальной памяти (8 ТиБ) и 40 бит адресного пространства физической памяти (1 ТиБ). Alpha 21264 поддерживал настраиваемые пользователем 43 или 48 бит адресного пространства виртуальной памяти (8 ТиБ или 256 ТиБ) и 44 бита адресного пространства физической памяти (16 ТиБ).

64-битные приложения

32-битная или 64-битная версия

Переход с 32-битной на 64-битную архитектуру является фундаментальным изменением, поскольку большинство операционных систем должны быть значительно модифицированы, чтобы воспользоваться преимуществами новой архитектуры, поскольку это программное обеспечение должно управлять реальным аппаратным обеспечением адресации памяти. [31] Другое программное обеспечение также необходимо портировать , чтобы использовать новые возможности; более старое 32-битное программное обеспечение может поддерживаться либо потому, что 64-битный набор команд является надмножеством 32-битного набора команд, так что процессоры, поддерживающие 64-битный набор команд, также могут выполнять код для 32-битных инструкций. устанавливается, либо посредством программной эмуляции , либо путем фактической реализации 32-битного ядра процессора в 64-битном процессоре, как в случае с некоторыми процессорами Itanium от Intel, которые включают процессорное ядро ​​IA-32 для запуска 32-битных приложений x86 . Операционные системы для этих 64-битных архитектур обычно поддерживают как 32-битные, так и 64-битные приложения. [32]

Одним из существенных исключений из этого правила является IBM AS/400 , программное обеспечение для которого скомпилировано в архитектуру виртуального набора команд (ISA), называемую Technology Independent Machine Interface (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, имеют доступ к большему адресному пространству. [33]

Скорость — не единственный фактор, который следует учитывать при сравнении 32-битных и 64-битных процессоров. Такие приложения, как многозадачность, стресс-тестирование и кластеризация — для высокопроизводительных вычислений (HPC) — могут больше подходить для 64-битной архитектуры при правильном развертывании. По этой причине 64-битные кластеры получили широкое распространение в крупных организациях, таких как IBM, HP и Microsoft.

Краткое содержание:

За и против

Распространенным заблуждением является то, что 64-битные архитектуры не лучше 32-битных, если только компьютер не имеет более 4 ГиБ оперативной памяти . [34] Это не совсем так:

Пример на языке C :
int a , b , c , d , e ; для ( а знак равно 0 ; а < 100 ; а ++ ) { б знак равно а ; с = б ; д знак равно с ; е знак равно d ; }                         
Этот код сначала создает 5 значений: a, b, c, d и e; а затем помещает их в цикл. Во время цикла этот код изменяет значение b на значение a, значение c на значение b, значение d на значение c и значение e на значение d. Это имеет тот же эффект, что и изменение всех значений на a.
Если процессор может хранить в регистрах только два или три значения или переменные, ему потребуется переместить некоторые значения между памятью и регистрами, чтобы иметь возможность также обрабатывать переменные d и e; это процесс, который занимает много циклов процессора. Процессор, который может хранить все значения и переменные в регистрах, может проходить через них без необходимости перемещать данные между регистрами и памятью для каждой итерации. Такое поведение можно легко сравнить с виртуальной памятью, хотя любые эффекты зависят от компилятора.

Основным недостатком 64-битных архитектур является то, что по сравнению с 32-битными архитектурами те же данные занимают больше места в памяти (из-за более длинных указателей и, возможно, других типов, а также заполнения выравнивания). Это увеличивает требования к памяти для данного процесса и может повлиять на эффективное использование кэша процессора. Поддержание частичной 32-битной модели — один из способов справиться с этой проблемой, и в целом он достаточно эффективен. Например, операционная система z/OS использует этот подход, требуя, чтобы программный код находился в 31-битном адресном пространстве (старший бит не используется при вычислении адреса на базовой аппаратной платформе), тогда как объекты данных могут опционально находиться в 64-битном адресном пространстве. битовые области. Не все такие приложения требуют большого адресного пространства или манипулируют 64-битными элементами данных, поэтому эти приложения не получают преимуществ от этих функций.

Доступность программного обеспечения

В 64-битных системах на базе x86 иногда отсутствуют эквиваленты программного обеспечения , написанного для 32-битных архитектур. Самая серьезная проблема в Microsoft Windows — несовместимость драйверов устройств для устаревшего оборудования. Большинство 32-битных прикладных программ могут работать в 64-битной операционной системе в режиме совместимости , также называемом режимом эмуляции , например, технология Microsoft WoW64 для IA-64 и AMD64. Среда драйверов 64-битного Windows Native Mode [37] работает поверх 64-битной NTDLL.DLL , которая не может вызывать 32-битный код подсистемы Win32 (часто устройства, фактическая функция оборудования которых эмулируется в программном обеспечении пользовательского режима, например Winprinters). Поскольку 64-битные драйверы для большинства устройств были недоступны до начала 2007 года (Vista x64), использование 64-битной версии Windows считалось сложной задачей. Однако с тех пор тенденция переместилась в сторону 64-битных вычислений, тем более, что цены на память упали, а использование оперативной памяти объемом более 4 ГиБ увеличилось. Большинство производителей начали предоставлять для новых устройств как 32-битные, так и 64-битные драйверы, поэтому отсутствие 64-битных драйверов перестало быть проблемой. 64-битные драйверы не предоставлялись для многих старых устройств, которые, следовательно, нельзя было использовать в 64-битных системах.

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

64-битные версии Windows не могут запускать 16-битное программное обеспечение . Однако большинство 32-битных приложений будут работать хорошо. 64-битные пользователи вынуждены устанавливать виртуальную машину 16- или 32-битной операционной системы для запуска 16-битных приложений или использовать одну из альтернатив NTVDM . [38]

Mac OS X 10.4 «Tiger» и Mac OS X 10.5 «Leopard» имели только 32-битное ядро, но они могли запускать 64-битный код пользовательского режима на 64-битных процессорах. Mac OS X 10.6 «Snow Leopard» имела как 32-, так и 64-битное ядра, и на большинстве компьютеров Mac 32-битное ядро ​​использовалось даже на 64-битных процессорах. Это позволило этим компьютерам Mac поддерживать 64-битные процессы, сохраняя при этом поддержку 32-битных драйверов устройств; но не 64-битные драйверы и преимущества в производительности, которые они могут дать. Mac OS X 10.7 «Lion» работала с 64-битным ядром на большем количестве компьютеров Mac, а OS X 10.8 «Mountain Lion» и более поздние версии macOS имеют только 64-битное ядро. В системах с 64-битными процессорами как 32-, так и 64-битные ядра macOS могут выполнять 32-битный код пользовательского режима, а все версии macOS до macOS Mojave (10.14) включают 32-битные версии библиотек, которые 32-битные. битные приложения будут использовать, поэтому 32-битное программное обеспечение пользовательского режима для macOS будет работать в этих системах. 32-битные версии библиотек были удалены Apple из macOS Catalina (10.15).

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

64-битные модели данных

В 32-битных программах указатели и типы данных, такие как целые числа, обычно имеют одинаковую длину. Это не обязательно верно на 64-битных машинах. [39] [40] [41] Таким образом , смешение типов данных в языках программирования, таких как C и его потомках, таких как C++ и Objective-C, может работать в 32-битных реализациях, но не в 64-битных реализациях.

Во многих средах программирования для C и языков, производных от C, на 64-битных машинах intпеременные по-прежнему имеют ширину 32 бита, но длинные целые числа и указатели имеют ширину 64 бита. Они описаны как имеющие модель данных LP64 , что является аббревиатурой «Long, Pointer, 64». [42] [43] Другими моделями являются модель данных ILP64 , в которой все три типа данных имеют ширину 64 бита, [44] [43] и даже модель SILP64 , в которой короткие целые числа также имеют ширину 64 бита. [45] [46] Однако в большинстве случаев необходимые модификации относительно незначительны и просты, и многие хорошо написанные программы можно просто перекомпилировать для новой среды без каких-либо изменений. Другой альтернативой является модель LLP64 , которая сохраняет совместимость с 32-битным кодом, оставляя оба и 32-битными. [47] [43] LL относится к длинному целочисленному типу, который имеет длину не менее 64 бит на всех платформах, включая 32-битные среды.intlong

Существуют также системы с 64-битными процессорами, использующими модель данных ILP32 с добавлением 64-битных длинных целых чисел; это также используется на многих платформах с 32-битными процессорами. Эта модель уменьшает размер кода и размер структур данных, содержащих указатели, за счет гораздо меньшего адресного пространства, что является хорошим выбором для некоторых встроенных систем. Для наборов команд, таких как x86 и ARM, в которых 64-битная версия набора команд имеет больше регистров, чем 32-битная версия, он обеспечивает доступ к дополнительным регистрам без потери места. Он распространен в 64-битных RISC-машинах, [ нужна ссылка ] исследован в x86 как x32 ABI и недавно использовался в Apple Watch Series 4 и 5. [48] [49]

Многие 64-битные платформы сегодня используют модель LP64 (включая Solaris, AIX , HP-UX , Linux, macOS, BSD и IBM z/OS). Microsoft Windows использует модель LLP64 . Недостаток модели LP64 заключается в том, что сохранение a longв intформате усекается. С другой стороны, преобразование указателя в long«работает» в LP64. В модели LLP64 все наоборот. Это не проблемы, которые затрагивают код, полностью соответствующий стандартам, но код часто пишется с неявными предположениями о ширине типов данных. Код C должен предпочитать ( u) intptr_tвместо longприведения указателей к целочисленным объектам.

Модель программирования — это выбор, соответствующий конкретному компилятору, и несколько моделей могут сосуществовать в одной и той же ОС. Однако обычно доминирует модель программирования, выбранная в качестве основной модели для интерфейса программирования приложений (API) ОС.

Еще одним соображением является модель данных, используемая для драйверов устройств . Драйверы составляют большую часть кода операционной системы в большинстве современных операционных систем [ нужна ссылка ] (хотя многие из них могут не загружаться во время работы операционной системы). Многие драйверы активно используют указатели для манипулирования данными, и в некоторых случаях им приходится загружать указатели определенного размера в аппаратное обеспечение, которое они поддерживают, для прямого доступа к памяти (DMA). Например, драйвер для 32-битного PCI-устройства, запрашивающий у устройства передачу данных DMA в верхние области памяти 64-битной машины, не мог удовлетворить запросы операционной системы на загрузку данных с устройства в память, превышающую барьер в 4 гибибайта . , поскольку указатели на эти адреса не помещаются в регистры DMA устройства. Эта проблема решается за счет того, что ОС учитывает ограничения памяти устройства при формировании запросов к драйверам для DMA или за счет использования блока управления памятью ввода-вывода (IOMMU).

Текущие 64-битные архитектуры

По состоянию на август 2023 года к 64-битным архитектурам, для которых производятся процессоры, относятся:

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

Смотрите также

Примечания

  1. ^ , например числа с плавающей запятой .

Рекомендации

  1. ^ Руководство пользователя процессора Pentium, том 1: Справочник данных процессора Pentium (PDF) . Интел . 1993.
  2. ^ «Справочное руководство по аппаратному обеспечению компьютерной системы Cray-1» (PDF) . Крейские исследования . 1977 год . Проверено 8 октября 2013 г.
  3. ^ Граймс, Джек; Кон, Лес; Бхарадвадж, Раджив (июль – август 1989 г.). «64-разрядный процессор Intel i860: процессор общего назначения с возможностями 3D-графики». IEEE Компьютерная графика и приложения . 9 (4): 85–94. дои : 10.1109/38.31467. S2CID  38831149 . Проверено 19 ноября 2010 г.
  4. ^ «Справочное руководство программиста семейства процессоров i860» (PDF) . Интел . 1991 год . Проверено 12 сентября 2019 г.
  5. ^ «NEC предлагает два высокопроизводительных 64-битных RISC-микропроцессора» (пресс-релиз). НЭК . 20 января 1998 г. Проверено 9 января 2011 г. Версии процессора VR4300 широко используются в потребительских и офисных приложениях автоматизации, включая популярные видеоигры Nintendo 64TM и современные лазерные принтеры, такие как недавно анонсированное, отмеченное наградами семейство принтеров Hewlett-Packard LaserJet 4000.
  6. ^ «64-битный микропроцессор i860» . Интел. 1989 год . Проверено 30 ноября 2010 г.
  7. ^ "История Atari Jaguar" . АтариЭйдж .
  8. ^ Джо Генрих (1994). Руководство пользователя микропроцессора MIPS R4000 (2-е изд.). МИПС Технологии, Инк.
  9. ^ Ричард Л. Сайтс (1992). «Архитектура Альфа AXP». Цифровой технический журнал . Корпорация цифрового оборудования. 4 (4).
  10. ^ Гвеннап, Линли (3 октября 1994 г.). «UltraSparc повышает производительность SPARC». Отчет микропроцессора . Ресурсы по микродизайну. 8 (13).
  11. ^ Бишоп, JW; и другие. (июль 1996 г.). «64-битный RISC-микропроцессор PowerPC AS A10». Журнал исследований и разработок IBM . Корпорация IBM. 40 (4): 495–505. дои : 10.1147/rd.404.0495.
  12. Гвеннап, Линли (14 ноября 1994 г.). «PA-8000 сочетает в себе сложность и скорость». Отчет микропроцессора . Ресурсы по микродизайну. 8 (15).
  13. ^ Ф. П. О'Коннелл; SW Белый (ноябрь 2000 г.). «POWER3: следующее поколение процессоров PowerPC». Журнал исследований и разработок IBM . Корпорация IBM. 44 (6): 873–884. дои : 10.1147/rd.446.0873.
  14. ^ «VIA раскрывает подробности процессорного ядра Isaiah следующего поколения» . VIA Technologies, Inc. Архивировано из оригинала 11 октября 2007 г. Проверено 18 июля 2007 г.
  15. ^ «Обзор технологии ARMv8» (PDF) . 31 октября 2011 г. Архивировано из оригинала (PDF) 11 ноября 2011 г. . Проверено 15 ноября 2012 г.
  16. ^ «ARM выпускает серию Cortex-A50, самые энергоэффективные 64-битные процессоры в мире» (пресс-релиз). АРМ Холдингс . Проверено 31 октября 2012 г.
  17. ^ «ARM Keynote: Выпущены 64-битные процессоры ARM Cortex-A53 и ARM Cortex-A57 ARMv8» . ARMdevices.net . 31 октября 2012 г.
  18. ^ «Synopsys представляет новый 64-битный IP-процессор ARC» . Архивировано из оригинала 31 марта 2022 года.
  19. ^ Стефан Берка. «Операционная система Unicos». www.operating-system.org. Архивировано из оригинала 26 ноября 2010 года . Проверено 19 ноября 2010 г.
  20. Джон «Бешеный пес» Холл (1 июня 2000 г.). «Моя жизнь и свободное программное обеспечение». Linux-журнал .
  21. ^ Энди Клин. Портирование Linux на x86-64 (PDF) . Оттавский симпозиум Linux 2001. Статус: Ядро, компилятор, набор инструментов работают. Ядро загружается и работает на симуляторе и используется для переноса пользовательского пространства и запуска программ.
  22. ^ аб Джон Сиракузы (сентябрь 2009 г.). «Mac OS X 10.6 Snow Leopard: обзор Ars Technica». Арс Техника . п. 5. Архивировано из оригинала 9 октября 2009 года . Проверено 6 сентября 2009 г.
  23. ^ Джорис Эверс (5 января 2005 г.). «Microsoft отказывается от Windows XP ради Itanium». Компьютерный мир. Архивировано из оригинала 18 июня 2013 года . Проверено 17 октября 2017 г.
  24. ^ «Microsoft повышает ограничение скорости с появлением 64-разрядных выпусков Windows Server 2003 и Windows XP Professional» (пресс-релиз). Майкрософт. 25 апреля 2005 года . Проверено 10 сентября 2015 г.
  25. ^ «UEFI_on_Dell BizClient_Platforms» (PDF) .
  26. ^ «Руководство программиста AMD64, том 2: Системное программирование» (PDF) . Передовые микроустройства. Декабрь 2016. с. 120.
  27. ^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 3A: Руководство по системному программированию, часть 1» (PDF) . Интел. Сентябрь 2016. с. 4-2.
  28. ^ «Power ISA версии 3.0» . ИБМ . 30 ноября 2015 г. с. 983.
  29. ^ «Проект Oracle SPARC Architecture 2015 D1.0.9» . Оракул . п. 475.
  30. ^ «Справочное руководство по архитектуре ARM ARMv8, для профиля архитектуры ARMv8-A» . стр. Д4-1723, Д4-1724, Д4-1731.
  31. ^ Маши, Джон (октябрь 2006 г.). «Долгая дорога к 64 битам». Очередь АКМ . 4 (8): 85–94. дои : 10.1145/1165754.1165766 .
  32. ^ «Windows 7: 64-разрядная версия против 32-разрядной?». Форумы W7. Архивировано из оригинала 5 апреля 2009 года . Проверено 5 апреля 2009 г.
  33. ^ «Часто задаваемые вопросы о виртуальной машине Java HotSpot» . Sun Microsystems, Inc. Архивировано из оригинала 10 мая 2007 года . Проверено 3 мая 2007 г.
  34. ^ «Описание различий между 32-битными версиями Windows Vista и 64-битными версиями Windows Vista» . Проверено 14 октября 2011 г.
  35. ^ Марк Руссинович (21 июля 2008 г.). «Расширяя возможности Windows: физическая память» . Проверено 9 марта 2017 г.
  36. ^ Чаппелл, Джефф (27 января 2009 г.). «Лицензионная память в 32-битной Windows Vista». geoffchappell.com . ВП: СПС . Проверено 9 марта 2017 г.
  37. ^ «Внутри собственных приложений». Technet.microsoft.com. 01.11.2006. Архивировано из оригинала 23 октября 2010 года . Проверено 19 ноября 2010 г.
  38. Линкольн Спектор (12 августа 2013 г.). «Запустите старую программу на новом ПК».
  39. ^ Питер Сибах (2006). «Изучение 64-битной разработки на POWER5: насколько портативен ваш код на самом деле?». ИБМ .
  40. ^ Генри Спенсер. «Десять заповедей программиста на C».
  41. ^ «История удара и ошибки». Datacenterworks.com . Проверено 19 ноября 2010 г.
  42. ^ «Модели данных ILP32 и LP64 и размеры типов данных» . Руководство по программированию на z/OS XL C/C++ .
  43. ^ abc «64-битные модели программирования» . Проверено 5 июня 2020 г.
  44. ^ «Использование интерфейса ILP64 и интерфейса LP64» . Интел . Проверено 24 июня 2020 г. .
  45. ^ ab «Справочное руководство Cray C/C++». Август 1998 г. Таблица 9-1. Сопоставление типов данных систем Cray Research. Архивировано из оригинала 16 октября 2013 года . Проверено 15 октября 2013 г.
  46. ^ ab «Справочное руководство Cray C и C++ (8.7) S-2179» . Проверено 24 июня 2020 г. .
  47. ^ «Абстрактные модели данных — приложения Windows» . 30 мая 2018 г.
  48. ^ «Информационный документ ILP32 для AArch64» . АРМ Лимитед. 9 июня 2015 года. Архивировано из оригинала 30 декабря 2018 года . Проверено 9 октября 2018 г.
  49. ^ «Устройства Apple в 2018 году». Воаук, исследователь безопасности. 6 октября 2018 г.

Внешние ссылки