Чем архитектура ARM отличается от x86. Пятнадцать процессоров Intel x86, вошедших в историю Устройства работающие на x86 и x64

  • 23.12.2021

x86-64 (x64/AMD64/Intel64/EM64T) — аппаратная платформа. Автором технологии является компания AMD. Платформа создана для выполнения 64-разрядных приложений.

Представляет собой расширение x86-архитектуры, обладает практически полной обратной совместимостью.

Компании Microsoft и Oracle применяют для индикации данного набора инструкций термин «x64», хотя каталог с файлами в дистрибутивах Linux имеет название «amd64» (в случае с архитектурой x86, именуется как «i386»).

На сегодняшний день, платформу x86-64 поддерживают следующие компании:

  • AMD : процессоры Z-серии, C-серии, G-серии, E-серии, E1, E2, A4, A6, A8, A10, FX, Athlon 64, Athlon 64 FX, Athlon 64 X2, Athlon II, Phenom, Phenom II, Turion 64, Turion 64 X2, Turion II, Opteron, последние модели Sempron;
  • Intel : реализует данную платформу, используя название «Intel 64» EM64T » и «IA-32e») . Поздние модели процессоров Pentium 4, серии Pentium D, Pentium Extreme Edition, Celeron D, Celeron G-серии, Celeron B-серии, Pentium Dual-Core, Pentium T-серии, Pentium P-серии, Pentium G-серии, Pentium B-серии, Core 2 Duo, Core 2 Quad, Core 2 Extreme, Core i3, Core i5, Core i7, Atom и Xeon;
  • VIA : Nano, Eden, QuadCore.


Название

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

  • x86-64 — изначальный вариант названия, под которым компания AMD опубликовала первую предварительную спецификацию.
  • x64 — название версий ОС Windows и Solaris. Используется в качестве названия для архитектуры компаний Microsoft и Sun Microsystems.
  • AA-64 (AMD Architecture 64) — название архитектуры, автором которого стал известный неофициальный справочник sandpile.org, по аналогии с IA-64.
  • Hammer Architecture — название основывается на первых ядрах процессоров, поддерживавших данную архитектуру — Clawhammer и Sledgehammer.
  • AMD64 — название технологии, данное фирмой-разработчиком - компанией AMD. Появилось после выпуска первых Clawhammer и Sledgehammer процессоров. На данный момент, является официальным названием для реализации от AMD.
  • Yamhill Tehnology — первичное название аналогичной технологии от Intel. Порой также встречалось название CT (Clackamas Technology).
  • EM64T (Extended Memory 64 Technology) — первое официальное название реализации Intel.
  • IA-32e — название порой употреблялось вместе с EM64T. В основном, использовалось для обозначения "длинного" режима (в документации Intel именуется «режимом IA-32e»).
  • Intel 64 — новое официальное название архитектуры Intel, использующееся в настоящее время. Intel потихоньку отходит от названий IA-32, IA-32e и EM64T, используя это. Теперь оно является единственным официальным названием данной архитектуры со стороны компании Intel.

В настоящее время, самыми распространенными названиями выступают: «x64», «x86-64» и «AMD64». Порой это путает AMD-пользователей - вплоть до отказа использования родных дистрибутивов ОС: пользователь не уверен, будет ли работать выбранная версия на AMD процессоре. На самом же деле, распространители программного обеспечения применяют название amd64 лишь для того, чтобы подчеркнуть, что именно компания AMD является новатором в разработке данной технологии.

Зачастую, пользователи сами путают архитектуру Intel 64 с IA-64. Важно помнить, что Intel 64 и IA-64 — совершенно разные, несовместимые между собой платформы:

  • Представители Intel 64 : последние версии Pentium 4, некоторые модели Celeron D, линейка Core 2, Core i3, Core i5, Core i7, некоторые модели Intel Atom;
  • Представители IA-64 : семейства Itanium и Itanium 2.


Режимы

Имеется два режима работы данной архитектуры:

  • Long mode («длинный» режим);
  • Legacy mode («наследственный» режим).

«Long Mode»

«Длинный» режим, будучи родным для AMD64, позволяет воспользоваться всеми дополнительными преимуществами архитектуры. Для активации данного режима требуется 64-битная ОС. К примеру, Windows 7 x64 или 64-битные версии UNIX-подобных систем (GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Mac OS X - от версии 10.4.7 и выше).

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

«Длинный» режим не содержит в себе некоторые «рудименты» x86-архитектуры. Например, режим виртуального 8086, сегментированную модель памяти, аппаратную мультизадачность, и прочее.

«Длинный» режим имеет одну яркую особенность: его активация производится посредством установки флага CR0.PG. Он применяется для включения страничного MMU (если это переключение разрешено (EFER.LME=1). Если переключение недопустимо, включение MMU происходит в «наследственном» режиме.

Так, исполнение 64-битного кода с запрещенным страничным преобразованием невозможно, что приводит к определенным сложностям в программировании, ведь при переключении из «длинного» в «наследственный» режим (и обратно) необходим двойной сброс MMU. Для этого код переключения должен быть в тождественно отображенной странице.

«Legacy Mode»

Этот режим зовется «наследственным» по той причине, что дает возможность процессору AMD64 работать с инструкциями, которые рассчитаны для x86-процессоров. Кроме того, в рамках активации данного режима, осуществляется полная совместимость с 32-битным кодом и соответствующими ОС.

Процессор в «наследственном» режиме работает точно так же, как стандартный x86-процессор. Дополнительные функции, доступные под архитектурой AMD64, становятся неактивны.

При активации данного режима, 64-битные программы и соответствующие операционные системы функционировать не будут.

Особенности

Набор инструкций x86-64 (позже - AMD64), выпущенный компанией AMD — это расширение Intel IA-32 (x86-32). Ключевая отличительная черта AMD64 кроется в поддержке 64-битных регистров общего назначения, а также 64-битных арифметических/логических операций над целыми числами и 64-битных виртуальных адресов.

Чтобы осуществить адресацию регистров, для команд введены специальные «префиксы расширения регистра». Специально для них был выбран диапазон кодов 40h-4Fh, использующихся для команд INC и DEC в 32-битных режимах. Команды INC и DEC в 64-битном режиме кодируются в общей двухбайтовой форме.

Платформа x86-64 включает в себя:

  • Шестнадцать целочисленных 64-битных регистра общего назначения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 — R15);
  • Восемь 80-битных регистров с плавающей точкой (ST0 — ST7);
  • Восемь 64-битных регистров Multimedia Extensions (MM0 — MM7, общее пространство с регистрами ST0 — ST7);
  • Шестнадцать 128-битных регистров SSE (XMM0 — XMM15);
  • 64-битный указатель RIP и 64-битный регистр флагов RFLAGS.


Сегментирование

В ходе создания архитектуры x86-64, специалисты компании AMD пришли к решению окончательно покончить с главным «рудиментом» архитектуры x86 — сегментной моделью памяти. Она поддерживалась еще во времена 8086/80286.

При создании новой версии продукта виртуализации, программисты VMware обнаружили ряд непреодолимых трудностей. Загвоздки возникали в процессе реализации виртуальной машины для 64-битных систем. Чтобы отделить код монитора от кода «гостя», программа применяла механизм сегментации, но данная задача так и не была реализована на практике.

После ряда неудачных экспериментов, компания AMD возобновила ограниченный вариант сегментной организации памяти (начиная с ревизии D архитектуры AMD64). Это дало возможность запускать 64-битные операционные системы в виртуальных машинах. Компания Intel не стала следовать такому примеру. Чтобы осуществить проверку процессора на предмет возможности запуска 64-битных гостевых операционных систем, VMware снабжает продукты специальной утилитой.

Команды LAHF и SAHF , вырезанные изначально, были возвращены в систему команд из-за их активного использования в программном обеспечении виртуализации.

По мере развития средств аппаратной виртуализации (Intel VT, AMD-V), необходимость в сегментации постепенно утрачивается.

Множество пользователей при установке на свой персональный компьютер операционной системы Windows искренне недоумевают, какую из версий платформы выбрать - x64 или x86? И вообще, что на самом деле означают указанные сокращения?

Программы с x64 или x86: разница есть

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

Откуда повелось

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

Пионером в сфере разработки 64-битных вычислительных чипов считается компания AMD. Поэтому разработчики программного обеспечения обобщают подобные процессоры под общим именем "Amd64". Важно понять, что такое обозначение не значит, что игры, в характеристиках которых указан пункт amd64, не будут запускаться на компьютерах под управлением 64-битных процессоров авторства компании Intel.

В описанном случае речь идет об обычном обобщении, которому удалось прочно войти в практику. Сами сокращения x64 или x86 соответствуют именно разной архитектуре процессоров - 64 или 32 соответственно. Если говорить о применении этих обозначений к современным операционным системам, то они обозначают разрядность.

Как узнать x64 или x86 ОС установлена на ПК?

Часто пользователи пытаются определить, какая разрядность или, другими словами, тип операционной системы установлен на их компьютере в настоящий момент. Чтобы решить поставленную задачу, необходимо навести курсор мыши на значок «Компьютер» на рабочем столе (стандартный для системы Windows) и кликнуть по нему один раз правой кнопкой.

Далее в открывшемся контекстном меню следует выбрать «Свойства». После проделанных действий перед вами должно открыться окно с полным списком характеристик вашего компьютера, а также установленной операционной системы. Таким образом, вы сможете увидеть один из пары вариантов: 32-разрядная операционная система или 64-разрядная.

Вот таким нехитрым образом мы разобрались, как проверить, x86 или x64 программы следует устанавливать. Далее необходимо сказать, что особенность 64-битных программ заключена в их невероятной производительности, но с другой стороны - они слишком требовательны по отношению к памяти. Вот оно, подтверждение правила о том, что все хорошо в меру: установка 64-битной операционной системы на слабый ноутбук с парой гигабайт ОЗУ и 32-битным классическим процессором - это ошибка, однако, с другой стороны, 32-разрядные программы и системы не в силах видеть свыше 3 Гб ОЗУ. В случае, если в вашем распоряжении имеется персональный компьютер, оперативная память у которого равна 4 и более гигабайтам, можете смело устанавливать 64-разрядную Windows-платформу, соответственно, программы также должны быть 64-битные. Программы такого типа используют ресурсы, имеющиеся на компьютере, по максимуму, По сути, актуальный вопрос о том, что лучше - windows x86 или x64, сформулирован не вполне корректно, так как обе платформы хороши, а выбор необходимой определяется конфигурацией отдельно взятого компьютера.



Windows x64: подводные камни

В настоящее время из-за нерешенности некоторых вопросов, над которыми бьются разработчики и инженеры всего мира, вышло так, что у самой совершенной платформы Windows x64, кроме множества неоспоримых преимуществ, о которых мы говорили
выше, есть и ряд недостатков, о которых тоже не следует забывать. Начнем с того, что, если вы пользуетесь своим компьютером достаточно давно и имеете ряд комплектующих, которые вас уже многие годы не подводили, есть вероятность, что с переходом на 64-разрядную версию операционной системы найти драйверы для указанных устройств может быть довольно проблематично. Дело в том, что разработчики всевозможных гаджетов не очень охотно выпускают обновления для продуктов, которые были сняты с производства, тем самым пытаясь стимулировать клиентов приобретать новую технику. И тут уж мало кто прислушается к аргументу, будто ваш сканер или принтер лучше всех на свете.

Мы уже отмечали, что Windows x64 потребляет больше ресурсов, однако следует сказать, что все программы для 64-разрядной среды также начинают «желать большего». И наконец, если вы решите установить неподписанный потребует ряда дополнительных действий.

На другой чаше весов лежит доступ ко всем ресурсам установленной на компьютере ОЗУ. При наличии Windows x64 даже некоторые 32-битные программы могут воспользоваться доступом к 4 ГБ ОЗУ, например игры "Сталкер" и "Готика". Для сравнения: в среде 32-битной операционной системы игры и программы получают доступ к 2 Гб памяти, и в крайне редких случаях - к 3 Гб.

Некоторые авторы утверждают, что, независимо от того, какую платформу - x64 или x86 - выберет пользователь, быстродействие программ останется на одном уровне. Весьма сложно опровергнуть это мнение полностью, ибо показатели быстродействия зависят от целого ряда обстоятельств и факторов, однако практикой доказано, что программы для обработки звука и видео, а также архиваторы и ряд профессиональных программ начинают вести себя намного активнее.

Если с дилеммой «x86 или x64: что ставить» вы окончательно определились в пользу последней, однако не хотите расставаться со старыми добрыми программами, вам следует знать, что 99 процентов 32-битных приложений без снижения производительности и любых проблем работают в 64-битной среде. Что касается производительности в играх, то она прежде всего зависит от показателей вашего видеодрайвера.


P.S: все, о чем не успели упомянуть выше

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


Недостижимая граница

Интересно, что у 64-разрядной архитектуры также есть свои пределы касательно воспринимаемой оперативной памяти: x64 не может увидеть более 192 Гб ОЗУ. Еще один любопытный момент: натуральный объем 64-разрядных приложений, как
правило, на 20-40% больше, чем у 32-разрядных аналогов, однако не стоит сразу же бежать за новым жестким диском, ведь данное правило не распространяется на такие развлекательные материалы, как видеоролики (кинофильмы) или музыку.



Число сомнения - 4

Отдельно следует обсудить судьбу ПК с 4 гигабайтами ОЗУ. Вот в чем штука: с одной стороны, 32-разрядные ОС видят только 3 Гб памяти, и выбор в пользу 64х кажется очевидным, однако не забывайте, что Windows x64 просто для того, чтобы заставить себя работать, потребует вдвое больше ОЗУ, чем ее 32-разрядная «сестра», и победа в таком случае кажется весьма неоднозначной. В таких условиях выбор должен определяться не математическим подсчетом, а вашими потребностями и теми задачами, которые вы намерены ставить перед компьютером. И не ждите внешних эффектов, ведь с точки зрения дизайна 32 и 64-разрядные операционные системы идентичны.

Новости от Adobe

Если вы художник или дизайнер, огорчим вас или порадуем недавним заявлением компании Adobe о том, что все современные приложения Adobe CS5 станут исключительно 64-битными. Другими словами, Dreamweaver CS5, Photoshop CS5 и тому подобные знаменитые приложения смогут запуститься исключительно на 64-битной системе. 32-битная платформа их просто не распознает.



Все оказалось просто

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

Сегодня уже никто не удивится тому факту, что любимая семейная фотография, хранимая и оберегаемая от коварных неожиданностей в виде, например, воды от незадачливых соседей с верхнего этажа, забывших закрыть кран, может представлять собой какой-то непонятный набор цифр и, вместе с тем, оставаться семейной фотографией. Домашний компьютер стал столь же банальной вещью, что и «ящик» с голубым экраном. Не удивлюсь, если скоро домашний ПК будет приравниваться к бытовой электротехнике. Кстати, «двигатель прогресса», всем знакомая Intel, это нам и пророчит, продвигая идею цифрового дома.
Итак, персональный компьютер занял свою нишу во всех сферах жизни человека. Его появление и становление как неотъемлемого элемента уклада жизни уже стало историей. Когда мы говорим о ПК, то имеем в виду IBM PC-совместимые системы, и вполне справедливо. Мало кто из читателей вообще своими глазами видел не IBM PC-совместимую систему, тем более пользовался такой.

Все компьютеры IBM PC и совместимые с ними основываются на процессорах с архитектурой х86. Честно говоря, иногда мне кажется, что это не только процессорная архитектура, а архитектура всего ПК, вроде идеологии строения системы в целом. Сложно сказать, кто кого тянул за собой, то ли разработчики периферийного оборудования и конечных продуктов подстраивались под архитектуру х86, или, наоборот, они прямо или косвенно формировали пути развития х86 процессоров. История х86 — не ровная асфальтированная дорожка, а совокупность различных по «степени тяжести» и гениальности шагов разработчиков, сильно переплетающихся с экономическими факторами. Знание истории процессоров х86 вовсе не обязательно. Сравнивать процессор сегодняшней реальности с его давними предками попросту бессмысленно. Но чтобы отследить общие тенденции развития и попытаться сделать прогноз, экскурс в историческое прошлое архитектуры х86 необходим. Конечно, серьезный исторический труд может занять не один том, и претендовать на объективный и широкий охват темы бессмысленно. Поэтому вдаваться в перипетии «лайф-тайма» каждого поколения процессоров х86 не будем, а ограничимся важнейшими событиями во всей эпопее х86.

1968 год
Четверо сотрудников компании Fairchild Semiconductor: Боб Нойс, менеджер и изобретатель интегральной микросхемы в 1959 году, Гордон Мур, возглавлявший научные исследования и конструкторские разработки, Энди Гроув, специалист в области химических технологий, и Артур Рок, осуществлявший финансовую поддержку, основали фирму Intel. Это название образовано от Integral Electronic.


1969 год
Бывшим директором маркетингового отдела Fairchild Semiconductor Джерри Сандерсом и несколькими его единомышленниками была основана фирма AMD (Advanced Micro Devices), занявшаяся производством микроэлектронных устройств.

1971 год
При выполнении одного из заказов на микросхемы оперативной памяти сотрудник Intel Тед Хофф предложил создать универсальную «умную» ИМС. Разработку возглавил Федерико Феджин. В итоге родился первый микропроцессор Intel 4004.

1978 год
Весь период до этого — предыстория, хотя и неотрывная от случившихся далее событий. В этом году началась эра х86 — фирмой Intel был создан микропроцессор i8086, который имел частоты 4.77,8 и 10MHz. Смешные частоты? Да, это частоты современных калькуляторов, но с них все начиналось. Чип изготавливался по 3-мкм технологии и имел внутренний 16-битный дизайн и 16-битную шину. То есть появились 16-битная поддержка и, следовательно, 16-разрядные операционные системы и программы.
Чуть позже, в том же году, был разработан i8088, основным отличием которого являлась 8-разрядная внешняя шина данных, обеспечивавшая совместимость с 8-разрядной обвязкой и памятью, использовавшейся ранее. Также доводом в его пользу была совместимость с i8080/8085 и Z-80, относительно низкая цена. Как бы там ни было, но в качестве ЦП для своего первого ПК IBM выбрала i8088. С тех пор процессор Intel станет неотъемлемой частью персонального компьютера, а сам компьютер долго будут именовать IBM PC.

1982 год
Объявлен i80286. «Двести восемьдесят шестой» стал первым процессором х86, проникшим на советское и постсоветское пространство большим количеством. Тактовые частоты 6, 8, 10 и 12 МГц, производился по 1.5-мкм техпроцессу и содержал около 130000 транзисторов. Данный чип имел полную 16-битную поддержку. Впервые с появлением i80286 появилось такое понятие, как «защищенный режим», но тогда еще разработчики программного обеспечения не использовали его возможности в полной мере. Процессор мог адресовать более 1 Мб памяти, переключившись в защищенный режим, но назад вернуться можно было после полного перезапуска, а сегментированная организация доступа к памяти требовала значительных дополнительных усилий при написании программного кода. Из этого вытек тот факт, что i80286 использовался скорее как быстрый i8086.

Производительность чипа по сравнению с 8086 (а особенно по сравнению с i8088) увеличилась в несколько раз и достигала 2.6 миллионов операций в секунду. В те годы производители стали активно использовать открытую архитектуру IBM PC. Тогда же начался период клонирования процессоров архитектуры х86 от Intel сторонними производителями. То есть чип выпускался другими фирмами в виде точной копии. Intel 80286 стал основой новейшего по тем меркам ПК IBM PC/AT и его многочисленных клонов. Основными преимуществами нового процессора оказались повышенная производительность и дополнительные режимы адресации. И главное — совместимость с существующим программным обеспечением. Естественно, процессор был также лицензирован сторонними производителями…
В том же году фирма AMD заключает с Intel лицензионное соглашение и на его основе начинает производство клонов процессоров x86.

1985 год
В этом году произошло, наверное, самое значительное событие в истории процессоров с архитектурой х86 — компанией Intel был выпущен первый процессор i80386. Он стал, можно сказать, революционным: 32-разрядный многозадачный процессор с возможностью одновременного выполнения нескольких программ. В сущности, самые современные процессоры представляют собой ничто иное, как быстрые 386-е. Современное программное обеспечение использует ту же архитектуру 386, просто современные процессоры делают то же самое, только быстрее. Intel 386™ стал большим шагом вперед по сравнению с i8086 и i80286. В сущности, самые современные процессоры представляют собой ничто иное, как быстрые 386-е. Современное программное обеспечение использует ту же архитектуру 386, просто современные процессоры делают то же самое, только быстрее. Intel 386™ стал большим шагом вперед по сравнению с i8086 и i80286. Intel 386™ имел значительно улучшенную систему управления памятью по сравнению с i80286, а встроенные средства многозадачности позволили разработать операционную систему Microsoft Windows и OS/2.

В отличие от i80286 Intel 386™ мог свободно переключаться из защищенного режима в реальный и обратно и имел новый режим — виртуальный 8086. В этом режиме процессор мог выполнять несколько различных программных нитей одновременно, так как каждая из них выполнялась на изолированной «виртуальной» 86-й машине. В процессоре были введены дополнительные режимы адресации памяти с переменной длиной сегмента, что значительно упростило создание приложений. Процессор производился по 1-мкм технологическому процессу. Впервые процессор Intel был представлен несколькими моделями, которые образовали семейство 386-х. Здесь и начинается знаменитая маркетинговая игра компании Intel, позднее вылившаяся в разделение одного разработанного ядра на два торговых варианта, в некотором круге пользователей и специалистов называемое: «Pentium для богатых, Celeron для бедных». Хотя что здесь плохого — и волки сыты, и овцы целы.
Были выпущены следующие модели:

386DX с частотой 16, 20, 25 и 33 МГц имел 4 ГБ адресуемой памяти;
386SX с частотой 16, 20, 25 и 33 МГц в отличие от 386DX имел 16, а не 32-битную шину данных, и соответственно 16 Мб адресуемой памяти (подобным образом в свое время процессор i8088 был «создан» из i8086 за счет уменьшения разрядности внешней шины для обеспечения совместимости с имеющимися внешними устройствами);
386SL в октябре 1990 года — мобильная версия процессора Intel 386SX с частотой 20 и 25MHz.

1989 год
Корпорация Intel выпускает свой очередной процессор — Intel 486™ DX с частотой 25, 33 и 50 МГц. Intel 486 ™ DX стал первым процессором в семействе 486 и имел значительный (более чем в 2 раза при той же частоте) прирост производительности по сравнению с семейством 386. У него появился кэш первого уровня объемом 8 Кб, интегрированный в чип, а максимальный размер L2-кэша увеличился до 512 Kb. В i486DX был интегрирован блок вычислений с плавающей точкой (FPU — Floating Point Unit), который раньше выполнялся в виде внешнего математического сопроцессора, устанавливаемого на системную плату. Кроме того, это первый процессор, ядро которого содержало пятиступенчатый конвейер. Таким образом, команда, прошедшая первую ступень конвейера, продолжая обрабатываться на второй, высвобождала первую для следующей инструкции. По своей сути, процессор Intel 486™DX представлял собой быстрый Intel 386DX™, объединенный с математическим сопроцессором и 8 кБ кэш-памяти на одном кристалле. Такая интеграция позволила увеличить скорость коммуникаций между блоками до очень высоких значений.
Фирмой Intel была развернута рекламная кампания с лозунгом «Intel: The Computer Inside». Пройдет время, и она превратится в знаменитую рекламную кампанию «Intel Inside».

1991 год
Был создан собственный процессор фирмы AMD — Am386™. Этот был частично построен под действием лицензии, частично по собственной разработке и работал на максимальной частоте 40 МГц, что превышало аналогичный показатель процессора Intel.
Немного ранее произошли первые судебные разбирательства между Intel и AMD по поводу намерения AMD продавать свой клон Intel 386™. Крепко укрепившая свои позиции Intel перестала нуждаться в раздаче лицензий сторонним производителям и делиться пирогом собственного приготовления ни с кем не собиралась. В результате AMD впервые вступила на рынок х86 процессоров как конкурент. За ней последовали и другие компании. Так началось продолжающееся до сих пор великое противостояние двух гигантов (остальные конкуренты сошли с дистанции), которое дало миру много хорошего. Негласным лозунгом конкурентов Intel стала фраза: «то же, что у Intel, но за меньшую цену».
В то же время Intel выпускает i486SX, в котором для удешевления продукта отсутствует блок FPU (интегрированный сопроцессор), что, конечно же, негативно сказалось на производительности. Других отличий от i486DX не было.

1992 год
С выходом процессора Intel 486DX2 впервые был использован коэффициент умножения частоты шины. До этого момента внутренняя частота ядра была равна частоте внешней шины данных (FSB), но появилась проблема ее наращивания, так как локальные шины периферии (в то время VESA VL-bus), да и сами периферийные устройства проявляли нестабильность работы при частоте, превышающей 33 МГц. Теперь при частоте шины FSB 33 МГц тактовая частота ядра составляла 66 МГц за счет умножения на 2. Такой прием надолго вошел в историю и используется поныне, только множитель в современных CPU может превышать 20. Intel 486™ DX2 надолго стал популярным процессором и продавался в огромных количествах, впрочем, как и его клоны от конкурентов (AMD, Cyrix и другие), которые теперь уже имели некоторые отличия от «интеловского оригинала».

1993 год
В свет вышел первый суперскалярный процессор х86, то есть способный выполнять более одной команды за такт — Pentium (кодовое название P5). Это достигалось наличием двух независимых параллельно работающих конвейера. Первые процессоры имели частоту 60 и 66 МГц и получили 64-разрядную шину данных. Впервые кэш-память первого уровня была разделена на две части: отдельно для инструкций и данных. Но одним из самых значительных нововведений был полностью обновленный блок вычислений с плавающей точкой (FPU). Фактически до этого на платформе x86 еще не было настолько мощного FPU, и лишь через многие годы после выхода Intel Pentium конкуренты смогли достичь его уровня производительности. Также впервые в процессор был включен блок предсказания ветвлений, с тех пор активно развивающийся инженерами.

Суть заключается в следующем: в любой программе присутствует множество условных переходов, когда в зависимости от условия выполнение программы должно пойти по тому или иному пути. В конвейер можно поместить только одну из нескольких ветвей перехода, и если он оказывается заполненным кодом не той ветви, то его приходится очищать и заполнять заново несколько тактов (в зависимости от количества ступеней конвейера). Для решения этой проблемы и используются механизмы предсказания ветвлений. Процессор содержал 3,1 млн. транзисторов и изготавливался по 0.8-мкм процессу. Все эти изменения позволили поднять производительность нового процессора на недосягаемую высоту. В действительности же оптимизация кода «под процессор» первое время была редкой и требовала применения специальных компиляторов. И еще долго новейшему процессору приходилось выполнять программы, предназначенные для процессоров семейств 486 и 386.
В том же году появилось второе поколение Pentium на ядре P54, в котором были устранены все недостатки Р5. При изготовлении использовались новые технологические процессы 0.6, а позднее и 0.35-мкм. До 1996 года новым процессором были охвачены тактовые частоты от 75 до 200 МГц.
Первый Pentium сыграл важную роль в переходе на новые уровни производительности персонального компьютера, дал толчок и определил ориентиры развития на будущее. Но при большом рывке в производительности он не привнес никаких кардинальных изменений в архитектуру х86.

1994 год
Появившиеся Intel 486™DX4, AMD Am486DX4 и Cyrix 4х86 продолжили линейку 486-х и использование умножения частоты шины данных. Процессоры имели утроение частоты. Процессоры DX4 от Intel работали на 75 и 100 МГц, а Am486DX4 от AMD достиг 120 МГц. В процессорах стала широко применяться система управления энергопотребления. Других принципиальных отличий от 486DX2 не обнаружилось.

1995 год
Анонсирован Pentium Pro (ядро P6). Новая процессорная шина, три независимых конвейера, оптимизация под 32-битовый код, от 256 Kb до 1 Mb L2-кэша, интегрированного в процессор, причем работающего на частоте ядра, усовершенствованный механизм предсказания ветвлений — по количеству нововведений новый процессор чуть ли не бил рекорды, ранее установленные Intel Pentium.

Процессор позиционировался на использование в серверах и имел очень высокую цену. Самое примечательное, что вычислительное ядро Pentium Pro фактически не было ядром архитектуры х86. Машинные коды x86, поступающие в CPU, внутри декодировались в RISC-подобный микрокод, и уже именно его исполняло ядро процессора. Набор CISC-команд, как набор команд процессора х86, подразумевал переменную длину команд, что определяло сложность нахождения каждой отдельной команды в потоке и, следовательно, создавало трудности в разработке программ. CISC-команды являются сложными и комплексными. RISC-команды упрощенные, короткие, требующие значительно меньшее время на выполнение команды с фиксированной длиной. Использование RISC-команд позволяет значительно увеличить распараллеливание процессорных вычислений, то есть использовать больше конвейеров и, следовательно, уменьшать время исполнения команд. Ядро P6 легло в основу трех следующих процессоров Intel — Pentium II, Celeron, Pentium III.
В этом году состоялось также знаковое событие — компания AMD купила фирму NexGen, имеющую к тому времени передовые архитектурные разработки. Слияние двух инженерных команд позже принесет миру процессоры х86 с отличной от Intel микроархитектурой и даст толчок новому витку жестокой конкуренции.
На Микропроцессорном Форуме впервые был представлен новый процессор MediaGX от Cyrix, и его отличительной особенностью являются интегрированные контроллер памяти, графический ускоритель, интерфейс шины PCI и производительность, соизмеримая с производительностью Pentium. Это была первая попытка такой плотной интеграции устройств.

1996 год
Появился новый процессор AMD К5 с суперскалярным RISC-ядром. Однако RISC-ядро с его набором команд (ROP-команд) скрыты от программного обеспечения и конечного пользователя, а команды х86 преобразуются в RISC-команды. Инженеры AMD использовали уникальное решение — команды х86 частично преобразуются еще во время помещения в кэш-память процессора. В идеале процессор K5 может выполнять до четырех команд х86 за один такт, но на практике в среднем за такт обрабатываются только 2 инструкции.

Кроме того, традиционные для RISC-процессоров изменения порядка вычислений, переименование регистров и другие «приемы» позволяют увеличить производительность. Процессор К5 явился детищем объединенной команды инженеров AMD и NexGen. Максимальная тактовая частота так и не превысила 116 МГц, но производительность К5 была выше, чем у процессоров Pentium с такой же тактовой частотой. Поэтому в маркетинговых целях впервые в практике маркировки CPU был использован рейтинг производительности (Performance Rating), который явно противопоставлялся тактовой частоте равных по производительности Pentium. Но процессор все-таки не мог достойно потягаться с ним, так как Pentium уже тогда достиг частоты 166 МГц.
В том же году увидел свет Intel Pentium MMX. Главное нововведение процессора P55C — дополнительные команды MXX к набору команд, который почти не претерпевал изменений со времен создания процессоров третьего поколения. Технология MMX — это использование команд, ориентированных на работу с мультимедиаданными. Специальный набор команд SIMD (Single Instruction — Multiple Data — одна команда — множественные данные) повышает производительность при выполнении векторных, циклических команд и обработке больших массивов данных — при применении графических фильтров и различных спецэффектов.

По сути это 57 новых инструкций, призванных ускорить обработку видео и звука. Остальными изменениями ядра стали уже типичные увеличение объема кэш-памяти, улучшение схем работы кэш-памяти и других блоков. Производился процессор по 0.35-мкм процессу, 4.5 млн. транзисторов. Максимальная частота 233 МГц.
Начался выпуск суперскалярных процессоров Cyrix 6х86 на ядре М1, который на самом деле являлся процессором 5-го поколения, отличительной особенностью которого были «глубокие» конвейеры и использование классических х86 команд без каких-либо дополнительных наборов инструкций.
В конце года, пока в Intel велась разработка PentiumII, снова заявила о себе AMD, выпустив процессор шестого поколения К6. В основу AMD-K6 легло ядро, разработанное инженерами компании NexGen для процессора Nx686 и существенно доработанное в AMD. Как и К5, ядро К6 оперировало не х86 инструкциями, а RISC-подобным микрокодом. Процессор поддерживал команды MMX и 100-мегагерцевую системную шину и имел увеличенный до 64 Кб объем кэш-памяти первого уровня. Вскоре стало ясно, что PentiumII окажется К6 не по зубам.

с 1997 года до наших дней…
К 1997 году уже сложились направления инженерных разработок архитектуры х86 ведущих производителей. Следующий этап в развитии процессоров x86 можно охарактеризовать как противостояние архитектур, которое продолжается и поныне. На дистанцию по крупному счету вышли: захватившая 90 % рынка Intel, упорно с ней бьющаяся AMD, многократно проигрывающая в производственных мощностях, и Cyrix, которая впоследствии будет куплена компанией VIA, а затем и вовсе, не выдержав конкуренции, канет в неизвестность. Остальные производители не смогут достойно конкурировать и будут вынуждены искать другие ниши на рынке. Намечен переход от CISC к RISC-подобным микрокомандам в меньшей степени у Intel, в большей у AMD. Причем на вход и выход процессоров х86 по-прежнему поступают CISC-команды. А почему, собственно, стали вводить в х86 процессоры с родной ей CISC-архитектурой внутреннюю RISC-архитектуру, позволяющую углублять распараллеливание выполнения команд? Да просто из CISC-архитектуры х86 еще во времена четвертого поколения было выжато все, и способов повышать производительность на уровне базисных наборов команд не осталось.

Принципиально новых изменений и прорывов в развитии архитектуры с тех пор не было, хотя современные процессоры быстрее, например, «386-го» в сотни раз. Инженеры оттачивают и совершенствуют уже существующие микроархитектуры ядер, а новые представляют собой лишь переработанные старые. Все усовершенствования и попытки повысить производительность сводятся к оптимизации существующих решений, введению различных исправлений и «костылей» для хромающих FPU, системы организации конвейеров и кэшей. Избитыми, но все же действенными средствами является постоянное увеличение объема кэш-памяти и частоты шины FSB. Современные процессоры имеют до 2 Мб кэш-памяти, работающей на частоте ядра, а частоты системных шин достигают 800 МГц, и то с использованием множителя, так как реальная генерируемая частота всего 200 МГц. За последние 7 лет в процессоры х86 были введены следующие «новшества-подпорки»: кэш-память окончательно переехала на кристалл процессора и переведена на частоту ядра, введены и постоянно совершенствуются блоки предсказания ветвлений как компенсация увеличению длины (количества стадий) конвейера, механизм динамического изменения порядка исполнения инструкций, уменьшающий количество холостых тактов, механизм предвыборки данных для более рационального использования кэш-памяти. Множатся дополнительные наборы команд: SSE, SSE2, SSE3, 3DNow!, 3DNow Professional. Если MMX еще можно было с натяжкой назвать дополнительным набором инструкций х86, то все последующие наборы вряд ли, так как к командам х86 добавлять уже нечего. Смысл же появления этих наборов заключается в попытке как можно меньше использовать блок вычислений с плавающей точкой (FPU) в таком виде, в каком он есть, так как, обладая высокой производительностью, он отличается малой приспособленностью для высокоточных вычислений, капризностью внутренней архитектуры и ее непредсказуемостью, что усложняет жизнь программистам. То есть фактически ввели специализированный расчетный блок, ориентированный не на вычисления вообще, а на реальные, часто встречающиеся задачи, выполнять которые предлагается в обход классического FPU.

Как-то это больше похоже на борьбу с последствиями интеграции математического сопроцессора в CPU в далеком 1989 году. Во всяком случае, если задуматься и подсчитать, то большую часть времени процессор тратит «на себя» — на всевозможные преобразования, предсказания и многое другое, а не на выполнение программного кода.
Глядя назад, видно, что не все было гладко. Введение коэффициента умножения и полученная в итоге асинхронность, а также увеличение количества стадий конвейера — все это палки о двух концах. С одной стороны, это позволило увеличить тактовые частоты процессора почти до 4 ГГц (и это еще не предел), с другой — получили узкое место в виде шины FSB и проблему с условными переходами. Но всему свое время, и тогда, видимо, это были разумные решения, так как всегда присутствует очень злой экономический фактор.
Нельзя не отметить, что по-настоящему блистательных успехов за последние годы добились в области полупроводникового производства. Уже освоен 90-нанометровый технологический процесс изготовления процессоров х86, который позволяет достигать близких к СВЧ-диапазону тактовых частот, а количество транзисторов в кристалле достигает 170 млн (Pentium 4 EE).
Мы привыкли считать, что процессор — это главное устройство в ПК и что именно он задает тон глобальной компьютеризации. А ведь победоносное шествие архитектуры х86, длящееся более четверти века, началось не конкретно с процессора, а с конечного пользовательского устройства в целом — IBM PC. Тогда еще в компании IBM не догадывались, какое блистательное будущее ждет этот ПК и, не придав проекту никакого значения, сделали его открытым для всех. Именно открытости концепции, успеху программного обеспечения и MS DOS обязан успех IBM PC. А процессор в нем мог стоять любой архитектуры, но так уж получилось, что IBM выбрала i8088 и i8086, а потом уже все закрутилось, завертелось… Но из процессора х86 в итоге не получилось эдакого универсального вычислителя на все случаи жизни или «умного» устройства, вездесущего и все способного сделать, как об этом мечтали раньше. Да и «закон» Гордона Мура (каждые 2 года количество транзисторов в кристалле процессора будет увеличиваться вдвое) стал законом только для Intel, которая поставила его на острие своей маркетинговой политики, а отказываться от данного слова ей неудобно, видимо.

Сегодня можно уже твердо сказать, что архитектура х86 зашла в тупик. Вклад ее в популяризацию компьютера как устройства огромен, и с этим никто не спорит. Однако нельзя быть актуальной вечно. Молодой и сильный некогда жеребец стал старой клячей, которую продолжают запрягать в телегу. Аппетиты пользователей ненасытны, и вскоре архитектура х86 не сможет их удовлетворить. Конечно, переход связан с титаническими усилиями в связи с тем, что многомиллионный мировой парк ПК в своем почти абсолютном большинстве использует процессоры архитектуры х86, и что самое важное, использует программное обеспечение для х86 кода. Одним днем все не перевернуть, нужны годы. Но разработки 64-битных процессоров и программ набирают обороты с завидной скоростью, Intel представила Itanium2, а AMD уже почти год выпускает свои Athlon 64, которые имеют совсем не х86 архитектуру, хотя и полностью совместимы с ней и еще могут выполнять все старые программы. Таким образом, можно сказать, что AMD Athlon 64 положил начало уходу от архитектуры х86 и тем самым открыл переходный период.
Как видите, заявления о том, что процессор — самый быстро развивающийся компонент ПК, далеко не беспочвенны. Представьте себе, какими процессорами будут оснащаться компьютеры наших детей. Подумать страшно!

В Одноклассники

Дата публикации: 23.02.2012

В данной статье мы узнаем, что такое 32 и 64-битные системы и программы, и что означает x86, x64, x32. А также решим, какую систему устанавливать на ваш компьютер или ноутбук.

Что «это» такое?

Разделение на 32 и 64 бит связано, прежде всего, с типом процессоров в вашем компьютере или ноутбуке. Раньше (много лет назад) все процессоры в компьютерах были 32-битными. А ещё раньше они были 8 битными. Т.е. чем больше «битность» вашего процессора, тем он быстрее и лучше решает все системные задачи и быстрее проводит операции. Таким образом 64 битные процессоры работают быстрее, чем 32-битные.

На современных компьютерах установлены, в основном, 64-битные процессоры. Лет через 5 появятся и 128-битные процессоры. Как никак, наука и технологии не стоят на месте.

Операционные системы

Помимо того, что ОС Windows бывают разных видов (ХР, 7 и т.д.), они также подразделяются на версии x86 и х64. Соответственно, если у вас 64-битный процессор, то и систему нужно устанавливать x64.

Кстати, х86 означает 32-битную систему. Почему называется х86, а не х32? Этого почти никто не знает. Раньше 32-битные системы так и писались х32. А затем их стали называть х86, хотя сути это не поменяло - это всё та же 32-битная система. На мой взгляд, такое переименовывание - это, ни что иное, чем хитрый маркетинговый ход, чтобы выдать старое за нечто новое.

Если вы установите на компьютер с 64-битной архитектурой 32-битную ОС, то компьютер всё равно будет работать нормально. И наоборот, если установить х64 на 32-битный компьютер, то всё тоже будет работать нормально.

В чём различия?

Одно из главных отличий между системами х86 и х64 заключается в использовании оперативной памяти вашего компьютера. Предел использования оперативной памяти для 32-битных систем составляет 3 ГБ. А потому, если на вашем компьютере или ноутбуке оперативная память превышает 3 ГБ, то система не будет использовать оставшуюся часть. Т.е. На компьютере с 8гб оперативной памяти, 5 ГБ просто не будет использоваться. Конечно, есть специальные утилиты, помогающие это исправить, но всё же...

А потому отсюда следует главное правило: Если у вашего компьютера больше 3 ГБ оперативной памяти, то устанавливайте на него ОС х64 (64-битную).

Ещё одно отличие заключается в том, что компьютерные программы тоже подразделяются на 32 и 64-битные. Если хотите максимума производительности, то устанавливайте на свой компьютер соответствующие программы. Особенно это касается современных графических редакторов.

Что же лучше: х86 или х64?

Прочитав вышеперечисленное, у вас, вероятно, сложилось впечатление, что 64-битные системы намного лучше и быстрее, а потому на все компьютеры и ноутбуки лучше устанавливать именно х64. А вот и нет!

Главный минус состоит в том, что 64-битные программы используют для своей работы гораздо больше оперативной памяти. А потому, если у вас мало оперативной памяти, то устанавливать х64 будет глупо. К тому же, нужно учесть, что и сама ОС тоже использует часть оперативной памяти.

Например:
У вас есть компьютер или ноутбук с 2 ГБ оперативной памяти и с процессором 32 бита. Вы устанавливаете на него Windows 7 x64. Многие школьники любят на все компьютеры подряд устанавливать 64-битную Windows 7 (юношеский максимализм). А теперь давайте считать: 768 МБ использует Windows 7, плюс 64-битные программы, которые тоже используют больше оперативной памяти. Таким образом, получается, что вы сводите мощность своего «железа» к минимуму. А потому лучше на такой компьютер или ноутбук установить 32-битную Windows XP.

Кстати, некоторые 64-битные приложения работают нестабильно. Но таких программ становится всё меньше и меньше.

Вывод

Если у вас мощный и современный компьютер с процессором 64-бита и ОЗУ больше 3 ГБ, то смело устанавливайте Windows 7 x64. На слабые же компьютеры можно установить ХР. Кстати, есть 64-битные версии Windows ХР, что очень удобно, если у вас ноутбук с 2-3 ГБ ОЗУ и 64-битным процессором.


Последние статьи раздела «Компьютеры & Интернет»:


Комментарии статьи:

Великолепная передача мысли - абсолютно всё понятно, о чем говорит автор. И вопрос затронут важнейший: ставить ПО - не ставить?! Но как это обосновать или опровергнуть?! С удовольствием бы поверил и принял как руководство! Но противники тоже, кажется, складно звонят?!

Очень полезная статья

Эта статья сильно устарела и, будем честны, полна недостатков. Скоро ей исполнится 6 лет)) Скоро я её перепишу и актуализирую. Имейте терпение. А пока можете почитать описание технологии в википедии.

Очень хорошо! Мне понравилось.

Спасибо! Всё просто и понятно)

Че за ламер написал эту статью? Верхушек по нахватался и возомнил себя гуру!!! "Почему называется х86, а не х32? Этого почти никто не знает" Изначально процессоры компании Intel имели 86 команд. По этому x86 относится только к процессорам Intel и их клонам имеющим в основе 86 команд. К разрядности это число не имеет никакого отношения поскольку и x64 процессоры содержат эти команды. Все остальное тоже отсебятина и вранье. Windows x32 прекрасно работает с оперативкой больше 4г и даже больше 8г и с 16г тоже. Возмите к примеру windows server x32. Ограничение поставили мелкомягкие чтобы расширить рынок.

Статья очень информативная, спасибо.

Спасибо за работу!!! Очень информативная и полезная статья!!!+++

Спасибо большое всё стало понятно! Очень полезная статья!

Понятно что всё не понятно!

А вот если я скачиваю программу, а мне пишут, что та только для 64-битных систем. Что это значит и что делать?

какую устанавливать винду х86 или х64 надо смотреть на железо.процессор и материнская плата и соответственно операционная система.все должно поддерживать только одну архитектуру.или х86 или х64 ибо они между собой НЕ СОВМЕСТИМЫ...

У меня раньше была Windows7 32бит,установил другую win8 когда устанавливал понечайности выбрал 64бит и нормально работает)

Х86 как таковой не существует, есть х32, есть х64, есть i860 - номер первого совместимого процессора. Вообще номиналом (Х) в элетронике обозначаются контакты на разъёмах, соответственно х32 - 32 входных контакта, 64 - 64 контакта. Но мы живём в России полюбопытствуйте в какое понятие превратилось знаменитое ИМХО. Привыкайте!

уточнение к строке текста "И наоборот, если установить х64 на 32-битный компьютер, то всё тоже будет работать нормально." - или компьютер откажется запускаться на стадии первой перезагрузки при установке Windows

Артем спасибо все конкретно изложено и понятно

Спасибо за статью.

Неплохой обзор. Вообще, с поддержкой 32-битных приложений на 64-разрядных есть ряд специфики. Например, wow64 хоть и позволяет запускать 32-бита, но не позволяет инъекции кода. Именно по этой причине большинство программ модифицирующих проводник Windows, не запускаются.

Скажите на 64 bit процессор с 3гб оперативы все таки какую ОС луше повесить 86 или 64

На самом деле можно установить 64битную систему на 32 битный проц, т.к. 64битные ос могу работать в режиме 32

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

История

Оригинальная спецификация разработана компанией AMD в 2000 г. Первым процессором, реализовавшим архитектуру, стал AMD K8 (выпущен в 2003 г.).

В те годы (конец девяностых и начало двухтысячных) компании HP и Intel разрабатывали свою 64-битную архитектуру IA-64 (Intel Itanium). Но она была кардинально другой, основана на принципе VLIW (very long instruction word), и была несовместима с 32-битной архитектурой x86. Из-за того, что огромная масса ранее написанного софта не работала на IA-64, этой архитектуре не удалось завоевать популярность. Хотя в конце 2001 года для IA-64 была выпущена специальная версия Windows XP 64-bit for IA-64.

Архитектура x86 ведёт свою историю с 1978 г., начиналась как 16-битная, в 1985 г. стала 32-битной. Архитектура обладает большим количеством костылей для обратной совместимости. Ей предрекали смерть вместе с 32-разрядыми вычислениями. Однако появление x86-64 дало ей новую жизнь.

Именование

Существует несколько вариантов названий этой технологии, которые иногда приводят к путанице.

  • x86-64 - первоначальный вариант. Именно под этим названием фирмой AMD была опубликована первая предварительная спецификация.
  • x64 - официальное название версий операционных систем Windows, также используемое как название архитектуры фирмами Microsoft и Oracle.
  • AMD64 - после выпуска первых процессоров Clawhammer и Sledgehammer в названии архитектуры появилось название фирмы-разработчика AMD. Сейчас является официальным для реализации AMD.
  • EM64T - первое официальное название реализации Intel. Расшифровывалось как Extended Memory 64 Technology.
  • Intel 64 - текущее официальное название архитектуры Intel.

Иногда упоминание AMD вводит пользователей в заблуждение, вплоть до того, что они отказываются использовать дистрибутивы родных версий операционной системы, мотивируя это тем, что на их процессоре Intel версия для AMD не будет работать. На самом деле распространители ПО используют название amd64 лишь потому, что именно AMD была пионером в разработке этой технологии.

Часто пользователи путают архитектуру x86-64 с IA-64. Во избежание подобных ошибок следует помнить, что Intel 64 и IA-64 - это совершенно разные, несовместимые между собой микропроцессорные архитектуры. В 2017 году вы вряд ли встретите где-либо процессор архитектуры IA-64 (Itanium).

Распространённость

Суперкомпьютеры

В списке суперкомпьютеров TOP-500 архитектура x86-64 вытеснила ранее популярные RISC-архитектуры и 32-битные версии. Intel пыталась продвигать свой Itanium (макс. доля достигнута в 2004 г.), но безуспешно.

Дата-центры

Servers using x86 chips still maintain a more than 90 percent market share. http://www.common.org/servers/x86-servers-data-center/

Во всех дата-центрах корпорации Google сейчас используются процессоры Intel с известной всем архитектурой x86. Тем не менее, корпорация Google планирует использовать и альтернативные решения. https://habrahabr.ru/company/ibm/blog/282820/

В 2017 году алгоритмы обработки больших объёмов информации в подавляющем большинстве случаев выполняются именно на архитектуре x86-64, поэтому мы и рассматриваем её в магистратуре АиСОБОИ.

Регистры

Архитектура x86-64 имеет:

  • 16 целочисленных 64-битных регистров общего назначения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 - R15);
  • 8 80-битных регистров с плавающей точкой (ST0 - ST7);
  • 8 64-битных регистров MMX (MM0 - MM7, имеют общее пространство с регистрами ST0 - ST7);
  • 16 128-битных регистров SSE (XMM0 - XMM15);
  • 64-битный указатель RIP и 64-битный регистр флагов RFLAGS.

Операции над 64-битными регистрами (сложение, вычитание и пр.) работают столько же времени, сколько операции над 32-битными регистрами.

Может показаться удивительным, но операции над младшими 32-битными половинами регистров обнуляют старшие 32 бита. Например,

mov eax, ebx

автоматически занулит старшие биты в rax.

Так сделано для оптимизации. Это позволяет процессору разрывать цепочки зависимостей (не надо ждать, пока посчитаются старшие биты, для продолжения операций с младшими, потому что старшие почти наверняка никому не будут нужны).

Современный процессор устроен очень сложно. Модель процессора, описанная в руководстве по архитектуре, плохо описывает реальный механизм работы современного ядра. В частности, понятие регистров процессора не соответствует действительности, «в железе» нет такой вещи, как регистр eax или rax. Понятие регистров процессора виртуализируется. Эта технология называется переименованием регистров (register renaming). Декодер команд выделяет регистр из большого банка регистров. Когда инструкция завершается, значение этого динамически распределенного регистра записывается обратно в любой регистр, в котором в настоящее время хранится значение, скажем, rax. Чтобы сделать эту работу эффективно и одновременно выполнять несколько инструкций, очень важно, чтобы операции не имели взаимозависимости. Плохо, когда значение регистра зависит от других инструкций.

Инструкции

x86-64 относится к типу CISC (complex instruction set computing). Является чуть ли не единственной современной CISC-архитектурой. Другие популярные архитектуры строятся по принципу RISC (reduced instruction set computer).

При этом современные х86-процессоры, хотя и CISC-совместимы, но являются процессорами с RISC-ядром, и в формальном смысле считаются гибридными. В таких гибридных CISC-процессорах CISC-инструкции преобразовываются в набор внутренних RISC-команд, при этом одна команда x86 может порождать несколько RISC-команд, исполнение команд происходит на суперскалярном конвейере одновременно по несколько штук. Небольшие инструкции легко выполнять одновременно.

Инструкции кодируются последовательностью байт переменной длины, на практике от 1 до 15 байт.

Ликвидированные возможности

В x86-64 по сравнению с x86 удалили некоторые устаревшие инструкции. Это двоично-десятичная арифметика BCD и инструкции типа aam (ASCII adjust for multiplication). Большая часть устаревших инструкций, тем не менее, оставлена.

Режимы

Процессоры данной архитектуры поддерживают два режима работы: Long mode («длинный» режим) и Legacy mode («унаследованный», режим совместимости с 32-битным x86).

Long mode

«Длинный» режим - «родной» для процессоров x86-64. Этот режим даёт возможность воспользоваться всеми дополнительными преимуществами, предоставляемыми архитектурой. Для использования этого режима необходима 64-битная операционная система.

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

Legacy mode

Данный «унаследованный» режим позволяет процессору выполнять инструкции, рассчитанные для процессоров x86, и предоставляет полную совместимость с 32-битным кодом и операционными системами. В этом режиме процессор ведёт себя точно так же, как x86-процессор, например Athlon или Pentium III, и дополнительные функции, предоставляемые архитектурой x86-64 (например, дополнительные регистры), недоступны. В этом режиме 64-битные программы и операционные системы работать не будут.

Этот режим включает в себя подрежимы:

  • Реальный режим (real mode)
  • Защищённый режим (protected mode)
  • Режим виртуального 8086 (virtual 8086 mode)

Реальный режим использовался в MS-DOS, в реальном режиме выполнялся код BIOS при загрузке компьютера. Защищённый режим используется в 32-битных версиях современных многозадачных операционных систем. Режим виртуального 8086 - подрежим защищённого, предназначался главным образом для создания т. н. «виртуальных DOS-машин». Если из 32-битной версии Windows вы запускаете 16-битное DOS-приложение, то работает эмулятор NTVDM, который использует этот режим процессора. Другой эмулятор, DOSBox, не использует этот режим V86, а выполняет полную эмуляцию.

Переход между режимами

Из длинного режима нельзя перейти в реальный или режим виртуального 8086 без перезагрузки. Поэтому в 64-битных версиях Windows не работает NTVDM и нельзя запускать 16-битные программы.

Самый современный процессор x86-64 полностью поддерживает реальный режим. Если загрузка выполняется через BIOS, то код загрузчика (из сектора #0) исполняется в реальном режиме. Однако если вместо BIOS используется UEFI, то переход в Long mode происходит ещё раньше, и никакого кода в реальном режиме уже не выполняется. Можно считать, что современный компьютер сразу начинает работать в 64-битном длинном режиме.

Трансляция адресов в памяти

Упрощённо говоря, процессор обращается к памяти через шину. Адресами памяти, которыми обмениваются в шине, являются физические адреса, то есть сырые числа от нуля до верхней границы доступной физической памяти (например, до 2 33 , если у вас установлено 8 ГБ оперативки). Ранее между процессором и микросхемами памяти располагался северный мост, но в реализации Intel начиная с Sandy Bridge он интегрирован на кристалл процессора.

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

Это не физическая схема, а только описание процесса преобразования адресов.

Трансляция начинается, когда CPU выполняет инструкцию, которая ссылается на адрес памяти. Первым шагом является перевод этого логического адреса в линейный адрес. Но, спрашивается, зачем это делать вместо того, чтобы напрямую использовать линейные адреса в программе? Это результат эволюции. Чтобы действительно понять смысл сегментации x86, нам нужно вернуться в 1978 год.

Сегментация памяти в реальном режиме

16-битный процессор 8086 использовал 16-битные регистры и мог напрямую адресовать только 2 16 байт памяти. Инженеры придумывали, как же можно заставить его работать с большим объёмом памяти, не расширяя разрядность регистров.

Были придуманы сегментные регистры, которые должны были задавать, к какому именно 64-килобайтному куску памяти относится данный 16-битный адрес.

Решение выглядит логичным: сначала вы устанавливаете сегментный регистр, по сути говоря “так, я хочу работать с куском памяти начиная с адреса X”; затем 16-битный адрес уже используется как смещение в рамках этого куска.

Всего предусматривалось сначала четыре 16-битных сегментных регистра, потом добавили ещё два:

  • CS = Code Segment
  • DS = Data Segment
  • ES = Destination Segment
  • SS = Stack Segment

Для вычисления линейного адреса ячейки памяти процессор вычисляет физический адрес начала сегмента - умножает сегментную часть виртуального адреса на число 16 (или, что то же самое, сдвигает её влево на 4 бита), а затем складывает полученное число со смещением от начала сегмента. Таким образом, сегменты частично перекрывались, и всего можно было адресовать около 1 МБ физической памяти. Спрашивается, почему не умножать значение сегментного регистра сразу на 65536, ведь тогда можно было бы адресовать 4 ГБ памяти. Тогда это было не нужно и только растило стоимость чипа.

В реальном режиме отсутствует защита памяти и разграничение прав доступа.

Программы были маленькие, поэтому их стек и код полностью помещались в 64 КБ, не было проблем. В языке C тех древних времён обычный указатель был 16-битный и указывал относительно сегмента по умолчанию, однако существовали также far-указатели, которые включали в себя значение сегментного регистра.

#include int main() { char far * p = (char far * ) 0x55550005 ; char far * q = (char far * ) 0x53332225 ; * p = 80 ; (* p) ++; printf ("%d" ,* q) ; return 0 ; }

Тут оба указателя указывают на один и тот же физический адрес 0x55555 .

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

В 32-битном защищенном режиме также используется сегментированная модель памяти, однако уже организованная по другому принципу: расположение сегментов описывается специальными структурами (таблицами дескрипторов), расположенными в оперативной памяти.

Сегменты памяти также выбираются все теми же сегментными регистрами. Значение сегментного регистра (сегментный селектор) больше не является сырым адресом, но вместо этого представляет собой структуру такого вида:

Существует два типа дескрипторных таблиц: глобальная (GDT) и локальная (LDT). Глобальная таблица описывает сегменты операционной системы и разделяемых структур данных, у каждого ядра своя. Локальная таблица может быть определена для каждой конкретной задачи (процесса). Бит TI равен 0 для GDT и 1 для LDT. Индекс задаёт номер дескриптора в таблице дескрипторов сегмента. Поле RPL расшифровывается как Requested Privilege Level.

Сама таблица представляет собой просто массив, содержащий 8-байтные записи (дескрипторы сегмента), где каждая запись описывает один сегмент и выглядит так:

Помимо базового адреса сегмента дескрипторы содержат размер сегмента (точнее, максимально доступное смещение) и различные атрибуты сегментов, использующиеся для защиты памяти и определения прав доступа к сегменту для различных программных модулей. Базовый адрес представляет собой 32-битный линейный адрес, указывающий на начало сегмента, а лимит определяет, насколько большой сегмент. Добавление базового адреса к адресу логической памяти дает линейный адрес (никакого умножения на 16 уже нет). DPL (Descriptor Privilege Level) - уровень привилегий дескриптора; это число от 0 (наиболее привилегированный, режим ядра) до 3 (наименее привилегированный, пользовательский режим), которое контролирует доступ к сегменту.

Когда CPU находится в 32-битных режимах, регистры и инструкции могут в любом случае адресовать всё линейное адресное пространство. Итак, почему бы не установить базовый адрес в ноль и позволить логическим адресам совпадать с линейными адресами? Intel называет это «плоской моделью», и это именно то, что делают современные ядра x86. Это эквивалентно отключению сегментации.

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

На архитектуре x86-64 в длинном (64-битном) режиме сегментация не используется. Для четырёх сегментных регистров (CS, SS, DS и ES) базовый адрес принудительно выставляются в 0. Сегментные регистры FS и GS по-прежнему могут иметь ненулевой базовый адрес. Это позволяет ОС использовать их для служебных целей.

Например, Microsoft Windows на x86-64 использует GS для указания на Thread Environment Block, маленькую структурку для каждого потока, которая содержит информацию об обработке исключений, thread-local-переменных и прочих per-thread-сведений. Аналогично, ядро Linux использует GS-сегмент для хранения данных per-CPU.

Практика: просмотр регистров

(gdb) info registers rax 0x40052d 4195629 rbx 0x0 0 rcx 0x0 0 rdx 0x7fffffffde78 140737488346744 rsi 0x7fffffffde68 140737488346728 rdi 0x1 1 rbp 0x7fffffffdd80 0x7fffffffdd80 rsp 0x7fffffffdd80 0x7fffffffdd80 r8 0x7ffff7dd4e80 140737351863936 r9 0x7ffff7dea700 140737351952128 r10 0x7fffffffdc10 140737488346128 r11 0x7ffff7a32e50 140737348054608 r12 0x400440 4195392 r13 0x7fffffffde60 140737488346720 r14 0x0 0 r15 0x0 0 rip 0x400531 0x400531 eflags 0x246 [ PF ZF IF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0

Кольца защиты

Вы, вероятно, знаете интуитивно, что приложения имеют ограниченные полномочия на компьютерах Intel x86 и что только код операционной системы может выполнять определенные задачи. Как это работает? Уровни привилегий x86 - механизм, с помощью которого ОС и ЦП ограничивают возможности программ пользовательского режима. Существует четыре уровня привилегий: от 0 (наиболее привилегированных) до 3 (наименее привилегированных) и три основных ресурса: память, порты ввода-вывода и возможность выполнения определенных машинных инструкций. В любой момент времени процессор x86 работает на определенном уровне привилегий, который определяет, какой код может и не может сделать. Эти уровни привилегий часто описываются как защитные кольца, причем самое внутреннее кольцо соответствует самым высоким привилегиям. Большинство современных ядер x86 используют только Ring 0 и Ring 3.

Виртуальное адресное пространство

Хотя виртуальные адреса имеют разрядность в 64 бита, текущие реализации (и все чипы, которые находятся на стадии проектирования) не позволяют использовать всё виртуальное адресное пространство из 2 64 байт (16 экзабайт). Это будет примерно в четыре миллиарда раз больше виртуального адресного пространства на 32-битных машинах. В обозримом будущем большинству операционных систем и приложений не потребуется такое большое адресное пространство, поэтому внедрение таких широких виртуальных адресов просто увеличит сложность и расходы на трансляцию адреса без реальной выгоды. Поэтому AMD решила, что в первых реализациях архитектуры фактически при трансляции адресов будут использоваться только младшие 48 бит виртуального адреса.

Кроме того, спецификация AMD требует, что старшие 16 бит любого виртуального адреса, биты с 48-го по 63-й, должны быть копиями бита 47 (по принципу sign extension). Если это требование не выполняется, процессор будет вызывать исключение. Адреса, соответствующие этому правилу, называются «канонической формой». Канонические адреса в общей сложности составляют 256 терабайт полезного виртуального адресного пространства. Это по-прежнему в 65536 раз больше, чем 4 ГБ виртуального адресного пространства 32-битных машин.

Это соглашение допускает при необходимости масштабируемость до истинной 64-разрядной адресации. Многие операционные системы (включая семейство Windows NT и GNU/Linux) берут себе старшую половину адресного пространства (пространство ядра) и оставляют младшую половину (пользовательское пространство) для кода приложения, стека пользовательского режима, кучи и других областей данных. Конструкция «канонического адреса» гарантирует, что каждая совместимая с AMD64 реализация имеет, по сути, две половины памяти: нижняя половина «растет вверх» по мере того, как становится доступнее больше виртуальных битов адреса, а верхняя половина - наоборот, вверху адресного пространства и растет вниз.

Первые версии Windows для x64 даже не использовали все 256 ТБ; они были ограничены только 8 ТБ пользовательского пространства и 8 ТБ пространства ядра. Всё 48-битное адресное пространство стало поддерживаться в Windows 8.1, которая была выпущена в октябре 2013 года.

Структура таблицы страниц

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

Возможные размеры страниц:

  • 4 KB (2 12 байт) - наиболее часто используется (как и в x86)
  • 2 MB (2 21 байт)
  • 1 GB (2 30 байт)

Полная иерархия сопоставления страниц размером 4 КБ для всего 48-битного пространства займет немногим больше 512 ГБ ОЗУ (около 0.195% от виртуального пространства 256 ТБ).

Практика: как скоро оно упадёт?

Понятно, что данный код по стандарту некорректен, содержит Undefined Behavior, а раз так, то компилятор может сделать что угодно, например не упасть вообще. Но тем не менее, если запускать на x86-64, то падает оно в определённый момент...

#include #include char buf[ 1 ] ; #define PAGE_SIZE 4096 int main() { char * ptr = buf; for (;; ) { int offset = (intptr_t ) ptr % PAGE_SIZE; printf ("%p: offset = %d\n " , ptr, offset) ; * ptr = "a" ; // Segmentation fault expected! ++ ptr; } return 0 ; }

Организация стека и вызова функций

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

Стек в x86

Стек растёт вниз. Вершина стека на самом деле имеет наименьший адрес.

Используется специальный регистр rsp (Stack Pointer).

Инструкция

Push rax

эквивалентна

Sub rsp, 8 mov , rax

Инструкция

эквивалентна

Mov rax, add rsp, 8

Соглашение вызова в Linux

В Linux и других ОС используется соглашение System V AMD64 ABI.

Для простоты мы ограничимся целочисленными аргументами и указателями.

Первые шесть аргументов передаются через регистры:

Если этого не хватает, то седьмой аргумент уже передаётся через стек.

Если функция хочет использовать регистры rbx, rbp и r12–r15, она перед выходом обязана их вернуть в первоначальное состояние.

Возвращаемое значение до 64 бит сохраняется в rax, до 128 бит - в rax и rdx.

Фрейм стека

Для такой функции

long myfunc(long a, long b, long c, long d, long e, long f, long g, long h) { long xx = a * b * c * d * e * f * g * h; long yy = a + b + c + d + e + f + g + h; long zz = utilfunc(xx, yy, xx % yy) ; return zz + 20 ; }

стек будет иметь такой вид:

Красная зона (red zone)

128-байтовая область за пределами места, на которое указывает rsp, считается зарезервированной и не должна изменяться обработчиками сигналов или прерываний. Функции могут использовать эту область для временных данных, которые не нужны для вызовов функций. В частности, листовые функции (из которых не вызываются другие функции) могут использовать эту область для всего кадра стека, а не изменять указатель стека rsp в начале и конце выполнения.

Это оптимизация. Уменьшение и увеличение rsp - это уже две инструкции, их можно сэкономить.

Например:

long utilfunc(long a, long b, long c) { long xx = a + 2 ; long yy = b + 3 ; long zz = c + 4 ; long sum = xx + yy + zz; return xx * yy * zz + sum; }

Сохранение базового указателя фрейма

Указатель rbp (и его предшественник ebp на x86), будучи стабильной «привязкой» к началу фрейма стека во время выполнения функции, очень удобен для ручного программирования и для отладки. Однако некоторое время назад было замечено, что коду, который генерируется компилятором, rbp действительно не нужен (компилятор может легко отслеживать смещения из rsp).

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

gcc сохраняет базовый указатель по умолчанию на x86, но позволяет оптимизировать с помощью флага компиляции -fomit-frame-pointer .

Во всяком случае, еще одна «новинка», которую представил AMD64 ABI, делает базовый указатель явно необязательным. gcc придерживается этой рекомендации и по умолчанию опускает указатель фрейма на x64 при компиляции с оптимизацией. Он дает возможность сохранить его, указав флаг -fno-omit-frame-pointer .

Соглашение вызова в Windows

Ура, больше никаких cdecl/stdcall/fastcall/thiscall/register/safecall, осталось только одно соглашение вызова! Но нет, Microsot разработал vectorcall...

Первые четыре аргумента передаются через регистры: rcx, rdx, r8, r9.

Регистры rbx, rbp, rdi, rsi, rsp, r12, r13, r14 и r15 функция обязана вернуть в исходное состояние.

Практика: сумма чисел 3 : c3 ret

Системные вызовы

Механизмы выполнения системного вызова

Функции C

Когда вы вызываете какую-либо системную функцию, например open() , write() , getpid() из кода на C, вы на самом деле не делаете напрямую сам системный вызов. Просто так вызовом функции в режим ядра (ring 0) из пользовательского (ring 3) перейти не получится. Вызываются обычные функции, реализованные внутри стандартной библиотеки, а уже они внутри делают системный вызов тем или иным методом:

  • через программное прерывание,
  • через инструкцию syscall,
  • через инструкцию sysenter.

Программное прерывание

Прерывания - это как бы сигнал процессору, что надо прервать выполнение (их поэтому и назвали прерываниями) текущего кода и срочно сделать то, что указано в обработчике.

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

Программное прерывание - синхронное прерывание, которое может осуществить программа с помощью специальной инструкции.

В процессорах архитектуры x86 для явного вызова синхронного прерывания имеется инструкция int , аргументом которой является номер прерывания (от 0 до 255). В защищённом и длинном режиме обычные программы не могут обслуживать прерывания, эта функция доступна только системному коду (операционной системе).

В ОС Linux номер прерывания 0x80 используется для выполнения системных вызовов. Обработчиком прерывания 0x80 является ядро Linux. Программа перед выполнением прерывания помещает в регистр eax номер системного вызова, который нужно выполнить. Когда управление переходит в ring 0, то ядро считывает этот номер и вызывает нужную функцию.

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

  • Поместить номер системного вызова в eax .
  • Поместить аргументы в регистры ebx , ecx , edx , esi , edi , ebp .
  • Вызвать инструкцию int 0x80 .
  • Получить результат из eax .

Пример реализации mygetpid() (получение PID текущего процесса) на ассемблере (для системного вызова getpid используется номер 20):

Intel_syntax noprefix . globl mygetpid .text mygetpid: mov eax , 20 int 0x80 ret

Инструкция syscall

Это более современный метод, используется в 64-битном Linux, работает быстрее.

  • Номер системного вызова помещается в rax .
  • Аргументы записываются в rdi , rsi , rdx , r10 , r8 и r9 .
  • Затем вызывается syscall .
  • Результат в rax .

Пример реализации mygetpid() (получение PID текущего процесса) на ассемблере (для системного вызова getpid по таблице используется номер 39):

Intel_syntax noprefix . globl mygetpid .text mygetpid: mov rax , 39 syscall ret

Отслеживание системных вызовов

На Linux инструмент пользовательского режима strace позволяет отслеживать системные вызовы, которые выполняет данная программа.