stringtranslate.com

x86

Архитектура x86 была основана на микропроцессоре Intel 8086, впервые выпущенном в 1978 году.
Intel Core 2 Duo, пример x86-совместимого 64-битного многоядерного процессора
AMD Athlon (ранняя версия), технически отличная, но полностью совместимая реализация x86

x86 (также известный как 80x86 [3] или семейство 8086 [4] ) — семейство архитектур набора команд компьютера со сложным набором команд (CISC) [a], изначально разработанных Intel на основе микропроцессора 8086 и его варианта с 8-битной внешней шиной, 8088 . 8086 был представлен в 1978 году как полностью 16-битное расширение 8-битного микропроцессора Intel 8080 с сегментацией памяти в качестве решения для адресации большего объема памяти, чем может быть охвачено простым 16-битным адресом. Термин «x86» появился потому, что названия нескольких преемников процессора Intel 8086 заканчиваются на «86», включая 80186 , 80286 , 80386 и 80486 . В разговорной речи их названия были «186», «286», «386» и «486».

Термин не является синонимом совместимости с IBM PC , поскольку подразумевает множество другого компьютерного оборудования . Встроенные системы и компьютеры общего назначения использовали чипы x86 до начала рынка ПК-совместимых компьютеров , [b] некоторые из них до дебюта IBM PC (1981).

По состоянию на июнь 2022 года большинство проданных настольных и портативных компьютеров основаны на семействе архитектуры x86, [5] в то время как в мобильных категориях, таких как смартфоны или планшеты, доминирует ARM . В верхнем сегменте x86 продолжает доминировать в сегментах рабочих станций с интенсивными вычислениями и облачных вычислений . [6]

Обзор

В 1980-х и начале 1990-х годов, когда 8088 и 80286 все еще были в ходу, термин x86 обычно представлял любой совместимый с 8086 процессор. Сегодня, однако, x86 обычно подразумевает двоичную совместимость с 32 -битным набором инструкций 80386. Это связано с тем, что этот набор инструкций стал чем-то вроде наименьшего общего знаменателя для многих современных операционных систем, а также, вероятно, потому, что этот термин стал общепринятым после появления 80386 в 1985 году.

Через несколько лет после появления 8086 и 8088, Intel добавила некоторую сложность в свою схему именования и терминологию, поскольку «iAPX» амбициозного, но злополучного процессора Intel iAPX 432 был опробован на более успешном семействе чипов 8086, [c] применяемом как своего рода префикс системного уровня. Система 8086, включая сопроцессоры, такие как 8087 и 8089 , и более простые системные чипы Intel, [d] таким образом была описана как система iAPX 86. [7] [e] Существовали также термины iRMX (для операционных систем), iSBC (для одноплатных компьютеров) и iSBX (для многомодульных плат на основе архитектуры 8086), все вместе под заголовком Microsystem 80. [ 8] [9] Однако эта схема именования была довольно временной, просуществовав несколько лет в начале 1980-х годов. [f]

Хотя 8086 был в первую очередь разработан для встраиваемых систем и небольших многопользовательских или однопользовательских компьютеров, в основном как ответ на успешный 8080-совместимый Zilog Z80 , [10] линейка x86 вскоре выросла в возможностях и вычислительной мощности. Сегодня x86 повсеместно используется как в стационарных, так и в портативных персональных компьютерах, а также в компьютерах среднего уровня , рабочих станциях , серверах и большинстве новых суперкомпьютерных кластеров списка TOP500 . Большое количество программного обеспечения , включая большой список операционных систем x86, используют аппаратное обеспечение на базе x86.

Однако современный x86 относительно редко встречается во встраиваемых системах , а небольшие маломощные приложения (использующие крошечные батареи) и рынки недорогих микропроцессоров, такие как бытовая техника и игрушки, не имеют значительного присутствия x86. [g] Здесь распространены простые 8- и 16-битные архитектуры, а также более простые RISC-архитектуры, такие как RISC-V , хотя x86-совместимые VIA C7 , VIA Nano , AMD Geode , Athlon Neo и Intel Atom являются примерами 32- и 64-битных конструкций, используемых в некоторых относительно маломощных и недорогих сегментах.

Было предпринято несколько попыток, в том числе и Intel, положить конец доминированию на рынке «неэлегантной» архитектуры x86, разработанной непосредственно на основе первых простых 8-битных микропроцессоров. Примерами этого являются iAPX 432 (проект, первоначально названный Intel 8800 [11] ), Intel 960 , Intel 860 и архитектура Intel/Hewlett-Packard Itanium . Однако постоянное совершенствование микроархитектуры x86 , схемотехники и производства полупроводников затруднило бы замену x86 во многих сегментах. 64-битное расширение x86 от AMD (на которое Intel в конечном итоге отреагировала совместимым дизайном) [12] и масштабируемость чипов x86 в виде современных многоядерных процессоров подчеркивают x86 как пример того, как постоянное совершенствование устоявшихся отраслевых стандартов может противостоять конкуренции со стороны совершенно новых архитектур. [13]

Хронология

В таблице ниже перечислены модели процессоров и модельные ряды, реализующие различные архитектуры в семействе x86, в хронологическом порядке. Каждая линейка характеризуется значительно улучшенными или коммерчески успешными проектами микроархитектуры процессора.

История

Дизайнеры и производители

Am386 , выпущенный AMD в 1991 году

В разное время такие компании, как IBM , VIA , NEC , [h] AMD , TI , STM , Fujitsu , OKI , Siemens , Cyrix , Intersil , C&T , NexGen , UMC и DM&P начали проектировать или производить [i] процессоры x86 (ЦП), предназначенные для персональных компьютеров и встраиваемых систем. Другие компании, которые проектировали или производили процессоры x86 или x87, включают ITT Corporation , National Semiconductor , ULSI System Technology и Weitek .

Такие реализации x86 редко были простыми копиями, но часто использовали различные внутренние микроархитектуры и различные решения на электронном и физическом уровнях. Вполне естественно, что ранние совместимые микропроцессоры были 16-битными, в то время как 32-битные конструкции были разработаны гораздо позже. Для рынка персональных компьютеров реальные количества начали появляться около 1990 года с процессорами, совместимыми с i386 и i486 , часто названными аналогично оригинальным чипам Intel.

После полностью конвейерного i486 в 1993 году Intel представила торговую марку Pentium (которая, в отличие от чисел, могла быть зарегистрирована как торговая марка ) для своего нового набора суперскалярных x86-проектов. После того, как схема наименования x86 теперь была юридически одобрена, другим поставщикам x86 пришлось выбирать другие названия для своих x86-совместимых продуктов, и изначально некоторые решили продолжить с вариациями схемы нумерации: IBM объединилась с Cyrix для производства 5x86 , а затем очень эффективных линеек 6x86 (M1) и 6x86 MX ( MII ) проектов Cyrix, которые были первыми x86-микропроцессорами, реализующими переименование регистров для обеспечения спекулятивного выполнения .

Тем временем AMD разработала и изготовила усовершенствованный, но задержанный процессор 5k86 ( K5 ), который внутренне был тесно связан с более ранней конструкцией AMD 29K RISC ; подобно Nx586 от NexGen , он использовал стратегию, при которой выделенные этапы конвейера декодируют инструкции x86 в единообразные и легко обрабатываемые микрооперации , — метод, который по сей день остается основой для большинства конструкций x86.

Некоторые ранние версии этих микропроцессоров имели проблемы с рассеиванием тепла. 6x86 также страдал от нескольких незначительных проблем совместимости, у Nx586 не было блока с плавающей точкой (FPU) и (тогда решающей) совместимости по выводам, в то время как у K5 была несколько разочаровывающая производительность, когда он (в конце концов) был представлен.

Неосведомленность потребителей об альтернативах серии Pentium еще больше способствовала тому, что эти разработки оказались сравнительно неудачными, несмотря на то, что K5 имел очень хорошую совместимость с Pentium, а 6x86 был значительно быстрее Pentium на целочисленном коде. [j] Позднее AMD удалось вырасти в серьезного конкурента с набором процессоров K6 , который уступил место очень успешным Athlon и Opteron .

Были и другие претенденты, такие как Centaur Technology (ранее IDT ), Rise Technology и Transmeta . Энергоэффективные процессоры C3 и C7 от VIA Technologies , разработанные компанией Centaur , продавались в течение многих лет после их выпуска в 2005 году. Разработка Centaur 2008 года, VIA Nano , была их первым процессором с суперскалярным и спекулятивным исполнением . Он был представлен примерно в то же время (в 2008 году), когда Intel представила Intel Atom , свой первый процессор «по порядку» после Pentium P5 .

За прошедшие годы к исходному набору инструкций x86 было добавлено множество дополнений и расширений, практически всегда с полной обратной совместимостью . [k] Семейство архитектур было реализовано в процессорах Intel, Cyrix , AMD , VIA Technologies и многих других компаний; существуют также открытые реализации, такие как платформа Zet SoC (в настоящее время неактивна). [16] Тем не менее, из них только Intel, AMD, VIA Technologies и DM&P Electronics имеют архитектурные лицензии x86, и из них только первые две активно производят современные 64-битные проекты, что привело к тому, что было названо «дуополией» Intel и AMD в процессорах x86.

Однако в 2014 году базирующаяся в Шанхае китайская компания Zhaoxin , совместное предприятие китайской компании и VIA Technologies, начала проектировать процессоры x86 на базе VIA для настольных компьютеров и ноутбуков. Выпуск новейшего семейства "7" [17] процессоров x86 (например, KX-7000), которые не так быстры, как чипы AMD или Intel, но все еще являются современными, [18] был запланирован на 2021 год; однако по состоянию на март 2022 года выпуск еще не состоялся. [19]

От 16-битной и 32-битной к 64-битной архитектуре

Архитектура набора инструкций дважды расширялась до большего размера слова . В 1985 году Intel выпустила 32-битный 80386 (позже известный как i386), который постепенно заменил более ранние 16-битные чипы в компьютерах (хотя, как правило, не во встроенных системах ) в течение последующих лет; эта расширенная модель программирования изначально называлась архитектурой i386 (как и ее первая реализация), но позже Intel окрестила ее IA-32 , представив свою (неродственную) архитектуру IA-64 .

В 1999–2003 годах AMD расширила эту 32-битную архитектуру до 64 бит и называла ее x86-64 в ранних документах, а позже — AMD64 . Вскоре Intel приняла архитектурные расширения AMD под названием IA-32e, позже использовала название EM64T и, наконец, Intel 64. Microsoft и Sun Microsystems / Oracle также используют термин «x64», в то время как многие дистрибутивы Linux и BSD также используют термин «amd64». Microsoft Windows, например, обозначает свои 32-битные версии как «x86», а 64-битные версии как «x64», в то время как установочные файлы 64-битных версий Windows должны быть помещены в каталог с именем «AMD64». [20]

В 2023 году Intel предложила существенное изменение архитектуры, называемое X86S (ранее известное как X86-S). S в X86S означает «упрощение», что направлено на устранение поддержки устаревших режимов выполнения и инструкций. Процессор, реализующий это предложение, начнет выполнение непосредственно в длинном режиме и будет поддерживать только 64-разрядные операционные системы. 32-разрядный код будет поддерживаться только для пользовательских приложений, работающих в кольце 3, и будет использовать ту же упрощенную сегментацию, что и в длинном режиме. [21] [22]

Основные свойства архитектуры

Архитектура x86 представляет собой переменную длину инструкций, в первую очередь " CISC "-дизайн с упором на обратную совместимость . Однако набор инструкций не является типичным для CISC, а в основном представляет собой расширенную версию простых восьмибитных архитектур 8008 и 8080. Байтовая адресация включена, и слова хранятся в памяти с прямым порядком байтов. Доступ к памяти по невыровненным адресам разрешен почти для всех инструкций. Наибольший собственный размер для целочисленной арифметики и адресов памяти (или смещений ) составляет 16, 32 или 64 бита в зависимости от поколения архитектуры (более новые процессоры также включают прямую поддержку меньших целых чисел). Несколько скалярных значений могут обрабатываться одновременно с помощью блока SIMD, представленного в более поздних поколениях, как описано ниже. [l] Смещения немедленной адресации и немедленные данные могут быть выражены как 8-битные величины для часто встречающихся случаев или контекстов, где достаточно диапазона −128..127. Таким образом, типичные инструкции имеют длину 2 или 3 байта (хотя некоторые из них гораздо длиннее, а некоторые являются однобайтовыми).

Для дальнейшей экономии пространства кодирования большинство регистров выражаются в кодах операций с использованием трех или четырех бит, последний через префикс кода операции в 64-битном режиме, в то время как максимум один операнд инструкции может быть ячейкой памяти. [m] Однако этот операнд памяти может также быть местом назначения (или комбинированным источником и местом назначения), в то время как другой операнд, источник, может быть либо регистром, либо непосредственным. Помимо других факторов, это способствует размеру кода, который конкурирует с восьмибитными машинами, и позволяет эффективно использовать кэш-память инструкций. Относительно небольшое количество общих регистров (также унаследованных от своих 8-битных предков) сделало адресацию относительно регистра (использующую небольшие непосредственные смещения) важным методом доступа к операндам, особенно в стеке. Поэтому много работы было вложено в то, чтобы сделать такой доступ таким же быстрым, как доступ к регистрам, т. е. пропускную способность инструкции за один цикл в большинстве случаев, когда доступные данные доступны в кэше верхнего уровня.

Плавающая точка и SIMD

Для оригинального 8086 был разработан специализированный процессор с плавающей точкой и 80-битными внутренними регистрами, 8087. Впоследствии этот микропроцессор развился в расширенный 80387 , а более поздние процессоры включали обратно совместимую версию этой функциональности на том же микропроцессоре, что и основной процессор. В дополнение к этому, современные конструкции x86 также содержат SIMD -блок (см. SSE ниже), где инструкции могут работать параллельно на (одном или двух) 128-битных словах, каждое из которых содержит два или четыре числа с плавающей точкой (каждое шириной 64 или 32 бита соответственно) или, в качестве альтернативы, 2, 4, 8 или 16 целых чисел (каждое шириной 64, 32, 16 или 8 бит соответственно).

Наличие широких регистров SIMD означает, что существующие процессоры x86 могут загружать или хранить до 128 бит данных памяти в одной инструкции, а также выполнять побитовые операции (хотя и не целочисленную арифметику [n] ) на полных 128-битных количествах параллельно. Процессоры Intel Sandy Bridge добавили инструкции Advanced Vector Extensions (AVX), расширив регистры SIMD до 256 бит. Начальные инструкции Intel Many Core, реализованные процессорами Knights Corner Xeon Phi , и инструкции AVX-512, реализованные процессорами Knights Landing Xeon Phi и процессорами Skylake-X , используют 512-битные регистры SIMD.

Текущие реализации

Во время выполнения современные процессоры x86 используют несколько дополнительных шагов декодирования для разделения большинства инструкций на более мелкие части, называемые микрооперациями. Затем они передаются в блок управления , который буферизует и планирует их в соответствии с семантикой x86, чтобы они могли быть выполнены, частично параллельно, одним из нескольких (более или менее специализированных) блоков выполнения . Таким образом, эти современные конструкции x86 являются конвейерными , суперскалярными , а также способны к неупорядоченному и спекулятивному выполнению (через предсказание ветвлений , переименование регистров и предсказание зависимости памяти ), что означает, что они могут выполнять несколько (частичных или полных) инструкций x86 одновременно, и не обязательно в том же порядке, что и указано в потоке инструкций. [23] Некоторые процессоры Intel ( Xeon Foster MP , некоторые Pentium 4 , а также некоторые процессоры Nehalem и более поздние процессоры Intel Core ) и процессоры AMD (начиная с Zen ) также способны к одновременной многопоточности с двумя потоками на ядро ​​( Xeon Phi имеет четыре потока на ядро). Некоторые процессоры Intel поддерживают транзакционную память ( TSX ).

Когда этот метод был представлен в середине 1990-х годов, его иногда называли «ядром RISC» или «трансляцией RISC», отчасти по маркетинговым причинам, но также и потому, что эти микрооперации разделяют некоторые свойства с определенными типами инструкций RISC. Однако традиционный микрокод (используемый с 1950-х годов) также по своей сути разделяет многие из тех же свойств; новый метод отличается в основном тем, что трансляция в микрооперации теперь происходит асинхронно. Отсутствие необходимости синхронизировать блоки исполнения с шагами декодирования открывает возможности для более глубокого анализа (буферизованного) потока кода и, следовательно, позволяет обнаруживать операции, которые могут выполняться параллельно, одновременно подавая данные более чем одному блоку исполнения.

Новейшие процессоры также делают противоположное, когда это уместно: они объединяют определенные последовательности x86 (например, сравнение, за которым следует условный переход) в более сложную микрооперацию, которая лучше соответствует модели выполнения и, таким образом, может выполняться быстрее или с меньшими затратами машинных ресурсов.

Другой способ попытаться улучшить производительность — кэшировать декодированные микрооперации, чтобы процессор мог напрямую обращаться к декодированным микрооперациям из специального кэша, вместо того, чтобы декодировать их снова. Intel последовала этому подходу с функцией Execution Trace Cache в своей микроархитектуре NetBurst (для процессоров Pentium 4) и позже в Decoded Stream Buffer (для процессоров под брендом Core, начиная с Sandy Bridge). [24]

Transmeta использовала совершенно другой метод в своих процессорах Crusoe x86-совместимых. Они использовали JIT- трансляцию для преобразования инструкций x86 в набор инструкций VLIW процессора . Transmeta утверждала, что их подход позволяет создавать более энергоэффективные конструкции, поскольку процессор может отказаться от сложного шага декодирования более традиционных реализаций x86.

Режимы адресации

Режимы адресации для 16-разрядных режимов процессора можно суммировать с помощью формулы: [25] [26]

Режимы адресации для 32-разрядных режимов процессора x86 [27] можно суммировать с помощью формулы: [28]

Режимы адресации для 64-битного режима процессора можно суммировать формулой: [28]

Относительная адресация инструкций в 64-битном коде (RIP + смещение, где RIP — регистр указателя инструкций ) упрощает реализацию позиционно-независимого кода (как это используется в разделяемых библиотеках в некоторых операционных системах). [29]

У 8086 было64 КБ восьмибитной (или альтернативно32 К-слова 16-битного пространства ввода -вывода иСтек 64 КБ (один сегмент) в памяти, поддерживаемый компьютерным оборудованием . В стек можно помещать только слова (два байта). Стек растет в сторону численно меньших адресов, причем SS:SP указывает на последний помещенный элемент. Существует 256 прерываний , которые могут быть вызваны как оборудованием, так и программным обеспечением. Прерывания могут каскадироваться, используя стек для хранения адреса возврата .

регистры x86

16-битный

Оригинальные Intel 8086 и 8088 имеют четырнадцать 16- битных регистров. Четыре из них (AX, BX, CX, DX) являются регистрами общего назначения (GPR), хотя каждый может иметь дополнительное назначение; например, только CX может использоваться как счетчик с инструкцией цикла. Каждый из них может быть доступен как два отдельных байта (таким образом, старший байт BX может быть доступен как BH, а младший байт как BL). Два регистра указателя имеют особые роли: SP (указатель стека) указывает на «вершину» стека , а BP (указатель базы) часто используется для указания на какое-то другое место в стеке, обычно выше локальных переменных (см. указатель кадра ). Регистры SI, DI, BX и BP являются адресными регистрами и также могут использоваться для индексации массива.

Для формирования адреса памяти используется один из четырех возможных «сегментных регистров» (CS, DS, SS и ES). В исходных 8086 / 8088 / 80186 / 80188 каждый адрес был построен из сегментного регистра и одного из регистров общего назначения. Например, ds:si — это обозначение для адреса, сформированного как [16 * ds + si], чтобы разрешить 20-битную адресацию вместо 16 бит, хотя это изменилось в более поздних процессорах. В то время поддерживались только определенные комбинации.

Регистр FLAGS содержит флаги, такие как флаг переноса , флаг переполнения и флаг нуля . Наконец, указатель инструкции (IP) указывает на следующую инструкцию, которая будет извлечена из памяти и затем выполнена; этот регистр не может быть напрямую доступен (чтен или записан) программой. [30]

Процессоры Intel 80186 и 80188 по сути являются модернизированными процессорами 8086 или 8088 соответственно с добавленными на кристалле периферийными устройствами и имеют те же регистры процессора, что и 8086 и 8088 (в дополнение к регистрам интерфейса для периферийных устройств).

8086, 8088, 80186 и 80188 могут использовать дополнительный сопроцессор с плавающей точкой, 8087. 8087 представляется программисту как часть ЦП и добавляет восемь 80-битных регистров, от st(0) до st(7), каждый из которых может содержать числовые данные в одном из семи форматов: 32-, 64- или 80-битное число с плавающей точкой, 16-, 32- или 64-битное (двоичное) целое число и 80-битное упакованное десятичное целое число. [9] : S-6, S-13..S-15  Он также имеет свой собственный 16-битный регистр состояния, доступный через инструкцию fstsw , и обычно просто используют некоторые из его битов для ветвления, копируя их в обычные ФЛАГИ. [31]

В Intel 80286 для поддержки защищенного режима три специальных регистра содержат адреса таблиц дескрипторов (GDTR, LDTR, IDTR ), а четвертый регистр задач (TR) используется для переключения задач. 80287 является сопроцессором с плавающей точкой для 80286 и имеет те же регистры, что и 8087, с теми же форматами данных.

32-битный

Регистры, доступные в наборе инструкций x86-64

С появлением 32-битного процессора 80386 16-битные регистры общего назначения, базовые регистры, индексные регистры, указатель инструкций и регистр FLAGS , но не сегментные регистры, были расширены до 32 бит. Номенклатура представляла это путем добавления префикса « E » (для «расширенный») к именам регистров на языке ассемблера x86 . Таким образом, регистр AX соответствует нижним 16 битам нового 32-битного регистра EAX, SI соответствует нижним 16 битам ESI и т. д. Регистры общего назначения, базовые регистры и индексные регистры могут использоваться в качестве базы в режимах адресации, и все эти регистры, за исключением указателя стека, могут использоваться в качестве индекса в режимах адресации.

Добавлены два новых сегментных регистра (FS и GS). С большим количеством регистров, инструкций и операндов формат машинного кода был расширен. Для обеспечения обратной совместимости сегменты с исполняемым кодом могут быть помечены как содержащие 16-битные или 32-битные инструкции. Специальные префиксы позволяют включать 32-битные инструкции в 16-битный сегмент или наоборот.

80386 имел дополнительный сопроцессор с плавающей точкой, 80387 ; он имел восемь 80-битных регистров: st(0) - st(7), [32] как 8087 и 80287. 80386 также мог использовать сопроцессор 80287. [33] В 80486 и всех последующих моделях x86 блок обработки с плавающей точкой (FPU) был интегрирован на кристалле.

В Pentium MMX добавлено восемь 64-битных целочисленных векторных регистров MMX (MM0–MM7, которые разделяют младшие биты с 80-битным стеком FPU). [34] В Pentium III компания Intel добавила 32-битный регистр управления/состояния потоковых расширений SIMD (SSE) (MXCSR) и восемь 128-битных регистров с плавающей точкой SSE (XMM0–XMM7). [35]

64-битный

Начиная с процессора AMD Opteron , архитектура x86 расширила 32-битные регистры до 64-битных регистров аналогично тому, как имело место расширение с 16 до 32 бит. Префикс R (для «регистра») идентифицирует 64-битные регистры (RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, RFLAGS, RIP), а также восемь дополнительных 64-битных общих регистров (R8–R15) были также введены при создании x86-64 . Кроме того, были добавлены еще восемь векторных регистров SSE (XMM8–XMM15). Однако эти расширения можно использовать только в 64-битном режиме, который является одним из двух режимов, доступных только в длинном режиме . Режимы адресации не претерпели кардинальных изменений по сравнению с 32-битным режимом, за исключением того, что адресация была расширена до 64 бит, виртуальные адреса теперь имеют знаковое расширение до 64 бит (чтобы запретить биты режима в виртуальных адресах), а другие детали селектора были значительно сокращены. Кроме того, был добавлен режим адресации, позволяющий ссылаться на память относительно RIP ( указатель инструкций ), чтобы облегчить реализацию позиционно-независимого кода , используемого в общих библиотеках в некоторых операционных системах.

128-битный

Регистры SIMD XMM0–XMM15 (XMM0–XMM31 при поддержке AVX-512 ).

256-бит

Регистры SIMD YMM0–YMM15 (YMM0–YMM31 при поддержке AVX-512 ). Нижняя половина каждого регистра YMM отображается на соответствующий регистр XMM.

512-битный

Регистры SIMD ZMM0–ZMM31. Нижняя половина каждого регистра ZMM отображается на соответствующий регистр YMM.

Разное/специального назначения

Процессоры x86, имеющие защищенный режим , т. е. процессоры 80286 и более поздние, также имеют три регистра дескрипторов (GDTR, LDTR, IDTR ) и регистр задач (TR).

32-разрядные процессоры x86 (начиная с 80386) также включают в себя различные специальные/разные регистры, такие как регистры управления (CR0–4, CR8 только для 64-разрядных процессоров), отладочные регистры (DR0–3, а также 6 и 7), тестовые регистры (TR3–7; только 80486) и регистры, специфичные для модели (MSR, появляются в Pentium [o] ).

AVX-512 имеет восемь дополнительных 64-битных регистров маски K0–K7 для выбора элементов в векторном регистре. В зависимости от векторного регистра и ширины элементов, только подмножество бит регистра маски может использоваться данной инструкцией.

Цель

Хотя основные регистры (за исключением указателя инструкций) являются «универсальными» в 32- и 64-битных версиях набора инструкций и могут использоваться для чего угодно, изначально предполагалось, что они будут использоваться для следующих целей:

Регистры сегмента:

Для остальных 8 регистров, доступных только в 64-битном режиме, никаких особых целей не предусмотрено.

Некоторые инструкции компилируются и выполняются более эффективно при использовании этих регистров по их прямому назначению. Например, использование AL в качестве аккумулятора и добавление к нему непосредственного байтового значения создает эффективный код операции добавления к AL 04h, в то время как использование регистра BL создает общий и более длинный код операции добавления к регистру 80C3h. Другим примером является деление и умножение двойной точности, которые работают специально с регистрами AX и DX.

Современные компиляторы выиграли от введения байта sib ( scale-index-base byte ), который позволяет обрабатывать регистры единообразно ( как в миникомпьютере ). Однако использование байта sib повсеместно неоптимально, так как это приводит к более длинным кодировкам, чем его выборочное использование при необходимости. (Главное преимущество байта sib — ортогональность и более мощные режимы адресации, которые он предоставляет, что позволяет экономить инструкции и использовать регистры для вычислений адреса, таких как масштабирование индекса.) Некоторые специальные инструкции утратили приоритет в аппаратной конструкции и стали медленнее, чем эквивалентные небольшие кодовые последовательности. Ярким примером является инструкция LODSW.

Структура

Примечание: регистры ?PL доступны только в 64-битном режиме.

Примечание: регистры ?IL доступны только в 64-битном режиме.

Режимы работы

Реальный режим

Режим реального адреса [36] , обычно называемый реальным режимом, является рабочим режимом 8086 и более поздних x86-совместимых процессоров . Реальный режим характеризуется 20-битным сегментированным адресным пространством памяти (что означает, что может быть адресовано лишь немного больше 1 МБ памяти [p] ), прямым программным доступом к периферийному оборудованию и отсутствием концепции защиты памяти или многозадачности на аппаратном уровне. Все x86-процессоры в серии 80286 и более поздних запускаются в реальном режиме при включении питания; процессоры 80186 и более ранние имели только один рабочий режим, который эквивалентен реальному режиму в более поздних чипах. (На платформе IBM PC прямой программный доступ к процедурам IBM BIOS доступен только в реальном режиме, поскольку BIOS написан для реального режима. Однако это свойство не x86-процессора, а конструкции IBM BIOS.)

Чтобы использовать более 64 КБ памяти, необходимо использовать сегментные регистры. Это создало большие сложности для разработчиков компиляторов, которые ввели нечетные режимы указателей, такие как «near», «far» и «huge», чтобы в разной степени использовать неявную природу сегментированной архитектуры, при этом некоторые указатели содержали 16-битные смещения внутри подразумеваемых сегментов, а другие указатели содержали сегментные адреса и смещения внутри сегментов. Технически возможно использовать до 256 КБ памяти для кода и данных, с выделением до 64 КБ для кода, установив все четыре сегментных регистра один раз и затем используя только 16-битные смещения (опционально с префиксами переопределения сегмента по умолчанию) для адресации памяти, но это накладывает существенные ограничения на способ адресации данных и объединения операндов памяти, а также нарушает архитектурный замысел проектировщиков Intel, который заключается в том, чтобы отдельные элементы данных (например, массивы, структуры, кодовые единицы) содержались в отдельных сегментах и ​​адресулись по их собственным сегментным адресам в новых программах, которые не перенесены с более ранних 8-битных процессоров с 16-битными адресными пространствами.

Нереальный режим

Режим Unreal используется некоторыми 16-разрядными операционными системами и некоторыми 32-разрядными загрузчиками .

Режим управления системой

Режим управления системой (SMM) используется только системной прошивкой ( BIOS / UEFI ), а не операционными системами и прикладным программным обеспечением. Код SMM выполняется в SMRAM.

Защищенный режим

В дополнение к реальному режиму Intel 80286 поддерживает защищенный режим, расширяя адресуемую физическую память до 16 МБ и адресуемую виртуальную память до 1  ГБ , а также предоставляя защищенную память , которая не позволяет программам повреждать друг друга. Это делается путем использования сегментных регистров только для хранения индекса в таблице дескрипторов, которая хранится в памяти. Существует две такие таблицы, Глобальная таблица дескрипторов (GDT) и Локальная таблица дескрипторов (LDT), каждая из которых содержит до 8192 дескрипторов сегментов, каждый сегмент дает доступ к 64 КБ памяти. В 80286 дескриптор сегмента предоставляет 24-битный базовый адрес , и этот базовый адрес добавляется к 16-битному смещению для создания абсолютного адреса. Базовый адрес из таблицы выполняет ту же роль, что и буквальное значение сегментного регистра в реальном режиме; сегментные регистры были преобразованы из прямых регистров в косвенные регистры. Каждому сегменту может быть назначен один из четырех уровней кольца , используемых для аппаратной компьютерной безопасности . Каждый дескриптор сегмента также содержит поле предела сегмента, которое определяет максимальное смещение, которое может использоваться с сегментом. Поскольку смещения составляют 16 бит, сегменты по-прежнему ограничены 64 КБ каждый в защищенном режиме 80286. [37]

Каждый раз, когда сегментный регистр загружается в защищенном режиме, 80286 должен считывать 6-байтовый дескриптор сегмента из памяти в набор скрытых внутренних регистров. Таким образом, загрузка сегментных регистров в защищенном режиме происходит намного медленнее, чем в реальном режиме, и следует избегать слишком частой смены сегментов. Фактические операции с памятью, использующие сегменты защищенного режима, не сильно замедляются, поскольку 80286 и более поздние версии имеют аппаратное обеспечение для проверки смещения относительно предела сегмента параллельно с выполнением инструкции.

Intel 80386 расширил смещения, а также поле ограничения сегмента в каждом дескрипторе сегмента до 32 бит, что позволило сегменту охватывать все пространство памяти. Он также ввел поддержку защищенного режима для страничного обмена , механизма, позволяющего использовать страничную виртуальную память (с размером страницы 4 КБ). Страничное управление позволяет ЦП отображать любую страницу пространства виртуальной памяти на любую страницу пространства физической памяти. Для этого он использует дополнительные таблицы отображения в памяти, называемые таблицами страниц. Защищенный режим на 80386 может работать как с включенным, так и с отключенным страничным обменом; механизм сегментации всегда активен и генерирует виртуальные адреса, которые затем отображаются страничным механизмом, если он включен. Механизм сегментации также можно эффективно отключить, установив для всех сегментов базовый адрес 0 и ограничение размера, равное всему адресному пространству; для этого также требуется таблица дескрипторов сегментов минимального размера, состоящая всего из четырех дескрипторов (поскольку сегменты FS и GS не нужно использовать). [q]

Подкачка страниц широко используется современными многозадачными операционными системами. Linux , 386BSD и Windows NT были разработаны для 386, поскольку это был первый процессор архитектуры Intel, поддерживающий подкачку страниц и 32-битные смещения сегментов. Архитектура 386 стала основой для всех дальнейших разработок в серии x86.

Процессоры x86, поддерживающие защищенный режим, загружаются в реальном режиме для обратной совместимости со старым классом процессоров 8086. При включении питания (также известном как загрузка ) процессор инициализируется в реальном режиме, а затем начинает выполнять инструкции. Загрузочный код операционной системы, который может храниться в постоянной памяти , может перевести процессор в защищенный режим для включения подкачки и других функций. И наоборот, сегментная арифметика, обычная практика в коде реального режима, не допускается в защищенном режиме.

Виртуальный режим 8086

Существует также подрежим работы в 32-битном защищенном режиме (он же защищенный режим 80386), называемый виртуальным режимом 8086 , также известный как режим V86 . Это по сути специальный гибридный режим работы, который позволяет программам реального режима и операционным системам работать под управлением операционной системы супервизора защищенного режима. Это обеспечивает большую гибкость при одновременном запуске как программ защищенного режима, так и программ реального режима. Этот режим доступен исключительно для 32-битной версии защищенного режима; он не существует в 16-битной версии защищенного режима или в длинном режиме.

Длинный режим

В середине 1990-х годов стало очевидно, что 32-битное адресное пространство архитектуры x86 ограничивало ее производительность в приложениях, требующих больших наборов данных. 32-битное адресное пространство позволило бы процессору напрямую адресовать только 4 ГБ данных, что превосходит такие приложения, как обработка видео и базы данных . Используя 64-битные адреса, можно напрямую адресовать 16  EiB данных, хотя большинство 64-битных архитектур не поддерживают доступ к полному 64-битному адресному пространству; например, AMD64 поддерживает только 48 бит из 64-битного адреса, разделенного на четыре уровня подкачки.

В 1999 году AMD опубликовала (почти) полную спецификацию для 64-битного расширения архитектуры x86, которое они назвали x86-64 с заявленными намерениями произвести. Этот дизайн в настоящее время используется почти во всех процессорах x86, с некоторыми исключениями, предназначенными для встраиваемых систем .

Массово производимые чипы x86-64 для общего рынка стали доступны четыре года спустя, в 2003 году, после того как было потрачено время на тестирование и доработку рабочих прототипов; примерно в то же время первоначальное название x86-64 было изменено на AMD64 . Успех линейки процессоров AMD64 в сочетании с прохладным приемом архитектуры IA-64 вынудили Intel выпустить собственную реализацию набора инструкций AMD64. Intel ранее реализовала поддержку AMD64 [38], но решила не включать ее в надежде, что AMD не выведет AMD64 на рынок до того, как новый набор инструкций IA-64 от Itanium получит широкое распространение. Она обозначила свою реализацию AMD64 как EM64T , а позже переименовала ее в Intel 64 .

В своей литературе и названиях версий продуктов Microsoft и Sun называют AMD64/Intel 64 коллективно как x64 в операционных системах Windows и Solaris . Дистрибутивы Linux называют его либо "x86-64", либо его вариантом "x86_64", либо "amd64". Системы BSD используют "amd64", а macOS использует "x86_64".

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

Это был первый случай, когда крупное расширение архитектуры x86 было инициировано и создано производителем, отличным от Intel. Это был также первый случай, когда Intel приняла технологию такого рода из внешнего источника.

Расширения

Модуль с плавающей точкой

Ранние процессоры x86 могли быть расширены аппаратным обеспечением с плавающей точкой в ​​виде серии числовых сопроцессоров с плавающей точкой с названиями вроде 8087 , 80287 и 80387, сокращенно x87. Это также было известно как NPX ( Numeric Processor eXtension ), подходящее название, поскольку сопроцессоры, хотя и использовались в основном для вычислений с плавающей точкой, также выполняли целочисленные операции как в двоичном, так и в десятичном формате. За очень немногими исключениями, 80486 и последующие процессоры x86 затем интегрировали эту функциональность x87 на чипе, что сделало инструкции x87 де-факто неотъемлемой частью набора инструкций x86.

Каждый регистр x87, известный как ST(0) через ST(7), имеет ширину 80 бит и хранит числа в стандартном формате IEEE с плавающей точкой двойной расширенной точности. Эти регистры организованы как стек с ST(0) наверху. Это было сделано для того, чтобы сэкономить пространство кода операции, и поэтому регистры доступны случайным образом только для одного из операндов в инструкции «регистр-регистр»; ST0 всегда должен быть одним из двух операндов, либо источником, либо назначением, независимо от того, является ли другой операнд ST(x) или операндом памяти. Однако случайный доступ к регистрам стека можно получить с помощью инструкции, которая обменивает любой указанный ST(x) с ST(0).

Операции включают арифметические и трансцендентные функции, в том числе тригонометрические и экспоненциальные функции, а также инструкции, которые загружают общие константы (например, 0; 1; e, основание натурального логарифма; log2(10); и log10(2)) в один из регистров стека. Хотя целочисленные возможности часто упускаются из виду, x87 может работать с большими целыми числами с помощью одной инструкции, чем 8086, 80286, 80386 или любой x86 CPU без расширений до 64 бит, и повторяющиеся целочисленные вычисления даже с небольшими значениями (например, 16 бит) могут быть ускорены путем параллельного выполнения целочисленных инструкций на x86 CPU и x87. (x86 CPU продолжает работать, пока сопроцессор x87 вычисляет, и x87 устанавливает сигнал для x86, когда он завершает работу, или прерывает x86, если ему требуется внимание из-за ошибки.)

ММХ

MMX — это набор инструкций SIMD , разработанный Intel и представленный в 1997 году для микропроцессора Pentium MMX . [39] Набор инструкций MMX был разработан на основе аналогичной концепции, впервые использованной в Intel i860 . Он поддерживается большинством последующих процессоров IA-32 Intel и другими поставщиками. MMX обычно используется для обработки видео (например, в мультимедийных приложениях). [40]

MMX добавил 8 новых регистров в архитектуру, известных как MM0 через MM7 (далее именуемых MMn ). На самом деле, эти новые регистры были просто псевдонимами для существующих регистров стека x87 FPU. Следовательно, все, что было сделано со стеком с плавающей точкой, также повлияло бы на регистры MMX. В отличие от стека FP, эти регистры MMn были фиксированными, а не относительными, и поэтому они были доступны случайным образом. Набор инструкций не принял стекоподобную семантику, так что существующие операционные системы могли по-прежнему правильно сохранять и восстанавливать состояние регистра при многозадачности без модификаций. [39]

Каждый из регистров MMn представляет собой 64-битное целое число. Однако одной из основных концепций набора инструкций MMX является концепция упакованных типов данных , что означает, что вместо использования всего регистра для одного 64-битного целого числа ( quadword ), можно использовать его для хранения двух 32-битных целых чисел ( doubleword ), четырех 16-битных целых чисел ( word ) или восьми 8-битных целых чисел ( byte ). Учитывая, что 64-битные регистры MMn MMX являются псевдонимами стека FPU, а каждый из регистров с плавающей точкой имеет ширину 80 бит, верхние 16 бит регистров с плавающей точкой не используются в MMX. Эти биты устанавливаются в единицы любой инструкцией MMX, что соответствует представлению с плавающей точкой NaN или бесконечностей. [39]

3DСейчас!

В 1997 году AMD представила 3DNow!. [41] Внедрение этой технологии совпало с ростом популярности 3D- развлекательных приложений и было разработано для повышения производительности векторной обработки ЦП в графически насыщенных приложениях. Разработчики 3D-видеоигр и поставщики 3D-графического оборудования используют 3DNow! для повышения производительности на процессорах AMD серий K6 и Athlon . [42]

3DNow! был разработан как естественная эволюция MMX от целых чисел к числам с плавающей точкой. Таким образом, он использует точно такое же соглашение об именовании регистров, как и MMX, то есть от MM0 до MM7. [43] Единственное отличие заключается в том, что вместо упаковки целых чисел в эти регистры, в каждый регистр упакованы два числа с плавающей точкой одинарной точности . Преимущество псевдонимизации регистров FPU заключается в том, что те же инструкции и структуры данных, которые используются для сохранения состояния регистров FPU, могут также использоваться для сохранения состояний регистров 3DNow!. Таким образом, не требуется вносить никаких специальных изменений в операционные системы, которые в противном случае не знали бы о них. [44]

.mw-parser-output .vanchor>:target~.vanchor-text{background-color:#b1d2ff}@media screen{html.skin-theme-clientpref-night .mw-parser-output .vanchor>:target~.vanchor-text{background-color:#0f4dc9}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .vanchor>:target~.vanchor-text{background-color:#0f4dc9}}СШЭи AVX

В 1999 году Intel представила набор инструкций Streaming SIMD Extensions (SSE) , за которым в 2000 году последовал SSE2. Первое дополнение позволило выгрузить основные операции с плавающей точкой из стека x87, а второе сделало MMX практически устаревшим и позволило реалистично нацеливать инструкции на обычные компиляторы. Представленный в 2004 году вместе с ревизией Prescott процессора Pentium 4 , SSE3 добавил специальные инструкции по обработке памяти и потоков для повышения производительности технологии HyperThreading от Intel . AMD лицензировала набор инструкций SSE3 и реализовала большинство инструкций SSE3 для своей ревизии E и более поздних процессоров Athlon 64. Athlon 64 не поддерживает HyperThreading и не имеет тех инструкций SSE3, которые используются только для HyperThreading. [45]

SSE отбросил все устаревшие соединения со стеком FPU. Это также означало, что этот набор инструкций отбросил все устаревшие соединения с предыдущими поколениями наборов инструкций SIMD, такими как MMX. Но это освободило разработчиков, позволив им использовать регистры большего размера, не ограничиваясь размером регистров FPU. Разработчики создали восемь 128-битных регистров, названных от XMM0 до XMM7. (В AMD64 количество регистров SSE XMM было увеличено с 8 до 16.) Однако недостатком было то, что операционные системы должны были знать об этом новом наборе инструкций, чтобы иметь возможность сохранять состояния своих регистров. Поэтому Intel создала слегка измененную версию защищенного режима, называемую расширенным режимом, которая позволяет использовать инструкции SSE, тогда как в обычном защищенном режиме они остаются отключенными. Операционная система, которая знает о SSE, активирует расширенный режим, тогда как не знающая об этом ОС перейдет только в традиционный защищенный режим.

SSE — это набор инструкций SIMD, который работает только со значениями с плавающей точкой, как 3DNow!. Однако, в отличие от 3DNow!, он разрывает все устаревшие соединения со стеком FPU. Поскольку у него регистры больше, чем у 3DNow!, SSE может упаковывать в свои регистры вдвое больше чисел с плавающей точкой одинарной точности . Первоначальный SSE был ограничен только числами с одинарной точностью, как 3DNow!. SSE2 также представил возможность упаковывать числа с двойной точностью , чего 3DNow! не мог сделать, поскольку число с двойной точностью имеет размер 64 бита, что было бы полным размером одного регистра 3DNow! MMn. При 128 битах регистры SSE XMMn могли упаковывать два числа с плавающей точкой двойной точности в один регистр. Таким образом, SSE2 гораздо больше подходит для научных вычислений, чем SSE1 или 3DNow!, которые были ограничены только одинарной точностью. SSE3 не вводит никаких дополнительных регистров. [45]

Расширенные векторные расширения (AVX) удвоили размер регистров SSE до 256-битных регистров YMM. Также была введена схема кодирования VEX для размещения больших регистров, а также несколько инструкций для перестановки элементов. AVX2 не вводил дополнительных регистров, но был примечателен добавлением инструкций маскирования, сбора и перемешивания.

AVX-512 представляет собой еще одно расширение до 32 512-битных регистров ZMM и новую схему EVEX. В отличие от своих предшественников, имеющих монолитное расширение, он разделен на множество подмножеств, которые могут быть выбраны для реализации определенными моделями ЦП.

Расширение физического адреса (PAE)

Physical Address Extension или PAE впервые был добавлен в Intel Pentium Pro , а затем AMD в процессорах Athlon [46] , чтобы разрешить адресацию до 64 ГБ ОЗУ. Без PAE физическая ОЗУ в 32-разрядном защищенном режиме обычно ограничена 4 ГБ  . PAE определяет другую структуру таблицы страниц с более широкими записями таблицы страниц и третьим уровнем таблицы страниц, что позволяет использовать дополнительные биты физического адреса. Хотя первоначальные реализации на 32-разрядных процессорах теоретически поддерживали до 64 ГБ ОЗУ, ограничения чипсета и других платформ часто ограничивали то, что можно было фактически использовать. Процессоры x86-64 определяют структуры таблиц страниц, которые теоретически допускают до 52 бит физического адреса, хотя, опять же, проблемы чипсета и других платформ (например, количество доступных слотов DIMM и максимально возможный объем ОЗУ на DIMM) не позволяют реализовать такое большое физическое адресное пространство. На процессорах x86-64 режим PAE должен быть активен до переключения в длинный режим и должен оставаться активным, пока активен длинный режим , поэтому в длинном режиме нет режима «не-PAE». Режим PAE не влияет на ширину линейных или виртуальных адресов.

x86-64

В суперкомпьютерных кластерах (как отслеживается по данным TOP 500 и визуализируется на диаграмме выше, последний раз обновленной в 2013 году) появление 64-битных расширений для архитектуры x86 позволило 64-битным процессорам x86 от AMD и Intel (заштрихованы бирюзовым и синим на диаграмме соответственно) заменить большинство архитектур процессоров RISC, ранее использовавшихся в таких системах (включая PA-RISC , SPARC , Alpha и другие), и 32-битным x86 (зеленый на диаграмме), хотя Intel изначально безуспешно пыталась заменить x86 новой несовместимой 64-битной архитектурой в процессоре Itanium . Основной не-x86 архитектурой, которая все еще используется, по состоянию на 2014 год, в суперкомпьютерных кластерах, является Power ISA , используемая микропроцессорами IBM Power (синий с ромбовидной мозаикой на диаграмме), со SPARC в качестве далекого второго.

К 2000-м годам ограничения 32-разрядных процессоров x86 в адресации памяти стали препятствием для их использования в высокопроизводительных вычислительных кластерах и мощных настольных рабочих станциях. Устаревший 32-разрядный x86 конкурировал с гораздо более продвинутыми 64-разрядными архитектурами RISC, которые могли адресовать гораздо больше памяти. Intel и всей экосистеме x86 требовалась 64-разрядная адресация памяти, если x86 должен был пережить эру 64-разрядных вычислений, поскольку вскоре рабочие станции и настольные программные приложения начали упираться в пределы 32-разрядной адресации памяти. Однако Intel посчитала, что настало время сделать смелый шаг и использовать переход на 64-разрядные настольные компьютеры для перехода от архитектуры x86 в целом, эксперимент, который в конечном итоге провалился.

В 2001 году Intel попыталась представить не-x86 64-битную архитектуру под названием IA-64 в своем процессоре Itanium , изначально нацеленную на рынок высокопроизводительных вычислений , надеясь, что она в конечном итоге заменит 32-битную x86. [47] Хотя IA-64 была несовместима с x86, процессор Itanium предоставлял возможности эмуляции для перевода инструкций x86 в IA-64, но это так сильно влияло на производительность программ x86, что это редко, если вообще когда-либо, было действительно полезно для пользователей: программисты должны были переписывать программы x86 для архитектуры IA-64, иначе их производительность на Itanium была бы на порядки хуже, чем на настоящем процессоре x86. Рынок отверг процессор Itanium, поскольку он нарушал обратную совместимость , и предпочел продолжить использовать чипы x86, и очень мало программ было переписано для IA-64.

AMD решила пойти другим путем к 64-битной адресации памяти, убедившись, что обратная совместимость не пострадает. В апреле 2003 года AMD выпустила первый процессор x86 с 64-битными регистрами общего назначения, Opteron , способный адресовать гораздо больше 4  ГБ виртуальной памяти с помощью нового расширения x86-64 (также известного как AMD64 или x64). 64-битные расширения архитектуры x86 были включены только в недавно представленном длинном режиме , поэтому 32-битные и 16-битные приложения и операционные системы могли просто продолжать использовать процессор AMD64 в защищенных или других режимах, без малейшего ущерба производительности [48] и с полной совместимостью с исходными инструкциями 16-битного Intel 8086. [49] : 13–14  Рынок отреагировал положительно, приняв 64-битные процессоры AMD как для высокопроизводительных приложений, так и для деловых или домашних компьютеров.

Видя, что рынок отвергает несовместимый процессор Itanium, а Microsoft поддерживает AMD64, Intel пришлось отреагировать и в июле 2004 года представить свой собственный процессор x86-64, Prescott Pentium 4. [50] В результате процессор Itanium с его набором инструкций IA-64 используется редко, а x86, через свое воплощение x86-64, по-прежнему является доминирующей архитектурой ЦП в невстраиваемых компьютерах.

В x86-64 также появился бит NX , который обеспечивает некоторую защиту от ошибок безопасности, вызванных переполнением буфера .

В результате 64-разрядного вклада AMD в линейку x86 и его последующего принятия Intel, 64-разрядная архитектура RISC перестала быть угрозой для экосистемы x86 и практически исчезла с рынка рабочих станций. x86-64 начала использоваться в мощных суперкомпьютерах (в воплощениях AMD Opteron и Intel Xeon ), рынке, который ранее был естественной средой обитания для 64-разрядных конструкций RISC (таких как микропроцессоры IBM Power или процессоры SPARC ). Большой скачок в сторону 64-разрядных вычислений и сохранение обратной совместимости с 32-разрядным и 16-разрядным программным обеспечением позволили архитектуре x86 стать сегодня чрезвычайно гибкой платформой, при этом чипы x86 используются от небольших маломощных систем (например, Intel Quark и Intel Atom ) до быстрых игровых настольных компьютеров (например, Intel Core i7 и AMD FX / Ryzen ), и даже доминируют в крупных суперкомпьютерных кластерах , фактически оставляя только ARM 32-разрядную и 64-разрядную RISC-архитектуру в качестве конкурента на рынке смартфонов и планшетов .

Виртуализация

До 2005 года процессоры архитектуры x86 не могли соответствовать требованиям Попека и Голдберга — спецификации для виртуализации, созданной в 1974 году Джеральдом Дж. Попеком и Робертом П. Голдбергом . Однако как проприетарные, так и продукты с открытым исходным кодом для виртуализации x86 были разработаны с использованием программной виртуализации . К проприетарным системам относятся Hyper-V , Parallels Workstation , VMware ESX , VMware Workstation , VMware Workstation Player и Windows Virtual PC , в то время как к бесплатным и открытым исходным кодам относятся QEMU , Kernel-based Virtual Machine , VirtualBox и Xen .

Появление наборов инструкций AMD-V и Intel VT-x в 2005 году позволило процессорам x86 соответствовать требованиям виртуализации Попека и Голдберга. [51]

АЕС

APX (Расширенные расширения производительности)

APX (Advanced Performance Extensions) — это расширения, позволяющие удвоить количество регистров общего назначения с 16 до 32 и добавить новые функции для улучшения производительности общего назначения. [52] [53] [54] [55] Эти расширения были названы «поколенческими» [56] и «крупнейшим дополнением x86 со времен 64 бит». [57] Intel внесла поддержку APX в GNU Compiler Collection (GCC) 14. [58]

Согласно спецификации архитектуры [59] , основными особенностями APX являются:

Расширенные GPR для инструкций общего назначения кодируются с использованием 2-байтового префикса REX2 , в то время как новые инструкции и расширенные операнды для существующих инструкций AVX / AVX2 / AVX-512 кодируются с использованием расширенного префикса EVEX , который имеет четыре варианта, используемых для различных групп инструкций.

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

Примечания

  1. ^ В отличие от микроархитектуры (и конкретной электронной и физической реализации), используемой для конкретной конструкции микропроцессора.
  2. ^ Например, ноутбук GRID Compass .
  3. ^ Включая процессоры 8088 , 80186 , 80188 и 80286 .
  4. ^ Такая система также содержала обычный набор стандартных компонентов поддержки серии 7400 , включая мультиплексоры , буферы и связующую логику .
  5. ^ Фактическое значение iAPX — Intel Advanced Performance Architecture , или иногда Intel Advanced Processor Architecture .
  6. ^ конец 1981 - начало 1984, приблизительно
  7. ^ На рынке встраиваемых процессоров представлено более 25 различных архитектур , которые из-за чувствительности к цене, низкого энергопотребления и требований к простоте оборудования превосходят по численности x86.
  8. ^ NEC V20 и V30 также поддерживали старый набор инструкций 8080, что позволяло ПК, оснащенным этими микропроцессорами, работать с приложениями CP/M на полной скорости (т. е. без необходимости программной имитации 8080).
  9. ^ Компании без фабрики проектировали чип и заключали контракт с другой компанией на его производство, в то время как компании с фабрикацией занимались как проектированием, так и производством самостоятельно. Некоторые компании начинали как производители без фабрики, а затем становились разработчиками без фабрики, одним из таких примеров является AMD.
  10. ^ Однако у него был более медленный FPU, что немного иронично, поскольку Cyrix начинала как разработчик быстрых блоков с плавающей точкой для процессоров x86.
  11. ^ Intel отказалась от своей схемы наименования "x86" с P5 Pentium в 1993 году (поскольку числа не могли быть зарегистрированы как торговые марки). Однако термин x86 уже был устоявшимся среди технических специалистов, авторов компиляторов и т. д.
  12. ^ 16-разрядные и 32-разрядные микропроцессоры были представлены в 1978 и 1985 годах соответственно; планы по созданию 64-разрядных процессоров были объявлены в 1999 году и постепенно внедрялись с 2003 года и далее.
  13. ^ Некоторые конструкции «CISC», такие как PDP-11 , могут использовать два.
  14. ^ Это связано с тем, что целочисленная арифметика генерирует перенос между последовательными битами (в отличие от простых побитовых операций).
  15. ^ Два MSR, представляющие особый интерес, — это SYSENTER_EIP_MSR и SYSENTER_ESP_MSR, представленные в процессоре Pentium® II, которые хранят адрес обработчика системной службы режима ядра и соответствующий указатель стека ядра. Инициализируемые во время запуска системы, SYSENTER_EIP_MSR и SYSENTER_ESP_MSR используются инструкциями SYSENTER (Intel) или SYSCALL (AMD) для достижения быстрых системных вызовов, примерно в три раза быстрее, чем метод программного прерывания, использовавшийся ранее.
  16. ^ Поскольку сегментированный адрес представляет собой сумму 16-битного сегмента, умноженного на 16, и 16-битного смещения, максимальный адрес равен 1 114 095 (10FFEF hex) для адресуемости 1 114 096 байт = 1 МБ + 65 520 байт. До 80286 процессоры x86 имели только 20 физических адресных линий (сигналы адресных битов), поэтому 21-й бит адреса, бит 20, был отброшен, а адреса после 1 МБ были зеркалами нижнего конца адресного пространства (начиная с адреса ноль). Начиная с 80286, все процессоры x86 имеют по крайней мере 24 физических адресных линии, а бит 20 вычисленного адреса выводится на адресную шину в реальном режиме, что позволяет процессору адресовать все 1 114 096 байт, достижимые с помощью сегментированного адреса x86. На популярной платформе IBM PC переключаемое оборудование для отключения 21-го бита адреса было добавлено в машины с процессором 80286 или более поздними версиями, чтобы все программы, разработанные для моделей на базе 8088/8086, могли работать, в то время как более новое программное обеспечение могло использовать преимущества «верхней» памяти в реальном режиме и полное адресное пространство объемом 16 МБ или больше в защищенном режиме — см. шлюз A20.
  17. ^ Также требуется дополнительная запись дескриптора в верхней части таблицы, поскольку таблица начинается с нуля, а минимальный индекс дескриптора, который может быть загружен в сегментный регистр, равен 1; значение 0 зарезервировано для представления сегментного регистра, который не указывает ни на какой сегмент.

Ссылки

  1. Прайс, Дэйв (11 мая 1989 г.). «32-разрядный процессор 80486 открывает новые горизонты в плотности кристалла и производительности работы. (Intel Corp.) (анонс продукта) EDN» (пресс-релиз).
  2. Свойер, Стивен (24 апреля 2003 г.). «AMD представляет 64-битный чип Opteron (ESJ) (новостная статья)».
  3. ^ Рао, PVS (2009). Архитектура компьютерной системы . Prentice-Hall of India. стр. 402 (Раздел 19.1, Семейство процессоров x86 ). ISBN 978-81-203-3594-3.
  4. ^ Mhatre, Swapneel Chandrakant (2012). Микропроцессоры и методы сопряжения: для SE (компьютерная инженерия) семестр II Университета Пуны . Jaico Publishing House. ISBN 978-81-8495-325-1.
  5. ^ Алькорн, Пол (9 февраля 2022 г.). «AMD устанавливает рекорд доли рынка процессоров за все время, поскольку Intel набирает обороты в настольных ПК и ноутбуках». Tom's Hardware .
  6. ^ Брэндон, Джонатан (15 апреля 2015 г.). «Облако за пределами x86: как старые архитектуры возвращаются». ICloud PE . Новости делового облака. Архивировано из оригинала 19 августа 2021 г. Получено 23 ноября 2020 г. Несмотря на доминирование x86 в центрах обработки данных, трудно игнорировать шум, который поставщики создавали в течение последних нескольких лет вокруг архитектур, отличных от x86, таких как ARM...
  7. ^ Дворак, Джон К. «Что случилось с Intel iAPX432?». Dvorak.org. Архивировано из оригинала 25 ноября 2017 г. Получено 18 апреля 2014 г.
  8. ^ Справочник программиста iAPX 286 (PDF) . Intel. 1983. Архивировано (PDF) из оригинала 28 августа 2017 г. Получено 28 августа 2017 г.
  9. ^ ab iAPX 86, 88 Руководство пользователя (PDF) . Intel. Август 1981 г. Архивировано (PDF) из оригинала 28 августа 2017 г. . Получено 28 августа 2017 г. .
  10. ^ Эдвардс, Бендж (16 июня 2008 г.). «Рождение стандарта: микропроцессор Intel 8086». PCWorld . Архивировано из оригинала 26 сентября 2010 г. Получено 14 сентября 2014 г.
  11. ^ Стэнли Мазор (январь–март 2010 г.). «Intel's 8086». IEEE Annals of the History of Computing . 32 (1): 75–79. doi :10.1109/MAHC.2010.22. S2CID  16451604.
  12. ^ "AMD раскрывает новые технологии на форуме Microprocessor" (пресс-релиз). AMD . 5 октября 1999 г. Архивировано из оригинала 2 марта 2000 г.«Раз за разом архитекторы процессоров смотрели на неэлегантную архитектуру x86 и заявляли, что ее невозможно расширить для соответствия последним инновациям», — сказал Натан Бруквуд, главный аналитик Insight 64.
  13. Берт, Джефф (5 апреля 2010 г.). «Microsoft прекращает поддержку Intel Itanium». eWeek . Получено 2 июня 2022 г.
  14. ^ ab "Справочное руководство по оптимизации архитектур Intel 64 и IA-32" (PDF) . Intel. Сентябрь 2019 г. 3.4.2.2 Оптимизация для Macro-fusion. Архивировано (PDF) из оригинала 14 февраля 2020 г. . Получено 7 марта 2020 г. .
  15. ^ ab Fog, Agner. "Микроархитектура процессоров Intel, AMD и VIA" (PDF) . стр. 107. Архивировано (PDF) из оригинала 22 марта 2019 г. . Получено 7 марта 2020 г. Core2 может выполнять слияние макроопераций только в 16- и 32-битном режиме. Core Nehalem также может делать это в 64-битном режиме.
  16. ^ "Zet: Открытая реализация x86 (IA-32): Обзор". OpenCores . 4 ноября 2013 г. Архивировано из оригинала 11 февраля 2018 г. Получено 5 января 2014 г.
  17. ^ "Zhaoxin готовит поддержку ядра Linux для процессоров Centaur 7-й серии". www.phoronix.com . Получено 5 апреля 2022 г. .
  18. ^ "Zhaoxin намерена выпустить в 2021 году свои 7-нм процессоры x86 - CPU - Новости - HEXUS.net". m.hexus.net . Получено 5 апреля 2022 г. .
  19. ^ "Zhaoxin наконец-то добавляет настройку процессора "Lujiazui" x86_64 в GCC". www.phoronix.com . Получено 5 апреля 2022 г. .
  20. ^ "Вопросы настройки и установки для компьютеров на базе Windows x64 Edition". Архивировано из оригинала 11 сентября 2014 г. Получено 14 сентября 2014 г.
  21. ^ «Представление упрощенной архитектуры Intel». Intel .
  22. ^ Ларабель, Майкл (20 мая 2023 г.). «Intel публикует спецификацию «X86-S» только для 64-битной архитектуры». Phoronix . Получено 20 мая 2023 г. .
  23. ^ «Процессоры — Какой режим адресации используют процессоры Intel?». Архивировано из оригинала 11 сентября 2014 г. Получено 14 сентября 2014 г.
  24. ^ "DSB Switches". Intel VTune Amplifier 2013 . Intel. Архивировано из оригинала 2 декабря 2013 . Получено 26 августа 2013 .
  25. ^ "The 8086 Family User's Manual" (PDF) . Intel Corporation. Октябрь 1979. стр. 2-68. Архивировано (PDF) из оригинала 4 апреля 2018 г. . Получено 28 марта 2018 г. .
  26. ^ "iAPX 286 Programmer's Reference Manual" (PDF) . Корпорация Intel. 1983. 2.4.3 Режимы адресации памяти. Архивировано (PDF) из оригинала 28 августа 2017 г. . Получено 28 августа 2017 г. .
  27. ^ 80386 Справочное руководство программиста (PDF) . Корпорация Intel. 1986. 2.5.3.2 ВЫЧИСЛЕНИЕ ЭФФЕКТИВНОГО АДРЕСА. Архивировано (PDF) из оригинала 28 декабря 2018 г. Получено 28 марта 2018 г.
  28. ^ ab Intel® 64 and IA-32 Architectures Software Developer's Manual, Volume 1: Basic Architecture. Intel Corporation. Март 2018. Глава 3. Архивировано из оригинала 26 января 2012 г. Получено 19 марта 2014 г.
  29. ^ Andriesse, Dennis (2019). "6.5 Влияние настроек компилятора на дизассемблирование". Практический бинарный анализ: создайте собственные инструменты Linux для бинарного инструментирования, анализа и дизассемблирования . Сан-Франциско, Калифорния: No Starch Press, Inc. ISBN 978-1-59327-913-4. OCLC  1050453850.
  30. ^ "Guide to x86 Assembly". Cs.virginia.edu. 11 сентября 2013 г. Архивировано из оригинала 24 марта 2020 г. Получено 6 февраля 2014 г.
  31. ^ "FSTSW/FNSTSW — Store x87 FPU Status Word". Архивировано из оригинала 25 января 2022 г. Получено 15 января 2020 г. Форма FNSTSW AX инструкции используется в основном в условном переходе...
  32. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32. Том 1: Базовая архитектура (PDF) . Intel. Март 2013 г. Глава 8. Архивировано (PDF) из оригинала 2 апреля 2013 г. Получено 23 апреля 2013 г.
  33. ^ "Intel 80287 family". CPU-world . Архивировано из оригинала 9 августа 2016 года . Получено 21 июля 2016 года .
  34. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32. Том 1: Базовая архитектура (PDF) . Intel. Март 2013 г. Глава 9. Архивировано (PDF) из оригинала 2 апреля 2013 г. Получено 23 апреля 2013 г.
  35. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 1: базовая архитектура (PDF) . Intel. Март 2013 г. Глава 10. Архивировано (PDF) из оригинала 2 апреля 2013 г. Получено 23 апреля 2013 г.
  36. ^ Справочник программиста iAPX 286 (PDF) . Intel. 1983. Раздел 1.2, «Режимы работы». Архивировано (PDF) из оригинала 28 августа 2017 г. . Получено 27 января 2014 г. .
  37. ^ Справочник программиста iAPX 286 (PDF) . Intel. 1983. Глава 6, «Управление памятью и виртуальная адресация». Архивировано (PDF) из оригинала 28 августа 2017 г. . Получено 27 января 2014 г. .
  38. ^ "Intel's Yamhill Technology: x86-64 compatible | Geek.com". Архивировано из оригинала 5 сентября 2012 г. Получено 18 июля 2008 г.
  39. ^ abc "Программирование с помощью технологии Intel MMX™". Embedded Pentium® Processor Family Technical Information Center . Intel. Архивировано из оригинала 25 июля 2003 г. Получено 5 июня 2022 г.
  40. ^ Кришнапрасад, С. (1 января 2004 г.). «Программирование SIMD, проиллюстрированное с использованием набора инструкций Intel MMX». Журнал вычислительных наук в колледжах . 19 (3): 268–277. ISSN  1937-4771.
  41. ^ Секстон, Майкл Джастин Аллен (21 апреля 2017 г.). «История процессоров AMD». Tom's Hardware . Получено 5 июня 2022 г.
  42. ^ Шимпи, Ананд Лал (29 октября 1998 г.). "AMD K6-2 350: Что-то делать..." AnandTech . Получено 5 июня 2022 г. .
  43. ^ "Intel's MMX и AMD's 3DNow! SIMD Operations". web.mit.edu . Получено 5 июня 2022 г. .
  44. ^ "3DNow!™ Technology Manual" (PDF) . Advanced Micro Devices . Получено 5 июня 2022 г. .
  45. ^ ab "Обновление и ремонт ПК 21-е издание: Характеристики процессора". Tom's Hardware . 31 октября 2013 г. Получено 5 июня 2022 г.
  46. ^ AMD, Inc. (февраль 2002 г.). "Приложение E" (PDF) . Руководство по оптимизации кода процессора AMD Athlon™ x86 (редакция K). стр. 250. Архивировано (PDF) из оригинала 13 апреля 2017 г. . Получено 13 апреля 2017 г. . 2-битный индекс, состоящий из битов PCD и PWT записи таблицы страниц, используется для выбора одного из четырех полей регистра PAT, когда включено PAE (расширения адреса страницы) или когда PDE не описывает большую страницу.
  47. ^ Манек Дубаш (20 июля 2006 г.). «Откажется ли Intel от Itanium?». Techworld . Архивировано из оригинала 19 февраля 2011 г. Получено 19 декабря 2010 г. Когда -то Intel рекламировала Itanium как замену линейки продуктов x86, но теперь ожидания относительно него значительно снизились.
  48. ^ "IBM WebSphere Application Server 64-bit Performance Demystified" (PDF) . IBM Corporation. 6 сентября 2007 г. стр. 14. Архивировано (PDF) из оригинала 25 января 2022 г. . Получено 9 апреля 2010 г. Рисунки 5, 6 и 7 также показывают, что 32-разрядная версия WAS запускает приложения с полной собственной производительностью оборудования на платформах POWER и x86-64. В отличие от некоторых 64-разрядных архитектур процессоров, оборудование POWER и x86-64 не эмулирует 32-разрядный режим. Поэтому приложения, которые не получают выгоды от 64-разрядных функций, могут работать с полной производительностью на 32-разрядной версии WebSphere, работающей на вышеупомянутых 64-разрядных платформах.
  49. ^ "Том 2: Системное программирование" (PDF) . Руководство программиста по архитектуре AMD64 . Корпорация AMD. Март 2024 г. Архивировано (PDF) из оригинала 4 апреля 2024 г. . Получено 24 апреля 2024 г. .
  50. Чарли Демерджян (26 сентября 2003 г.). «Почему Prescott от Intel будет использовать расширения AMD64». The Inquirer . Архивировано из оригинала 10 октября 2009 г. Получено 7 октября 2009 г.
  51. ^ Адамс, Кит; Агесен, Оле (21–25 октября 2006 г.). Сравнение программных и аппаратных методов виртуализации x86 (PDF) . Труды Международной конференции по архитектурной поддержке языков программирования и операционных систем, Сан-Хосе, Калифорния, США, 2006 г. ACM 1-59593-451-0/06/0010. Архивировано (PDF) из оригинала 20 августа 2010 г. Получено 22 декабря 2006 г.
  52. ^ Винкель, Себастьян; Агрон, Джейсон. «Расширенные расширения производительности (APX)». Intel . Получено 22 октября 2023 г. .
  53. ^ Робинсон, Дэн. "Intel добавляет новые инструкции x86 и векторные инструкции для будущих чипов". The Register . Получено 22 октября 2023 г.
  54. ^ Боншор, Гэвин. «Intel представляет наборы инструкций AVX10 и APX: унификация AVX-512 для гибридных архитектур». AnandTech . Получено 22 октября 2023 г. .
  55. ^ Alcorn, Paul (24 июля 2023 г.). «Новый AVX10 от Intel обеспечивает возможности AVX-512 для E-Cores». Tom's Hardware . Получено 22 октября 2023 г.
  56. ^ Шах, Агам (9 августа 2023 г.). «Смена поколений на чипе Intel APX сделает все приложения быстрее». The New Stack . Получено 22 октября 2023 г.
  57. ^ Бирн, Джозеф. «APX — крупнейшее дополнение x86 с 64 бит». Tech Insights .
  58. ^ Ларабель, Майкл. «Intel APX Code Begins Landing Within The GCC Compiler». Phoronix . Получено 22 октября 2023 г.
  59. ^ "Спецификация архитектуры Intel® Advanced Performance Extensions (Intel® APX)". Intel . 21 июля 2023 г. . Получено 22 октября 2023 г. .

Дальнейшее чтение

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