Еще совсем недавно (всего 10 лет назад) на рынке пользовательских процессоров было три архитектуры, и все они были более-менее неплохо разделены: ARM-процессоры ставились в мобильные устройства, где важно было время автономной работы, x86-процессоры ставились в устройства под управлением Windows, ну и в пику Intel Apple использовала в своих устройствах процессоры на архитектуре PowerPC (хотя мы знаем, что она все же «переползла» на x86). Но на сегодняшний момент на рынке пользовательских процессоров осталось всего две архитектуры — PowerPC выбыл из гонки, причем совсем недавно: последнее устройство на этой архитектуре, PlayStation 3, перестали производить всего пару недель назад. Более того — все больше утечек о том, что на ARM-процессорах можно будет запускать полноценную Windows, и с другой стороны — тот же Android отлично работает с х86-процессорами начиная с версии 4.0. То есть, как мы видим, разница между этими архитектурами все больше размывается в глазах пользователей, и в этой статье мы и выясним, почему так происходит.
Для начала определимся с тем, что же такое архитектура. Говоря простым языком, с точки зрения программиста архитектура процессора — это его совместимость с определенным набором команд, которые могут использоваться при написании программ и реализуются на аппаратном уровне с помощью различных сочетаний транзисторов процессора.
Процессоры х86 построены на архитектуре CISC (Complex Instruction Set Computing, процессоры с полным набором инструкций) — это означает, что в процессоре реализовано максимальное число инструкций, что, с одной стороны, упрощает написание программ и уменьшает их вес, и другной стороны — процессор практически невозможно нагрузить на 100%.
Первым процессором на архитектуре х86 был Intel 8086 — это первый 16-битный процессор от Intel, работающий на частоте до 10 МГц и выпущенный в 1978 году. Процессор оказался крайне популярным и производился до 1990 года, а все последующие процессоры стали с делать с ним совместимые. Сначала эта совместимость показывалась в виде окончания названия процессора на 86, ну а в дальнейшем, с выходом Pentium, архитектуру решили назвать х86.
В 1985 году вышел процессор i386, который стал первым 32-битный процессором от Intel, а к 1989 году Intel выпустила первый скалярный процессор i486 — этот процессор умел выполнять одну операцию за такт. В дальнейшем, с выходом Pentium в 1993 году, процессоры от Intel стали суперскалярными, то есть научились делать несколько операций за один такт, и суперконвейерными — то есть имели два вычислительных конвейера. Но это было еще не все — по сути все процессоры Intel, начиная с i486DX, являются CISC-процессорами с RISC-ядром (Reduced Instruction Set Computer, процессоры с сокращённым набором инструкций): в микропроцессор встраивается аппаратный транслятор, который непосредственно перед исполнением преобразуют CISC-инструкции процессоров x86 в более простой набор внутренних инструкций RISC, при этом одна команда x86 может порождать несколько RISC-команд.
С тех пор особо ничего не поменялось — да, росло число конвейеров, росло число операций за такт, процессоры стали многоядерными и 64-битными, но до сих пор все решения от Intel и AMD являются суперконвейерными суперскалярными микропроцессорами, построенными на основе CISC-архитектуры с RISC-ядром.
Архитектура ARM
Архитектура ARM появилась позже x86, в 1986 году с выходом процессора ARM2. Цель ее разработки была в максимальной оптимизации и уменьшения числа транзисторов — к примеру, под нагрузкой x86-процессор тогда использовал едва ли 30% от числа всех транзисторов, все другие банально простаивали. Поэтому ARM разработали собственный чип на RISC-архитектуре, который назвали ARM2 — он имел всего 30000 транзисторов (сравните с 275 тысячами транзисторов в актуальном тогда i386), и не имел как кэша (что в общем-то тогда было нормой для процессоров — кэш можно было докупить и поставить отдельно), но и микропрограммы как таковой — микрокод исполнялся как и любой другой машинный код, путём преобразования в простые инструкции:
В итоге из-за того, что число транзисторов в ARM-процессорах ощутимо меньше, чем в х86, мы и получаем, что их тепловыделение тоже ощутимо ниже. Но, с другой стороны, из-за упрощенной архитектуры и производительность у ARM тоже ощутимо ниже, чем у x86.
В дальнейшем к ARM так же прикрутили поддержку и суперскалярности, и суперконвеерности, процессоры стали многоядерными и несколько лет назад стали 64-битными. В итоге современные решения от ARM являются суперконвейерными суперскалярными микропроцессорами, построенными на основе RISC-архитектуры.
Итоги
В результате мы видим две крайности: x86 являются мощными решениями, обвешанными инструкциями, которые могут выполнять абсолютно любые задачи с хорошей скоростью. Но за это приходится платить увеличенным тепловыделением. ARM же — простые процессоры, у которых набор инструкций ощутимо меньше, поэтому выполнение многих серьезных задач на них не имеет особого смысла из-за медлительности процесса. Но при этом и тепловыделение низкое. Однако самое основное — обе архитектуры поддерживают RISC-инструкции, а значит что на обеих архитектурах можно запускать одинаковые ОС, что мы и видим в случае с Android, Linux и Windows, и это означает, что в будущем разница между х86 и ARM будет размываться все больше.