С точки зрения программного обеспечения 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-битный регистр может содержать любое из 2 64 (более 18 квинтиллионов или 1,8×10 19 ) различных значений. Диапазон целочисленных значений, которые могут быть сохранены в 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 775 807 (2 63 − 1) для представления в виде дополнения до двух . Таким образом, процессор с 64-битными адресами памяти может напрямую обращаться к 264 байтам (16 эксабайтам или ЭБ) памяти с байтовой адресацией .
Без дополнительных оговорок, архитектура 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 , появились в середине 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 . [6] 64-битные вычисления начали просачиваться на персональные компьютеры с 2003 года, когда некоторые модели в линейках Macintosh от Apple перешли на процессоры 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.
Intel представляет процессор Intel i860 с сокращенным набором команд (RISC). Продаваемый как «64-битный микропроцессор», он имел по сути 32-битную архитектуру, улучшенную 3D-графическим блоком, способным выполнять 64-битные целочисленные операции. [7]
Intel объявляет о планах по 64-битной архитектуре IA-64 (совместно разработанной с Hewlett-Packard ) в качестве преемника своих 32-битных процессоров IA-32 . Была намечена дата запуска 1998-1999.
1995
Sun выпускает 64-разрядный процессор SPARC , UltraSPARC . [11] Принадлежащая Fujitsu HAL Computer Systems выпускает рабочие станции на базе 64-разрядного ЦП, независимо разработанного HAL первого поколения SPARC64 . IBM выпускает микропроцессоры A10 и A30, первые 64-разрядные процессоры PowerPC AS. [12] IBM также выпускает 64-разрядное обновление системы AS/400, которое может преобразовывать операционную систему, базу данных и приложения.
1996
Nintendo представляет игровую консоль Nintendo 64 , созданную на основе недорогого варианта MIPS R4000. HP выпускает первую реализацию своей 64-битной архитектуры PA-RISC 2.0 , PA-8000 . [13]
1998
IBM выпускает линейку POWER3 полнофункциональных 64-битных процессоров PowerPC/ POWER . [14]
1999
Intel выпускает набор инструкций для архитектуры IA-64 . AMD публично раскрывает свой набор 64-битных расширений для IA-32, называемых x86-64 (позже переименованных в AMD64).
2000
IBM выпускает свой первый 64-разрядный мэйнфрейм z/Architecture — zSeries 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-битный процессор "G5" PowerPC 970, произведенный IBM. Intel утверждает, что ее чипы Itanium останутся единственными 64-битными процессорами.
2004
Intel, реагируя на рыночный успех AMD, признает, что разрабатывает клон расширений AMD64 под названием IA-32e (позже переименованный в EM64T, а затем снова переименованный в Intel 64). Intel поставляет обновленные версии своих семейств процессоров Xeon и Pentium 4 , поддерживающие новый 64-битный набор инструкций.
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 года из-за проблемы низкого выхода годных (большинство хороших пластин были нацелены на серверы и мэйнфреймы, в то время как основная линейка процессоров по-прежнему оставалась 130 нм 32-битной до 2006 года) и вскоре стали бюджетными после дебюта Core 2. AMD выпустила свой первый 64-битный мобильный процессор и производилась по 90 нм.
ARM Holdings анонсировала свои ядра Cortex-A53 и Cortex-A57, свои первые ядра на основе 64-битной архитектуры, 30 октября 2012 года. [17] [18]
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 . [19]
Хронология 64-битной операционной системы
1985
Cray выпускает UNICOS , первую 64-битную реализацию операционной системы Unix . [20]
IBM выпускает z/OS , 64-разрядную операционную систему, созданную на основе MVS , для новых 64-разрядных мэйнфреймов zSeries ; 64-разрядная версия Linux на z Systems выходит почти сразу же после выпуска процессора.
2001
Linux становится первым ядром ОС, полностью поддерживающим x86-64 (на симуляторе, поскольку процессоры x86-64 еще не были выпущены). [22]
Apple выпускает операционную систему Mac OS X 10.3 «Panther», которая добавляет поддержку собственной 64-битной целочисленной арифметики на процессорах PowerPC 970. [23] Выпускаются несколько дистрибутивов Linux с поддержкой AMD64 . Выпускаются FreeBSD с поддержкой AMD64.
2005
4 января Microsoft прекращает поддержку Windows XP 64-Bit Edition, поскольку ПК с процессорами IA-64 не выпускались с сентября прошлого года, и объявляет о разработке версий Windows x86-64 для ее замены. [24] 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. [25]
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-битными. [23]
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) и Secure Boot . [26]
2013
Apple выпускает iOS 7 , которая на компьютерах с процессорами AArch64 имеет 64-битное ядро, поддерживающее 64-битные приложения. [ необходима цитата ]
Apple выпускает iOS 11 , поддерживающую только машины с процессорами AArch64. Она имеет 64-битное ядро, которое поддерживает только 64-битные приложения. 32-битные приложения больше несовместимы. [ необходима цитата ]
2018
Apple выпускает watchOS 5 , первую версию watchOS с поддержкой 64-битной архитектуры. [ необходима цитата ]
5 октября Microsoft выпускает Windows 11 , которая поддерживает только 64-разрядные системы, прекращая поддержку систем IA-32 и AArch32. [ необходима цитата ]
2022
Google выпускает Pixel 7 , который прекращает поддержку 32-битных приложений. 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-битным процессором. [ необходима цитата ]
2024
Microsoft выпускает Windows 11 версии 24H2 , в которой ARM-версии Windows прекращают поддержку 32-разрядных ARM-приложений.
Ограничения процессоров
В принципе, 64-битный микропроцессор может адресовать 16 ЭБ ( 16 × 1024 6 = 2 64 = 18 446 744 073 709 551 616 байт ) памяти. Однако не все наборы инструкций и не все процессоры, реализующие эти наборы инструкций, поддерживают полное 64-битное виртуальное или физическое адресное пространство.
Архитектура x86-64 (по состоянию на 2016 год [update]) допускает 48 бит для виртуальной памяти и, для любого данного процессора, до 52 бит для физической памяти. [27] [28] Эти ограничения допускают размеры памяти 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 бит для физической памяти. [29]
Архитектура Oracle SPARC 2015 допускает 64 бита для виртуальной памяти и, для любого процессора, от 40 до 56 бит для физической памяти. [30]
Архитектура системы виртуальной памяти ARM AArch64 допускает 48 бит для виртуальной памяти и, для любого процессора, от 32 до 48 бит для физической памяти. [31]
Спецификация 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-битную архитектуру является фундаментальным изменением, поскольку большинство операционных систем должны быть значительно модифицированы, чтобы воспользоваться преимуществами новой архитектуры, поскольку это программное обеспечение должно управлять фактическим аппаратным обеспечением адресации памяти. [32] Другое программное обеспечение также должно быть перенесено для использования новых возможностей; более старое 32-битное программное обеспечение может поддерживаться либо в силу того, что 64-битный набор инструкций является надмножеством 32-битного набора инструкций, так что процессоры, поддерживающие 64-битный набор инструкций, также могут выполнять код для 32-битного набора инструкций, либо посредством программной эмуляции , либо посредством фактической реализации 32-битного процессорного ядра в 64-битном процессоре, как в случае с некоторыми процессорами Itanium от Intel, которые включали процессорное ядро IA-32 для запуска 32-битных приложений x86 . Операционные системы для этих 64-битных архитектур обычно поддерживают как 32-битные, так и 64-битные приложения. [33]
Одним из существенных исключений является 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, имеют доступ к большему адресному пространству. [34]
Скорость — не единственный фактор, который следует учитывать при сравнении 32- и 64-разрядных процессоров. Такие приложения, как многозадачность, стресс-тестирование и кластеризация — для высокопроизводительных вычислений (HPC) — могут больше подходить для 64-разрядной архитектуры при правильном развертывании. По этой причине 64-разрядные кластеры широко используются в крупных организациях, таких как IBM, HP и Microsoft.
Краткое содержание:
64-разрядный процессор лучше всего работает с 64-разрядным программным обеспечением.
64-разрядный процессор может иметь обратную совместимость , что позволяет ему запускать 32-разрядное прикладное программное обеспечение для 32-разрядной версии его набора инструкций, а также может поддерживать запуск 32-разрядных операционных систем для 32-разрядной версии его набора инструкций.
32-разрядный процессор несовместим с 64-разрядным программным обеспечением.
Плюсы и минусы
Распространенное заблуждение заключается в том, что 64-битная архитектура ничем не лучше 32-битной, если только компьютер не имеет более 4 ГБ оперативной памяти . [35] Это не совсем так:
Некоторые операционные системы и определенные конфигурации оборудования ограничивают физическое пространство памяти 3 ГБ на системах IA-32 , поскольку большая часть области 3–4 ГБ зарезервирована для аппаратной адресации; см. барьер 3 ГБ ; 64-разрядные архитектуры могут адресовать гораздо больше, чем 4 ГБ. Однако процессоры IA-32, начиная с Pentium Pro , допускают 36-разрядное физическое адресное пространство памяти, используя Physical Address Extension (PAE), что дает диапазон физических адресов 64 ГБ, из которых до 62 ГБ может использоваться основной памятью; операционные системы, поддерживающие PAE, могут не быть ограничены 4 ГБ физической памяти, даже на процессорах IA-32. Однако драйверы и другое программное обеспечение режима ядра, тем более старые версии, могут быть несовместимы с PAE; это было указано в качестве причины ограничения 32-разрядных версий Microsoft Windows 4 ГБ физической оперативной памяти [36] (хотя обоснованность этого объяснения оспаривается [37] ).
Некоторые операционные системы резервируют части адресного пространства процесса для использования ОС, эффективно сокращая общее адресное пространство, доступное для отображения памяти для пользовательских программ. Например, 32-разрядная Windows резервирует 1 или 2 ГБ (в зависимости от настроек) общего адресного пространства для ядра, что оставляет только 3 или 2 ГБ (соответственно) адресного пространства, доступного для пользовательского режима. Этот предел намного выше в 64-разрядных операционных системах.
Файлы, отображенные в память, становятся все более сложными для реализации в 32-битных архитектурах, поскольку файлы размером более 4 ГБ становятся все более распространенными; такие большие файлы не могут быть легко отображены в память в 32-битных архитектурах, поскольку только часть файла может быть отображена в адресное пространство за раз, и для доступа к такому файлу с помощью отображения в память, отображенные части должны быть выгружены в адресное пространство и из него по мере необходимости. Это проблема, поскольку отображение памяти, если оно правильно реализовано ОС, является одним из самых эффективных методов «диск-память».
Некоторые 64-битные программы, такие как кодировщики, декодеры и программное обеспечение для шифрования, могут получить значительную выгоду от 64-битных регистров, [ требуется ссылка ], в то время как производительность других программ, таких как ориентированные на 3D-графику, остается неизменной при переключении с 32-битной на 64-битную среду. [ требуется ссылка ]
Некоторые 64-битные архитектуры, такие как x86-64 и AArch64 , поддерживают больше регистров общего назначения, чем их 32-битные аналоги (хотя это не связано конкретно с длиной слова). Это приводит к значительному увеличению скорости для плотных циклов, поскольку процессору не приходится извлекать данные из кэша или основной памяти, если данные могут поместиться в доступных регистрах.
int a , b , c , d , e ; для ( a = 0 ; a < 100 ; a ++ ) { b = a ; c = b ; d = c ; e = 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 Technology для IA-64 и AMD64. 64-разрядная среда драйверов Windows Native Mode [38] работает поверх 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 . [39]
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-битных машин. [40] [41] [42] Таким образом, смешивание типов данных в языках программирования, таких как C и его потомках, таких как C++ и Objective-C, может работать в 32-битных реализациях, но не в 64-битных реализациях.
Во многих средах программирования для языков C и производных от C на 64-битных машинах intпеременные по-прежнему имеют ширину 32 бита, но длинные целые числа и указатели имеют ширину 64 бита. Они описываются как имеющие модель данных LP64 , что является аббревиатурой от «Long, Pointer, 64». [43] [44] Другие модели — это модель данных ILP64 , в которой все три типа данных имеют ширину 64 бита, [45] [44] и даже модель SILP64 , в которой короткие целые числа также имеют ширину 64 бита. [46] [47] Однако в большинстве случаев требуемые изменения относительно незначительны и просты, и многие хорошо написанные программы можно просто перекомпилировать для новой среды без изменений. Другой альтернативой является модель LLP64 , которая поддерживает совместимость с 32-битным кодом, оставляя и как 32-битные. [48] [44] LL относится к типу длинного целого числа , который имеет длину не менее 64 бит на всех платформах, включая 32-битные среды.intlong
Существуют также системы с 64-битными процессорами, использующие модель данных ILP32 с добавлением 64-битных длинных целых чисел; это также используется на многих платформах с 32-битными процессорами. Эта модель уменьшает размер кода и размер структур данных, содержащих указатели, за счет гораздо меньшего адресного пространства, хороший выбор для некоторых встраиваемых систем. Для наборов инструкций, таких как x86 и ARM, в которых 64-битная версия набора инструкций имеет больше регистров, чем 32-битная версия, она обеспечивает доступ к дополнительным регистрам без штрафа за пространство. Это распространено в 64-битных RISC-машинах, [ необходима ссылка ] исследовано в x86 как x32 ABI , и недавно было использовано в Apple Watch Series 4 и 5. [49] [50]
Многие 64-битные платформы сегодня используют модель LP64 (включая Solaris, AIX , HP-UX , Linux, macOS, BSD и IBM z/OS). Microsoft Windows использует модель LLP64 . Недостатком модели LP64 является то, что сохранение a longв a intусекает. С другой стороны, преобразование указателя в a longбудет «работать» в LP64. В модели LLP64 верно обратное. Это не те проблемы, которые влияют на полностью соответствующий стандарту код, но код часто пишется с неявными предположениями о ширине типов данных. Код на языке C должен предпочесть ( u) intptr_tвместо longприведения указателей к целочисленным объектам.
Модель программирования — это выбор, сделанный для соответствия данному компилятору, и несколько из них могут сосуществовать в одной ОС. Однако модель программирования, выбранная в качестве основной модели для интерфейса программирования приложений ОС (API), обычно доминирует.
Другим соображением является модель данных, используемая для драйверов устройств . Драйверы составляют большую часть кода операционной системы в большинстве современных операционных систем [ требуется ссылка ] (хотя многие из них могут не загружаться во время работы операционной системы). Многие драйверы активно используют указатели для манипулирования данными и в некоторых случаях должны загружать указатели определенного размера в оборудование, которое они поддерживают для прямого доступа к памяти (DMA). Например, драйвер для 32-разрядного устройства PCI, запрашивающий у устройства данные DMA в верхних областях памяти 64-разрядной машины, не может удовлетворить запросы операционной системы на загрузку данных с устройства в память выше барьера в 4 гигабайта , поскольку указатели для этих адресов не поместятся в регистры DMA устройства. Эта проблема решается за счет того, что ОС учитывает ограничения памяти устройства при генерации запросов к драйверам для DMA или за счет использования блока управления памятью ввода-вывода (IOMMU).
Текущие 64-битные архитектуры
По состоянию на август 2023 года [update]64-битные архитектуры, для которых производятся процессоры, включают:
64-разрядное расширение, созданное компанией Advanced Micro Devices (AMD) для архитектуры Intel x86 (позже лицензированной Intel); обычно называемое x86-64 , AMD64 или x64 :
Архитектура Intel K1OM, вариант Intel 64 без инструкций CMOV, MMX и SSE, используется в сопроцессорах Xeon Phi первого поколения (Knights Corner), двоично несовместима с программами x86-64
Большинство 64-битных архитектур, созданных на основе той же 32-битной архитектуры, могут выполнять код, написанный для 32-битных версий, изначально, без потери производительности. [ требуется ссылка ] Такой тип поддержки обычно называется двухархитектурной поддержкой или, в более общем смысле, многоархитектурной поддержкой .
^ Руководство пользователя процессора Pentium. Том 1: Справочник процессоров Pentium (PDF) . Intel . 1993.
^ "Справочное руководство по аппаратному обеспечению компьютерной системы Cray-1" (PDF) . Cray Research . 1977 . Получено 8 октября 2013 .
^ Граймс, Джек; Кон, Лес; Бхарадвадж, Раджив (июль–август 1989 г.). «64-разрядный процессор Intel i860: универсальный ЦП с возможностями 3D-графики». IEEE Computer Graphics and Applications . 9 (4): 85–94. doi :10.1109/38.31467. S2CID 38831149. Получено 19 ноября 2010 г.
^ "Справочное руководство программиста семейства процессоров i860" (PDF) . Intel . 1991 . Получено 12 сентября 2019 .
^ "NEC предлагает два высокопроизводительных 64-битных RISC-микропроцессора" (пресс-релиз). NEC . 1998-01-20 . Получено 2011-01-09 . Версии процессора VR4300 широко используются в потребительских и офисных приложениях автоматизации, включая популярную видеоигру Nintendo 64™ и современные лазерные принтеры, такие как недавно анонсированное, отмеченное наградами семейство принтеров Hewlett-Packard LaserJet 4000.
^ Технический обзор микропроцессора MIPS R5000 (PDF) , MIPS Technologies, Inc , получено 19 августа 2024 г.
^ Джо Хайнрих (1994). Руководство пользователя микропроцессора MIPS R4000 (2-е изд.). MIPS Technologies, Inc.
^ Ричард Л. Сайтс (1992). "Архитектура Alpha AXP". Цифровой технический журнал . 4 (4). Корпорация цифрового оборудования.
^ Гвеннап, Линли (3 октября 1994 г.). «UltraSparc раскрывает производительность SPARC». Microprocessor Report . 8 (13). Ресурсы MicroDesign.
^ Бишоп, Дж. В. и др. (июль 1996 г.). «PowerPC AS A10 64-битный RISC-микропроцессор». IBM Journal of Research and Development . 40 (4). IBM Corporation: 495–505. doi :10.1147/rd.404.0495.
^ Гвеннап, Линли (14 ноября 1994 г.). «PA-8000 сочетает сложность и скорость». Microprocessor Report . 8 (15). MicroDesign Resources.
^ FP O'Connell; SW White (ноябрь 2000 г.). «POWER3: Следующее поколение процессоров PowerPC». IBM Journal of Research and Development . 44 (6). IBM Corporation: 873–884. doi :10.1147/rd.446.0873.
^ "VIA раскрывает подробности о ядре процессора Isaiah следующего поколения". VIA Technologies, Inc. Архивировано из оригинала 2007-10-11 . Получено 2007-07-18 .
^ "ARMv8 Technology Preview" (PDF) . 31 октября 2011 г. Архивировано из оригинала (PDF) 11 ноября 2011 г. Получено 15 ноября 2012 г.
^ "ARM запускает серию Cortex-A50, самые энергоэффективные 64-битные процессоры в мире" (пресс-релиз). ARM Holdings . Получено 2012-10-31 .
^ "ARM Keynote: выпущены 64-битные процессоры ARMv8 ARM Cortex-A53 и ARM Cortex-A57". ARMdevices.net . 2012-10-31.
^ "Synopsys представляет новый 64-битный процессор ARC IP". Архивировано из оригинала 31 марта 2022 г.
^ Стефан Берка. "Операционная система Unicos". www.operating-system.org. Архивировано из оригинала 26 ноября 2010 года . Получено 2010-11-19 .
↑ Джон «maddog» Холл (1 июня 2000 г.). «Моя жизнь и свободное ПО». Linux Journal .
^ Энди Клин. Портирование Linux на x86-64 (PDF) . Ottawa Linux Symposium 2001. Статус: Ядро, компилятор, цепочка инструментов работают. Ядро загружается и работает на симуляторе и используется для портирования пользовательского пространства и запуска программ
^ ab John Siracusa (сентябрь 2009 г.). "Mac OS X 10.6 Snow Leopard: обзор Ars Technica". Ars Technica . стр. 5. Архивировано из оригинала 9 октября 2009 г. Получено 06.09.2009 .
^ Йорис Эверс (5 января 2005 г.). «Microsoft отменяет выпуск Windows XP для Itanium». Computerworld. Архивировано из оригинала 18 июня 2013 г. Получено 17 октября 2017 г.
^ «Microsoft повышает предел скорости с появлением 64-разрядных версий Windows Server 2003 и Windows XP Professional» (пресс-релиз). Microsoft. 25 апреля 2005 г. Получено 10 сентября 2015 г.
^ "Руководство программиста AMD64, том 2: Системное программирование" (PDF) . Advanced Micro Devices. Декабрь 2016 г. стр. 120.
^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 3A: Руководство по системному программированию, часть 1» (PDF) . Intel. Сентябрь 2016 г. стр. 4-2.
^ "Power ISA Version 3.0". IBM . 30 ноября 2015 г. стр. 983.
^ «Справочное руководство по архитектуре ARM ARMv8, для профиля архитектуры ARMv8-A». стр. D4-1723, D4-1724, D4-1731.
^ Mashey, John (октябрь 2006 г.). «Долгая дорога к 64 битам». ACM Queue . 4 (8): 85–94. doi : 10.1145/1165754.1165766 .
^ "Windows 7: 64 бит против 32 бит?". Форумы W7. Архивировано из оригинала 5 апреля 2009 г. Получено 2009-04-05 .
^ "Часто задаваемые вопросы о Java HotSpot VM". Sun Microsystems, Inc. Архивировано из оригинала 10 мая 2007 г. Получено 2007-05-03 .
^ "Описание различий между 32-разрядными версиями Windows Vista и 64-разрядными версиями Windows Vista" . Получено 14.10.2011 .
^ Марк Руссинович (2008-07-21). "Расширяя границы Windows: Физическая память" . Получено 2017-03-09 .
^ Чаппелл, Джефф (27.01.2009). «Лицензированная память в 32-разрядной Windows Vista». geoffchappell.com . WP:SPS . Получено 9 марта 2017 г. .
^ "Inside Native Applications". Technet.microsoft.com. 2006-11-01. Архивировано из оригинала 23 октября 2010 г. Получено 2010-11-19 .
↑ Линкольн Спектор (12 августа 2013 г.). «Запуск старой программы на новом ПК».
^ Питер Сибах (2006). «Изучение 64-битной разработки на POWER5: насколько на самом деле переносим ваш код?». IBM .
↑ Генри Спенсер. «Десять заповедей для программистов на языке C».
^ "История о стуке и провале". Datacenterworks.com . Получено 19 ноября 2010 г.
^ "Модели данных ILP32 и LP64 и размеры типов данных". Руководство по программированию z/OS XL C/C++ .
^ abc "64-битные модели программирования" . Получено 2020-06-05 .
^ "Использование интерфейса ILP64 против интерфейса LP64". Intel . Получено 24 июня 2020 г. .
^ ab "Cray C/C++ Reference Manual". Август 1998 г. Таблица 9-1. Сопоставление типов данных систем Cray Research. Архивировано из оригинала 16 октября 2013 г. Получено 15 октября 2013 г.
^ ab "Cray C and C++ Reference Manual (8.7) S-2179" . Получено 24 июня 2020 г. .
^ «Абстрактные модели данных — приложения Windows». 30 мая 2018 г.
^ "ILP32 for AArch64 Whitepaper". ARM Limited. 9 июня 2015 г. Архивировано из оригинала 30 декабря 2018 г. Получено 9 октября 2018 г.
^ «Устройства Apple в 2018 году». woachk, исследователь безопасности. 6 октября 2018 г.
Внешние ссылки
Руководство по переходу на 64-битную версию, библиотека разработчика Mac
Карпов, Андрей. «Сборник примеров 64-битных ошибок в реальных программах».
Килгард, Марк Дж. «Готов ли ваш X-код к 64-битной версии?». Архивировано из оригинала 3 июня 2001 г. Получено 26 сентября 2012 г.
Уроки по разработке 64-битных приложений на языке C/C++