ARM (стилизовано строчными буквами как arm , ранее аббревиатура от Advanced RISC Machines и изначально Acorn RISC Machine ) — семейство архитектур набора инструкций RISC (ISA) для компьютерных процессоров . Arm Holdings разрабатывает ISA и лицензирует их другим компаниям, которые создают физические устройства, использующие набор инструкций. Она также проектирует и лицензирует ядра , реализующие эти ISA.
Благодаря своей низкой стоимости, низкому энергопотреблению и низкому тепловыделению процессоры ARM полезны для легких, портативных устройств с питанием от батареи, включая смартфоны , ноутбуки и планшетные компьютеры , а также встраиваемые системы . [3] [4] [5] Однако процессоры ARM также используются для настольных компьютеров и серверов , включая самый быстрый в мире суперкомпьютер ( Fugaku ) с 2020 [6] по 2022 год. С более чем 230 миллиардами произведенных чипов ARM, [7] [8] по крайней мере с 2003 года, и с его доминированием, увеличивающимся с каждым годом [обновлять], ARM является наиболее широко используемым семейством архитектур набора инструкций. [9] [4] [10] [11] [12]
Было несколько поколений дизайна ARM. Оригинальный ARM1 использовал 32-битную внутреннюю структуру, но имел 26-битное адресное пространство , что ограничивало его 64 МБ основной памяти . Это ограничение было снято в серии ARMv3, которая имеет 32-битное адресное пространство, и несколько дополнительных поколений вплоть до ARMv7 оставались 32-битными. Выпущенная в 2011 году архитектура ARMv8-A добавила поддержку 64-битного адресного пространства и 64-битной арифметики с ее новым 32-битным набором инструкций фиксированной длины. [13] Arm Holdings также выпустила серию дополнительных наборов инструкций для различных правил; расширение «Thumb» добавляет как 32-битные, так и 16-битные инструкции для улучшенной плотности кода , в то время как Jazelle добавила инструкции для прямой обработки байт-кода Java . Более поздние изменения включают добавление одновременной многопоточности (SMT) для улучшения производительности или отказоустойчивости . [14]
Первой широко успешной разработкой Acorn Computers был BBC Micro , представленный в декабре 1981 года. Это была относительно обычная машина на базе процессора MOS Technology 6502 , но она работала примерно вдвое быстрее конкурирующих разработок, таких как Apple II, благодаря использованию более быстрой динамической памяти с произвольным доступом (DRAM). Типичная DRAM той эпохи работала на частоте около 2 МГц; Acorn заключила сделку с Hitachi на поставку более быстрых деталей на 4 МГц. [15]
Машины той эпохи обычно разделяли память между процессором и кадровым буфером , что позволяло процессору быстро обновлять содержимое экрана без необходимости выполнять отдельный ввод/вывод (I/O). Поскольку синхронизация видеодисплея была точной, видеооборудование должно было иметь приоритетный доступ к этой памяти. Из-за причуды конструкции 6502 ЦП оставлял память нетронутой в течение половины времени. Таким образом, работая ЦП на частоте 1 МГц, видеосистема могла считывать данные во время этих простоев, занимая общую полосу пропускания ОЗУ в 2 МГц. В BBC Micro использование ОЗУ на частоте 4 МГц позволяло использовать ту же технику, но работать на вдвое большей скорости. Это позволяло превзойти любую подобную машину на рынке. [16]
1981 год был также годом, когда был представлен персональный компьютер IBM . Используя недавно представленный Intel 8088 , 16-битный процессор по сравнению с 8-битным дизайном 6502 , он предлагал более высокую общую производительность. Его появление радикально изменило рынок настольных компьютеров: то, что было в основном рынком хобби и игр, развивающимся в течение предыдущих пяти лет, начало меняться на обязательный бизнес-инструмент, где более ранние 8-битные дизайны просто не могли конкурировать. Даже более новые 32-битные дизайны также появлялись на рынке, такие как Motorola 68000 [17] и National Semiconductor NS32016 [18 ]
Acorn начала думать, как конкурировать на этом рынке, и выпустила новый бумажный проект под названием Acorn Business Computer . Они поставили себе цель создать машину с производительностью в десять раз выше, чем у BBC Micro, но по той же цене. [19] Это превзошло бы по производительности и было бы дешевле ПК. В то же время недавнее появление Apple Lisa принесло концепцию графического пользовательского интерфейса (GUI) более широкой аудитории и предположило, что будущее принадлежит машинам с GUI. [20] Lisa, однако, стоила 9995 долларов, так как она была укомплектована микросхемами поддержки, большим объемом памяти и жестким диском , что было очень дорого в то время. [21]
Затем инженеры начали изучать все доступные конструкции ЦП. Их вывод о существующих 16-битных конструкциях был таков: они были намного дороже и все еще были «немного дерьмовыми», [22] предлагая лишь немного более высокую производительность, чем их конструкция BBC Micro. Они также почти всегда требовали большого количества вспомогательных микросхем для работы даже на этом уровне, что увеличивало стоимость компьютера в целом. Эти системы просто не достигли бы цели проектирования. [22] Они также рассматривали новые 32-битные конструкции, но они стоили еще дороже и имели те же проблемы с вспомогательными микросхемами. [23] По словам Софи Уилсон , все протестированные в то время процессоры работали примерно одинаково, с пропускной способностью около 4 Мбит/с. [24] [a]
Два ключевых события привели Acorn на путь ARM. Одним из них была публикация серии отчетов Калифорнийского университета в Беркли , в которых говорилось, что простая конструкция чипа может, тем не менее, иметь чрезвычайно высокую производительность, намного выше, чем последние 32-битные конструкции на рынке. [25] Вторым событием был визит Стива Фербера и Софи Уилсон в Western Design Center , компанию, которой управляли Билл Менш и его сестра, которая стала логическим преемником команды MOS и предлагала новые версии, такие как WDC 65C02 . Команда Acorn увидела, как старшеклассники создают макеты чипов на машинах Apple II, что предполагало, что это может сделать любой. [26] [27] Напротив, визит в другую проектную фирму, работающую над современным 32-битным ЦП, выявил команду с более чем дюжиной членов, которые уже работали над ревизией H своего проекта, и тем не менее он все еще содержал ошибки. [b] Это закрепило их решение в конце 1983 года начать собственную разработку ЦП, Acorn RISC Machine. [28]
Первоначальные проекты Berkeley RISC были в некотором смысле обучающими системами, не разработанными специально для прямой производительности. К основным концепциям RISC с большим количеством регистров и загрузкой/хранением ARM добавила ряд хорошо принятых проектных заметок 6502. Главной среди них была возможность быстро обслуживать прерывания , что позволяло машинам предлагать разумную производительность ввода/вывода без дополнительного внешнего оборудования. Чтобы предлагать прерывания с такой же производительностью, как у 6502, проект ARM ограничил свое физическое адресное пространство 64 МБ общего адресуемого пространства, требуя 26 бит адреса. Поскольку инструкции имели длину 4 байта (32 бита) и требовали выравнивания по 4-байтовым границам, нижние 2 бита адреса инструкции всегда были равны нулю. Это означало, что счетчику программ (PC) требовалось всего 24 бита, что позволяло хранить его вместе с восьмибитными флагами процессора в одном 32-битном регистре. Это означало, что при получении прерывания все состояние машины можно было сохранить за одну операцию, тогда как если бы PC был полным 32-битным значением, потребовались бы отдельные операции для сохранения PC и флагов состояния. Это решение вдвое сократило накладные расходы на прерывание. [29]
Другим изменением, одним из самых важных с точки зрения практической производительности в реальном мире, стала модификация набора инструкций для использования преимуществ страничного режима DRAM . Недавно представленный страничный режим позволял последующим доступам к памяти работать в два раза быстрее, если они находились примерно в одном и том же месте, или «странице», в чипе DRAM. Проект Беркли не рассматривал страничный режим и обрабатывал всю память одинаково. Проект ARM добавил специальные векторные инструкции доступа к памяти, «S-циклы», которые можно было использовать для заполнения или сохранения нескольких регистров на одной странице с использованием страничного режима. Это удваивало производительность памяти, когда они могли использоваться, и было особенно важно для графической производительности. [30]
В проектах Berkeley RISC использовались окна регистров для сокращения количества сохранений и восстановлений регистров, выполняемых при вызовах процедур ; в проекте ARM это не было реализовано.
Уилсон разработал набор инструкций, написав симуляцию процессора на BBC BASIC , которая работала на BBC Micro со вторым процессором 6502. [31] [32] Это убедило инженеров Acorn, что они на правильном пути. Уилсон обратился к генеральному директору Acorn Герману Хаузеру и запросил дополнительные ресурсы. Хаузер дал свое одобрение и собрал небольшую команду для разработки реального процессора на основе ISA Уилсона. [33] Официальный проект Acorn RISC Machine начался в октябре 1983 года.
Acorn выбрала VLSI Technology в качестве «кремниевого партнёра», поскольку они были источником ПЗУ и заказных чипов для Acorn. Acorn предоставила дизайн, а VLSI обеспечила макет и производство. Первые образцы кремния ARM работали должным образом, когда были впервые получены и протестированы 26 апреля 1985 года. [3] Известные как ARM1, эти версии работали на частоте 6 МГц. [34]
Первое приложение ARM было в качестве второго процессора для BBC Micro, где оно помогло в разработке программного обеспечения для моделирования, чтобы завершить разработку микросхем поддержки (VIDC, IOC, MEMC), и ускорило программное обеспечение CAD, используемое при разработке ARM2. Впоследствии Уилсон переписал BBC BASIC на языке ассемблера ARM . Глубокие знания, полученные при проектировании набора инструкций, позволили сделать код очень плотным, что сделало ARM BBC BASIC чрезвычайно хорошим тестом для любого эмулятора ARM.
Результат моделирования на платах ARM1 привел к появлению в конце 1986 года конструкции ARM2, работающей на частоте 8 МГц, и в начале 1987 года — версии с увеличенной скоростью на частоте от 10 до 12 МГц. [c] Значительным изменением в базовой архитектуре стало добавление умножителя Booth , тогда как ранее умножение приходилось выполнять программно. [36] Кроме того, новый режим Fast Interrupt reQuest, сокращенно FIQ, позволял заменять регистры с 8 по 14 как часть самого прерывания. Это означало, что запросам FIQ не нужно было сохранять свои регистры, что еще больше ускоряло прерывания. [37]
Первым применением ARM2 стал персональный компьютер Acorn Archimedes моделей A305, A310 и A440, выпущенный в 1987 году.
Согласно тесту Dhrystone , ARM2 был примерно в семь раз производительнее типичной системы на базе 68000 с частотой 7 МГц, такой как Amiga или Macintosh SE . Он был вдвое быстрее Intel 80386, работающего на частоте 16 МГц, и примерно такой же скорости, как многопроцессорный суперминикомпьютер VAX-11/784 . Единственными системами, которые превзошли его, были рабочие станции Sun SPARC и MIPS R2000 на базе RISC . [38] Кроме того, поскольку ЦП был разработан для высокоскоростного ввода-вывода, он обходился без многих вспомогательных микросхем, которые можно было увидеть в этих машинах; в частности, у него не было выделенного контроллера прямого доступа к памяти (DMA), который часто встречался на рабочих станциях. Графическая система также была упрощена на основе того же набора базовых предположений о памяти и синхронизации. Результатом стала значительно упрощенная конструкция, предлагающая производительность на уровне дорогих рабочих станций, но по цене, аналогичной современным настольным компьютерам. [38]
ARM2 имел 32-битную шину данных , 26-битное адресное пространство и 27 32-битных регистров , из которых 16 доступны в любой момент времени (включая ПК ). [39] ARM2 имел количество транзисторов всего 30 000, [40] по сравнению с шестилетней старшей моделью Motorola 68000 с примерно 68 000. Большая часть этой простоты была обусловлена отсутствием микрокода , который составляет около четверти или трети транзисторов 68000, и отсутствием (как и у большинства процессоров того времени) кэша . Эта простота позволила ARM2 иметь низкое энергопотребление и более простую тепловую упаковку за счет меньшего количества транзисторов с питанием. Тем не менее, ARM2 предлагал лучшую производительность, чем современный IBM PS/2 Model 50 1987 года , который изначально использовал Intel 80286 , предлагая 1,8 MIPS @ 10 МГц, а позднее, в 1987 году, 2 MIPS PS/2 70 с его Intel 386 DX @ 16 МГц. [41] [42]
Преемник, ARM3, был выпущен с кэшем 4 КБ, что еще больше повысило производительность. [43] Адресная шина была расширена до 32 бит в ARM6, но программный код все еще должен был находиться в пределах первых 64 МБ памяти в 26-битном режиме совместимости из-за зарезервированных бит для флагов состояния. [44]
В конце 1980-х годов Apple Computer и VLSI Technology начали работать с Acorn над новыми версиями ядра ARM. В 1990 году Acorn выделила команду разработчиков в новую компанию под названием Advanced RISC Machines Ltd., [45] [46] [47] которая стала ARM Ltd., когда ее материнская компания Arm Holdings plc вышла на Лондонскую фондовую биржу и Nasdaq в 1998 году. [48] Новая работа Apple–ARM в конечном итоге превратилась в ARM6, впервые выпущенный в начале 1992 года. Apple использовала ARM610 на базе ARM6 в качестве основы для своего Apple Newton PDA.
В 1994 году Acorn использовала ARM610 в качестве основного центрального процессора (ЦП) в своих компьютерах RiscPC . DEC лицензировала архитектуру ARMv4 и выпустила StrongARM . [49] При частоте 233 МГц этот ЦП потреблял всего один ватт (более новые версии потребляли гораздо меньше). Позднее эта работа была передана Intel в рамках урегулирования судебного иска, и Intel воспользовалась возможностью дополнить свою линейку i960 StrongARM. Позже Intel разработала собственную высокопроизводительную реализацию под названием XScale , которую с тех пор продала Marvell . Количество транзисторов ядра ARM оставалось по сути тем же самым во время этих изменений; ARM2 имел 30 000 транзисторов, [50] в то время как ARM6 выросло только до 35 000. [51]
В 2005 году около 98% всех проданных мобильных телефонов использовали по крайней мере один процессор ARM. [52] В 2010 году производители чипов на основе архитектуры ARM сообщили о поставках 6,1 миллиарда процессоров на основе ARM , что составляет 95% смартфонов , 35% цифровых телевизоров и телевизионных приставок и 10% мобильных компьютеров . В 2011 году 32-битная архитектура ARM была наиболее широко используемой архитектурой в мобильных устройствах и самой популярной 32-битной архитектурой во встраиваемых системах. [53] В 2013 году было произведено 10 миллиардов [54] , и «чипы на основе ARM встречаются почти в 60 процентах мобильных устройств в мире». [55]
Основной бизнес Arm Holdings — продажа IP-ядер , которые лицензиаты используют для создания микроконтроллеров (МК), ЦП и систем на кристаллах на основе этих ядер. Оригинальный производитель дизайна объединяет ядро ARM с другими деталями для производства законченного устройства, обычно такого, которое может быть построено на существующих заводах по производству полупроводников (fabs) по низкой цене и при этом обеспечивать существенную производительность. Наиболее успешной реализацией стал ARM7TDMI с сотнями миллионов проданных экземпляров. Atmel был предшественником центра проектирования встраиваемых систем на базе ARM7TDMI.
Архитектуры ARM, используемые в смартфонах, КПК и других мобильных устройствах, варьируются от ARMv5 до ARMv8-A .
В 2009 году некоторые производители представили нетбуки на базе процессоров архитектуры ARM, которые составили прямую конкуренцию нетбукам на базе Intel Atom . [56]
Arm Holdings предлагает различные условия лицензирования, различающиеся по стоимости и результатам. Arm Holdings предоставляет всем лицензиатам интегрируемое описание оборудования ядра ARM, а также полный набор инструментов разработки программного обеспечения ( компилятор , отладчик , комплект для разработки программного обеспечения ), а также право продавать изготовленный кремний, содержащий ЦП ARM.
Пакеты SoC, интегрирующие основные разработки ARM, включают первые три поколения Nvidia Tegra, семейство Quatro от CSR plc, Nova и NovaThor от ST-Ericsson, микроконтроллеры Precision32 от Silicon Labs, продукты OMAP от Texas Instruments, продукты Hummingbird и Exynos от Samsung , A4 , A5 и A5X от Apple , а также i.MX от NXP .
Лицензиаты Fabless , желающие интегрировать ядро ARM в свой собственный дизайн чипа, обычно заинтересованы только в приобретении готового к производству проверенного ядра интеллектуальной собственности полупроводника . Для этих клиентов Arm Holdings предоставляет описание списка соединений вентилей выбранного ядра ARM вместе с абстрактной имитационной моделью и тестовыми программами для помощи в интеграции и проверке дизайна. Более амбициозные клиенты, включая производителей интегрированных устройств (IDM) и операторов литейных заводов, выбирают приобретение IP процессора в синтезируемой форме RTL ( Verilog ). С синтезируемым RTL клиент имеет возможность выполнять оптимизации и расширения на архитектурном уровне. Это позволяет проектировщику достигать экзотических целей проектирования, которые иначе невозможны с немодифицированным списком соединений ( высокая тактовая частота , очень низкое энергопотребление, расширения набора инструкций и т. д.). Хотя Arm Holdings не предоставляет лицензиату права перепродавать саму архитектуру ARM, лицензиаты могут свободно продавать изготовленные продукты, такие как устройства на чипах, оценочные платы и полные системы. Торговые литейные заводы могут быть особым случаем; Им не только разрешено продавать готовые кремниевые чипы, содержащие ядра ARM, но и, как правило, они имеют право перерабатывать ядра ARM для других клиентов.
Arm Holdings оценивает свою интеллектуальную собственность на основе воспринимаемой ценности. Менее производительные ядра ARM обычно имеют более низкую стоимость лицензии, чем более производительные ядра. С точки зрения реализации синтезируемое ядро стоит дороже, чем ядро с жесткими макросами (черный ящик). Усложняя ценовые вопросы, коммерческий литейный завод, имеющий лицензию ARM, такой как Samsung или Fujitsu, может предложить клиентам Fab сниженные лицензионные расходы. В обмен на приобретение ядра ARM через внутренние проектные службы литейного завода клиент может уменьшить или полностью исключить оплату авансового лицензионного сбора ARM.
По сравнению со специализированными литейными заводами полупроводников (такими как TSMC и UMC ) без внутренних служб проектирования, Fujitsu/Samsung взимают в два-три раза больше за изготовленную пластину . [ требуется ссылка ] Для приложений с малыми и средними объемами литейный завод с услугами проектирования предлагает более низкую общую цену (за счет субсидирования лицензионного сбора). Для деталей массового производства в больших объемах долгосрочное снижение затрат, достигаемое за счет более низких цен на пластины, снижает влияние расходов ARM на NRE ( единовременное проектирование ), что делает специализированный литейный завод лучшим выбором.
Компании, которые разработали чипы с ядрами, разработанными Arm, включают дочернюю компанию Amazon.com Annapurna Labs , [57] Analog Devices , Apple , AppliedMicro (теперь: MACOM Technology Solutions [58] ), Atmel , Broadcom , Cavium , Cypress Semiconductor , Freescale Semiconductor (теперь NXP Semiconductors ), Huawei , Intel , [ сомнительно – обсудить ] Maxim Integrated , Nvidia , NXP , Qualcomm , Renesas , Samsung Electronics , ST Microelectronics , Texas Instruments и Xilinx .
В феврале 2016 года ARM объявила о лицензии Built on ARM Cortex Technology, часто сокращаемой до Built on Cortex (BoC). Эта лицензия позволяет компаниям сотрудничать с ARM и вносить изменения в проекты ARM Cortex. Эти изменения дизайна не будут переданы другим компаниям. Эти полузаказные проекты ядер также имеют свободу бренда, например Kryo 280 .
Компании, которые в настоящее время являются лицензиатами Built on ARM Cortex Technology, включают Qualcomm . [59]
Компании также могут получить архитектурную лицензию ARM для проектирования собственных ядер ЦП с использованием наборов инструкций ARM. Эти ядра должны полностью соответствовать архитектуре ARM. К компаниям, которые разработали ядра, реализующие архитектуру ARM, относятся Apple, AppliedMicro (теперь: Ampere Computing ), Broadcom, Cavium (теперь: Marvell), Digital Equipment Corporation , Intel, Nvidia, Qualcomm, Samsung Electronics, Fujitsu и NUVIA Inc. (приобретена Qualcomm в 2021 году).
16 июля 2019 года ARM анонсировала ARM Flexible Access. ARM Flexible Access предоставляет неограниченный доступ к включенной интеллектуальной собственности ARM (ИС) для разработки. Лицензионные сборы за продукт требуются, как только клиент достигает литейной сборки или прототипирования. [60] [61]
75% последних IP ARM за последние два года включены в ARM Flexible Access. По состоянию на октябрь 2019 г.:
Arm предоставляет список поставщиков, которые внедряют ядра ARM в свои разработки (стандартные продукты специального назначения (ASSP), микропроцессоры и микроконтроллеры). [102]
Ядра ARM используются в ряде продуктов, в частности, в КПК и смартфонах . Некоторые примеры вычислений — это первое поколение устройств Surface , Surface 2 и Pocket PC от Microsoft (после 2002 года ), планшетные компьютеры iPad от Apple и Eee Pad Transformer от Asus , а также несколько ноутбуков Chromebook . Другие включают смартфоны iPhone и портативные медиаплееры iPod от Apple , цифровые камеры Canon PowerShot , гибрид Nintendo Switch , процессор безопасности Wii и портативные игровые консоли 3DS , а также пошаговые навигационные системы TomTom .
В 2005 году компания Arm приняла участие в разработке компьютера SpiNNaker в Манчестерском университете , который использовал ядра ARM для моделирования человеческого мозга . [103]
Чипы ARM также используются в Raspberry Pi , BeagleBoard , BeagleBone , PandaBoard и других одноплатных компьютерах , поскольку они очень маленькие, недорогие и потребляют очень мало энергии.
32-битная архитектура ARM ( ARM32 ), такая как ARMv7-A (реализующая AArch32; см. раздел Armv8-A для получения дополнительной информации), была наиболее широко используемой архитектурой в мобильных устройствах по состоянию на 2011 год [обновлять]. [53]
Начиная с 1995 года, различные версии ARM Architecture Reference Manual (см. § Внешние ссылки) были основным источником документации по архитектуре процессора ARM и набору инструкций, отличая интерфейсы, которые должны поддерживать все процессоры ARM (например, семантику инструкций), от деталей реализации, которые могут различаться. Архитектура развивалась с течением времени, и седьмая версия архитектуры, ARMv7, определяет три «профиля» архитектуры:
Хотя профили архитектуры были впервые определены для ARMv7, впоследствии ARM определила архитектуру ARMv6-M (используемую Cortex M0 / M0+ / M1 ) как подмножество профиля ARMv7-M с меньшим количеством инструкций.
За исключением M-профиля, 32-битная архитектура ARM определяет несколько режимов ЦП в зависимости от реализованных особенностей архитектуры. В любой момент времени ЦП может находиться только в одном режиме, но он может переключать режимы из-за внешних событий (прерываний) или программно. [104]
Первоначальная (и последующая) реализация ARM была реализована аппаратно без микрокода , как и гораздо более простой 8-битный процессор 6502 , использовавшийся в предыдущих микрокомпьютерах Acorn.
32-битная архитектура ARM (и в основном 64-битная архитектура) включает в себя следующие функции RISC:
Чтобы компенсировать более простую конструкцию по сравнению с такими процессорами, как Intel 80286 и Motorola 68020 , были использованы некоторые дополнительные конструктивные особенности:
ARM включает в себя целочисленные арифметические операции для сложения, вычитания и умножения; некоторые версии архитектуры также поддерживают операции деления.
ARM поддерживает умножение 32 бит × 32 бит с 32-битным или 64-битным результатом, хотя ядра Cortex-M0 / M0+ / M1 не поддерживают 64-битные результаты. [109] Некоторые ядра ARM также поддерживают умножение 16 бит × 16 бит и 32 бит × 16 бит.
Инструкции деления включены только в следующие архитектуры ARM:
Регистры R0–R7 одинаковы во всех режимах ЦП; они никогда не объединяются в банки.
Регистры R8–R12 одинаковы во всех режимах ЦП, кроме режима FIQ. Режим FIQ имеет свои собственные отдельные регистры R8–R12.
R13 и R14 объединены во все привилегированные режимы ЦП, кроме системного режима. То есть, каждый режим, в который можно войти из-за исключения, имеет свои собственные R13 и R14. Эти регистры обычно содержат указатель стека и адрес возврата из вызовов функций соответственно.
Псевдонимы:
Регистр текущего состояния программы (CPSR) имеет следующие 32 бита. [112]
Почти каждая инструкция ARM имеет функцию условного выполнения, называемую предикацией , которая реализована с помощью 4-битного селектора кода условия (предиката). Чтобы обеспечить безусловное выполнение, один из 4-битных кодов заставляет инструкцию всегда выполняться. Большинство других архитектур ЦП имеют только коды условий в инструкциях ветвления. [113]
Хотя предикат занимает четыре из 32 бит в коде инструкции и, таким образом, значительно сокращает биты кодирования, доступные для смещений в инструкциях доступа к памяти, он избегает инструкций ветвления при генерации кода для небольших if
операторов . Помимо устранения самих инструкций ветвления, это сохраняет конвейер выборки/декодирования/выполнения ценой всего одного цикла на пропущенную инструкцию.
Алгоритм, который дает хороший пример условного выполнения, — это основанный на вычитании алгоритм Евклида для вычисления наибольшего общего делителя . На языке программирования C алгоритм можно записать так:
int gcd ( int a , int b ) { while ( a != b ) // Мы входим в цикл, когда a < b или a > b, но не когда a == b if ( a > b ) // Когда a > b мы делаем это a -= b ; else // Когда a < b мы делаем это (не нужно "if (a < b)", так как a != b проверяется в условии while) b -= a ; return a ; }
Тот же алгоритм можно переписать ближе к целевым инструкциям ARM следующим образом:
цикл : // Сравнение a и b GT = a > b ; LT = a < b ; NE = a != b ; // Выполнять операции на основе результатов флага if ( GT ) a -= b ; // Вычитать *только*, если больше if ( LT ) b -= a ; // Вычитать *только*, если меньше if ( NE ) goto loop ; // Выполнять цикл *только*, если сравниваемые значения не равны return a ;
и закодирован на языке ассемблера как:
; присвоить a регистру r0, b r1 цикл: CMP r0 , r1 ; установить условие "NE" если (a ≠ b), ; "GT" если (a > b), ; или "LT" если (a < b) SUBGT r0 , r0 , r1 ; если "GT" (больше), то a = a − b SUBLT r1 , r1 , r0 ; если "LT" (меньше), то b = b − a BNE цикл ; если "NE" (не равно), то цикл B lr ; возврат
что позволяет избежать ветвей вокруг предложений then
и else
. Если r0
и r1
равны, то ни одна из SUB
инструкций не будет выполнена, что устраняет необходимость в условном переходе для реализации проверки while
в верхней части цикла, например, если бы SUBLE
использовалось (меньше или равно).
Одним из способов, с помощью которых код Thumb обеспечивает более плотное кодирование, является удаление четырехбитного селектора из инструкций, не относящихся к переходу.
Еще одной особенностью набора инструкций является возможность сворачивать сдвиги и повороты в инструкции обработки данных (арифметические, логические и перемещения регистр-регистр), так что, например, оператор на языке C :
а += ( j << 2 );
можно представить как однословную инструкцию, состоящую из одного цикла: [114]
ДОБАВИТЬ Ra , Ra , Rj , LSL #2
В результате типичная программа ARM оказывается более плотной, чем ожидалось, и требует меньшего количества обращений к памяти; таким образом, конвейер используется более эффективно.
Процессор ARM также обладает функциями, редко встречающимися в других архитектурах RISC, такими как адресация относительно PC (действительно, в 32-разрядном [1] ARM PC является одним из 16 его регистров) и режимами пре- и пост-инкрементной адресации.
Набор инструкций ARM со временем увеличился. Например, некоторые ранние процессоры ARM (до ARM7TDMI) не имеют инструкции для хранения двухбайтовой величины.
ARM7 и более ранние реализации имеют трехступенчатый конвейер ; этапами являются выборка, декодирование и выполнение. Высокопроизводительные конструкции, такие как ARM9, имеют более глубокие конвейеры: Cortex-A8 имеет тринадцать этапов. Дополнительные изменения в реализации для более высокой производительности включают более быстрый сумматор и более обширную логику предсказания ветвлений . Разница между ядрами ARM7DI и ARM7DMI, например, заключалась в улучшенном умножителе; отсюда и добавленная «M».
Архитектура ARM (до Armv8) обеспечивает неинвазивный способ расширения набора инструкций с помощью «сопроцессоров», к которым можно обращаться с помощью инструкций MCR, MRC, MRRC, MCRR и подобных. Пространство сопроцессора логически разделено на 16 сопроцессоров с номерами от 0 до 15, причем сопроцессор 15 (cp15) зарезервирован для некоторых типичных функций управления, таких как управление кэшами и работой MMU на процессорах, которые их имеют.
В машинах на базе ARM периферийные устройства обычно подключаются к процессору путем отображения их физических регистров в пространство памяти ARM, в пространство сопроцессора или путем подключения к другому устройству (шине), которое в свою очередь подключается к процессору. Доступ сопроцессора имеет меньшую задержку, поэтому некоторые периферийные устройства, например, контроллер прерываний XScale, доступны обоими способами: через память и через сопроцессоры.
В других случаях разработчики чипов интегрируют только аппаратное обеспечение, используя механизм сопроцессора. Например, процессор обработки изображений может быть небольшим ядром ARM7TDMI, объединенным с сопроцессором, который имеет специализированные операции для поддержки определенного набора примитивов транскодирования HDTV.
Все современные процессоры ARM включают в себя аппаратные средства отладки, позволяющие программным отладчикам выполнять такие операции, как остановка, пошаговое выполнение и установка точек останова кода, начиная со сброса. Эти средства построены с использованием поддержки JTAG , хотя некоторые новые ядра опционально поддерживают собственный двухпроводной протокол ARM "SWD". В ядрах ARM7TDMI "D" представлял поддержку отладки JTAG, а "I" представлял наличие отладочного модуля "EmbeddedICE". Для поколений ядер ARM7 и ARM9 EmbeddedICE через JTAG был фактическим стандартом отладки, хотя и не гарантированным архитектурно.
Архитектура ARMv7 определяет основные отладочные возможности на архитектурном уровне. Они включают точки останова, точки наблюдения и выполнение инструкций в «режиме отладки»; аналогичные возможности были также доступны в EmbeddedICE. Поддерживаются отладка в режимах «halt mode» и «monitor». Фактический транспортный механизм, используемый для доступа к отладочным возможностям, не указан архитектурно, но реализации обычно включают поддержку JTAG.
Существует отдельная отладочная архитектура ARM «CoreSight», которая архитектурно не требуется процессорам ARMv7.
Порт отладки (DAP) — это реализация интерфейса отладки ARM. [115] Существует две различные поддерживаемые реализации: порт отладки Serial Wire JTAG (SWJ-DP) и порт отладки Serial Wire (SW-DP). [116] CMSIS-DAP — это стандартный интерфейс, описывающий, как различное отладочное программное обеспечение на хост-компьютере может взаимодействовать через USB с прошивкой, работающей на аппаратном отладчике, которая, в свою очередь, взаимодействует через SWD или JTAG с процессором ARM Cortex с поддержкой CoreSight. [117] [118] [119]
Для улучшения архитектуры ARM для цифровой обработки сигналов и мультимедийных приложений в набор инструкций были добавлены инструкции DSP. [120] Они обозначены буквой «E» в названии архитектур ARMv5TE и ARMv5TEJ. Варианты E также подразумевают T, D, M и I.
Новые инструкции распространены в архитектурах цифровых сигнальных процессоров (DSP). Они включают вариации знакового умножения-накопления , насыщенного сложения и вычитания и подсчета ведущих нулей .
Впервые представленное в 1999 году, это расширение набора основных инструкций контрастировало с более ранним сопроцессором DSP ARM, известным как Piccolo, который использовал отдельный, несовместимый набор инструкций, выполнение которого включало отдельный счетчик программ. [121] Инструкции Piccolo использовали отдельный файл регистров из шестнадцати 32-битных регистров, причем некоторые инструкции объединяли регистры для использования в качестве 48-битных аккумуляторов, а другие инструкции адресовали 16-битные полурегистры. Некоторые инструкции могли работать с двумя такими 16-битными значениями параллельно. Связь с файлом регистров Piccolo включала загрузку в Piccolo и сохранение из инструкций сопроцессора Piccolo через два буфера из восьми 32-битных записей. Описанный как напоминающий другие подходы, в частности SH-DSP от Hitachi и 68356 от Motorola, Piccolo не использовал выделенную локальную память и полагался на полосу пропускания ядра ARM для извлечения операндов DSP, влияя на параллельную производительность. [122] Отличительный набор инструкций Piccolo также оказался не «хорошей целью компилятора». [121]
Представленный в архитектуре ARMv6, он был предшественником Advanced SIMD, также называемого Neon. [123]
Jazelle DBX (Direct Bytecode eXecution) — это метод, который позволяет выполнять байт-код Java непосредственно в архитектуре ARM в качестве третьего состояния выполнения (и набора инструкций) наряду с существующими ARM и Thumb-mode. Поддержка этого состояния обозначена буквой «J» в архитектуре ARMv5TEJ и в названиях ядер ARM9EJ-S и ARM7EJ-S. Поддержка этого состояния требуется, начиная с ARMv6 (за исключением профиля ARMv7-M), хотя более новые ядра включают только тривиальную реализацию, которая не обеспечивает аппаратного ускорения.
Для улучшения плотности компилируемого кода процессоры, начиная с ARM7TDMI (выпущенного в 1994 году [124] ), имеют сжатый набор инструкций Thumb , который имеет свое собственное состояние. («T» в «TDMI» указывает на функцию Thumb.) В этом состоянии процессор выполняет набор инструкций Thumb, компактное 16-битное кодирование для подмножества набора инструкций ARM. [125] Большинство инструкций Thumb напрямую отображаются в обычные инструкции ARM. Экономия пространства достигается за счет того, что некоторые операнды инструкций неявны и ограничивают количество возможностей по сравнению с инструкциями ARM, выполняемыми в состоянии набора инструкций ARM.
В Thumb 16-битные опкоды имеют меньшую функциональность. Например, условными могут быть только переходы, и многие опкоды ограничены доступом только к половине всех регистров общего назначения ЦП. Более короткие опкоды обеспечивают улучшенную плотность кода в целом, хотя некоторые операции требуют дополнительных инструкций. В ситуациях, когда порт памяти или ширина шины ограничены менее чем 32 битами, более короткие опкоды Thumb позволяют повысить производительность по сравнению с 32-битным кодом ARM, поскольку может потребоваться загрузить в процессор меньше программного кода по ограниченной пропускной способности памяти.
В отличие от архитектур процессоров с инструкциями переменной длины (16 или 32 бита), таких как Cray-1 и Hitachi SuperH , наборы инструкций ARM и Thumb существуют независимо друг от друга. Встроенное оборудование, такое как Game Boy Advance , обычно имеет небольшой объем оперативной памяти, доступный с полным 32-битным каналом данных; доступ к большинству осуществляется через 16-битный или более узкий вторичный канал данных. В этой ситуации обычно имеет смысл скомпилировать код Thumb и вручную оптимизировать несколько наиболее ресурсоемких разделов с использованием полных 32-битных инструкций ARM, помещая эти более широкие инструкции в 32-битную шинную доступную память.
Первым процессором с декодером инструкций Thumb был ARM7TDMI. Все процессоры, поддерживающие 32-битные наборы инструкций, начиная с ARM9 и включая XScale, включали декодер инструкций Thumb. Он включает инструкции, заимствованные из Hitachi SuperH (1992), лицензированного ARM. [126] Самые маленькие семейства процессоров ARM (Cortex M0 и M1) реализуют только 16-битный набор инструкций Thumb для максимальной производительности в самых дешевых приложениях. Процессоры ARM, не поддерживающие 32-битную адресацию, также не поддерживают Thumb.
Технология Thumb-2 была представлена в ядре ARM1156 , анонсированном в 2003 году. Thumb-2 расширяет ограниченный 16-битный набор инструкций Thumb дополнительными 32-битными инструкциями, чтобы дать набору инструкций большую широту, таким образом создавая набор инструкций переменной длины. Заявленной целью Thumb-2 было достижение плотности кода, аналогичной Thumb, с производительностью, аналогичной набору инструкций ARM на 32-битной памяти.
Thumb-2 расширяет набор инструкций Thumb с помощью манипуляции битовыми полями, ветвления таблиц и условного выполнения. В то же время набор инструкций ARM был расширен для сохранения эквивалентной функциональности в обоих наборах инструкций. Новый «унифицированный язык ассемблера» (UAL) поддерживает генерацию инструкций Thumb или ARM из одного и того же исходного кода; версии Thumb, видимые на процессорах ARMv7, по сути, так же эффективны, как код ARM (включая возможность писать обработчики прерываний). Это требует некоторой осторожности и использования новой инструкции «IT» (if-then), которая позволяет выполнять до четырех последовательных инструкций на основе проверенного условия или его обратного. При компиляции в код ARM это игнорируется, но при компиляции в Thumb генерируется фактическая инструкция. Например:
; if (r0 == r1) CMP r0 , r1 ITE EQ ; ARM: нет кода ... Thumb: инструкция IT ; then r0 = r2; MOVEQ r0 , r2 ; ARM: условная; Thumb: условие через ITE 'T' (then) ; else r0 = r3; MOVNE r0 , r3 ; ARM: условная; Thumb: условие через ITE 'E' (else) ; напомним, что инструкция Thumb MOV не имеет битов для кодирования "EQ" или "NE".
Все чипы ARMv7 поддерживают набор инструкций Thumb. Все чипы серии Cortex-A, поддерживающие ARMv7, все серии Cortex-R и все серии ARM11 поддерживают как «состояние набора инструкций ARM», так и «состояние набора инструкций Thumb», тогда как чипы серии Cortex -M поддерживают только набор инструкций Thumb. [127] [128] [129]
ThumbEE (ошибочно называемый Thumb-2EE в некоторой документации ARM), который был продан как Jazelle RCT [130] (Runtime Compilation Target), был анонсирован в 2005 году и устарел в 2011 году. Впервые он появился в процессоре Cortex-A8 . ThumbEE — это четвертое состояние набора инструкций, вносящее небольшие изменения в расширенный набор инструкций Thumb-2. Эти изменения делают набор инструкций особенно подходящим для кода, генерируемого во время выполнения (например, путем JIT-компиляции ) в управляемых средах выполнения . ThumbEE — это цель для таких языков, как Java , C# , Perl и Python , и позволяет JIT-компиляторам выводить меньший скомпилированный код без снижения производительности. [ необходима цитата ]
Новые функции, предоставляемые ThumbEE, включают в себя автоматические проверки нулевого указателя при каждой инструкции загрузки и сохранения, инструкцию для выполнения проверки границ массива и специальные инструкции, которые вызывают обработчик. Кроме того, поскольку он использует технологию Thumb-2, ThumbEE предоставляет доступ к регистрам r8–r15 (где хранится состояние виртуальной машины Java Jazelle/DBX). [131] Обработчики — это небольшие разделы часто вызываемого кода, обычно используемые для реализации языков высокого уровня, таких как выделение памяти для нового объекта. Эти изменения происходят из-за перепрофилирования нескольких кодов операций и знания того, что ядро находится в новом состоянии ThumbEE.
23 ноября 2011 года Arm прекратил любое использование набора инструкций ThumbEE [132], а Armv8 прекратил поддержку ThumbEE.
Технология VFP (Vector Floating Point) — это расширение сопроцессора с плавающей точкой (FPU) для архитектуры ARM [133] (реализованное по-другому в Armv8 — сопроцессоры там не определены). Она обеспечивает недорогие вычисления с плавающей точкой одинарной и двойной точности , полностью соответствующие стандарту ANSI/IEEE Std 754-1985 для двоичной арифметики с плавающей точкой . VFP обеспечивает вычисления с плавающей точкой, подходящие для широкого спектра приложений, таких как КПК, смартфоны, сжатие и декомпрессия голоса, трехмерная графика и цифровое аудио, принтеры, телевизионные приставки и автомобильные приложения. Архитектура VFP была предназначена для поддержки выполнения коротких инструкций «векторного режима», но они работали с каждым векторным элементом последовательно и, таким образом, не обеспечивали производительности настоящего векторного параллелизма с одной инструкцией и несколькими данными (SIMD). Поэтому этот векторный режим был удален вскоре после его введения [134], чтобы быть замененным гораздо более мощным Advanced SIMD, также называемым Neon.
Некоторые устройства, такие как ARM Cortex-A8, имеют урезанный модуль VFPLite вместо полного модуля VFP и требуют примерно в десять раз больше тактовых циклов на операцию с плавающей точкой. [135] Архитектура до Armv8 реализовала плавающую точку/SIMD с интерфейсом сопроцессора. Другие блоки с плавающей точкой и/или SIMD, обнаруженные в процессорах на базе ARM, использующих интерфейс сопроцессора, включают FPA, FPE, iwMMXt , некоторые из которых были реализованы в программном обеспечении с помощью захвата, но могли быть реализованы в оборудовании. Они предоставляют некоторые из тех же функций, что и VFP, но несовместимы с ним по коду операции . FPA10 также обеспечивает расширенную точность , но реализует правильное округление (требуемое IEEE 754) только с одинарной точностью. [136]
В Debian Linux и производных, таких как Ubuntu и Linux Mint , armhf ( ARM hard float ) относится к архитектуре ARMv7, включая дополнительное аппаратное расширение с плавающей точкой VFP3-D16 (и Thumb-2) выше. Программные пакеты и инструменты кросс-компиляции используют суффиксы armhf и arm/armel для различения. [138]
Расширение Advanced SIMD (также известное как Neon или «MPE» Media Processing Engine) представляет собой комбинированный 64- и 128-битный набор инструкций SIMD, который обеспечивает стандартизированное ускорение для приложений обработки мультимедиа и сигналов. Neon включен во все устройства Cortex-A8, но является опциональным в устройствах Cortex-A9. [139] Neon может выполнять декодирование звука MP3 на процессорах, работающих на частоте 10 МГц, и может запускать адаптивный многоскоростной речевой кодек GSM (AMR) на частоте 13 МГц. Он имеет полный набор инструкций, отдельные файлы регистров и независимое аппаратное обеспечение для выполнения. [140] Neon поддерживает 8-, 16-, 32- и 64-битные целочисленные данные и данные с плавающей точкой одинарной точности (32-битные) и операции SIMD для обработки аудио и видео, а также обработки графики и игр. В Neon SIMD поддерживает до 16 операций одновременно. Аппаратное обеспечение Neon использует те же регистры с плавающей точкой, что и в VFP. Такие устройства, как ARM Cortex-A8 и Cortex-A9, поддерживают 128-битные векторы, но будут выполнять 64 бита за раз, [135] тогда как более новые устройства Cortex-A15 могут выполнять 128 бит за раз. [141] [142]
Странность Neon в устройствах Armv7 заключается в том, что он сбрасывает все субнормальные числа в ноль, и в результате компилятор GCC не будет использовать его, если не -funsafe-math-optimizations
включен , который позволяет терять денормальные числа. «Улучшенный» Neon определен, поскольку Armv8 не имеет этой странности, но с GCC 8.2 тот же флаг по-прежнему требуется для включения инструкций Neon. [143] С другой стороны, GCC считает Neon безопасным на AArch64 для Armv8.
ProjectNe10 — первый проект ARM с открытым исходным кодом (с момента его создания; в то время как они приобрели более старый проект, теперь называемый Mbed TLS ). Библиотека Ne10 — это набор общих полезных функций, написанных как на Neon, так и на C (для совместимости). Библиотека была создана, чтобы позволить разработчикам использовать оптимизации Neon без изучения Neon, но она также служит набором высокооптимизированных примеров внутреннего и ассемблерного кода Neon для общих процедур DSP, арифметики и обработки изображений. Исходный код доступен на GitHub. [144]
Helium — это расширение M-Profile Vector Extension (MVE). Оно добавляет более 150 скалярных и векторных инструкций. [145]
Security Extensions, продаваемые как TrustZone Technology, находятся в ARMv6KZ и более поздних архитектурах профилей приложений. Они предоставляют недорогую альтернативу добавлению еще одного выделенного ядра безопасности в SoC, предоставляя два виртуальных процессора, поддерживаемых аппаратным контролем доступа. Это позволяет ядру приложения переключаться между двумя состояниями, называемыми мирами (чтобы уменьшить путаницу с другими названиями доменов возможностей), чтобы предотвратить утечку информации из более доверенного мира в менее доверенный мир. Этот переключатель мира, как правило, ортогонален всем другим возможностям процессора, поэтому каждый мир может работать независимо от другого, используя одно и то же ядро. Затем память и периферийные устройства узнают об операционном мире ядра и могут использовать это для обеспечения контроля доступа к секретам и коду на устройстве. [146]
Обычно, богатая операционная система запускается в менее доверенном мире, с меньшим специализированным кодом безопасности в более доверенном мире, стремясь уменьшить поверхность атаки . Типичные приложения включают функциональность DRM для контроля использования мультимедиа на устройствах на базе ARM, [147] и предотвращения любого несанкционированного использования устройства.
На практике, поскольку конкретные детали реализации фирменных реализаций TrustZone не были публично раскрыты для обзора, неясно, какой уровень гарантии предоставляется для данной модели угроз , но они не защищены от атак. [148] [149]
Открытая виртуализация [150] — это реализация архитектуры доверенного мира с открытым исходным кодом для TrustZone.
AMD лицензировала и включила технологию TrustZone в свою технологию Secure Processor Technology . [151] APU AMD включают процессор Cortex-A5 для безопасной обработки, который включен в некоторые, но не во все продукты. [152] [153] [154] Фактически, ядро Cortex-A5 TrustZone было включено в более ранние продукты AMD, но не было включено из-за ограничений по времени. [153]
Samsung Knox использует TrustZone для таких целей, как обнаружение изменений в ядре, хранение сертификатов и подтверждение ключей. [155]
Расширение безопасности, продаваемое как TrustZone для технологии Armv8-M, было представлено в архитектуре Armv8-M. Хотя оно содержит схожие концепции с TrustZone для Armv8-A, оно имеет другую архитектурную конструкцию, поскольку переключение между мирами выполняется с использованием инструкций ветвления вместо использования исключений. Оно также поддерживает безопасную чередующуюся обработку прерываний из любого мира независимо от текущего состояния безопасности. Вместе эти функции обеспечивают вызовы с низкой задержкой в защищенный мир и отзывчивую обработку прерываний. ARM предоставляет эталонный стек кода защищенного мира в форме Trusted Firmware для M и PSA Certified .
Начиная с ARMv6, архитектура ARM поддерживает защиту страниц от выполнения , которая обозначается как XN (eXecute Never) . [156]
Расширение большого физического адреса (LPAE), которое увеличивает размер физического адреса с 32 до 40 бит, было добавлено в архитектуру Armv7-A в 2011 году. [157]
Размер физического адреса может быть даже больше в процессорах на базе 64-битной архитектуры (Armv8-A). Например, в Cortex-A75 и Cortex-A65AE он составляет 44 бита. [158]
Архитектуры Armv8-R и Armv8-M , анонсированные после архитектуры Armv8-A, разделяют некоторые функции с Armv8-A. Однако Armv8-M не включает никаких 64-битных инструкций AArch64, а Armv8-R изначально не включал никаких инструкций AArch64; эти инструкции были добавлены в Armv8-R позже.
Архитектура Armv8.1-M, анонсированная в феврале 2019 года, является усовершенствованием архитектуры Armv8-M. Она приносит новые функции, в том числе:
Анонсированный в октябре 2011 года [13] Armv8-A (часто называемый ARMv8, хотя также доступен Armv8-R) представляет собой фундаментальное изменение архитектуры ARM. Он поддерживает два состояния выполнения : 64-битное состояние с именем AArch64 и 32-битное состояние с именем AArch32 . В состоянии AArch64 поддерживается новый 64-битный набор инструкций A64 ; в состоянии AArch32 поддерживаются два набора инструкций: исходный 32-битный набор инструкций, названный A32 , и 32-битный набор инструкций Thumb-2, названный T32 . AArch32 обеспечивает совместимость пользовательского пространства с Armv7-A. Состояние процессора может изменяться при изменении уровня исключения; это позволяет запускать 32-битные приложения в состоянии AArch32 под управлением 64-битной ОС, ядро которой выполняется в состоянии AArch64, и позволяет 32-битной ОС работать в состоянии AArch32 под управлением 64-битного гипервизора, работающего в состоянии AArch64. [1] ARM анонсировала свои ядра Cortex-A53 и Cortex-A57 30 октября 2012 года. [73] Apple была первой, кто выпустил ядро, совместимое с Armv8-A, в потребительском продукте ( Apple A7 в iPhone 5S ). AppliedMicro , использующая FPGA , была первой, кто продемонстрировал Armv8-A. [159] Первая система на кристалле Armv8-A от Samsung — это Exynos 5433, используемая в Galaxy Note 4 , которая имеет два кластера по четыре ядра Cortex-A57 и Cortex-A53 в конфигурации big.LITTLE ; но он будет работать только в режиме AArch32. [160]
Для AArch32 и AArch64 Armv8-A делает VFPv3/v4 и расширенный SIMD (Neon) стандартом. Он также добавляет криптографические инструкции, поддерживающие AES , SHA-1 / SHA-256 и арифметику конечных полей . [161] AArch64 был представлен в Armv8-A и его последующей редакции. AArch64 не включен в 32-битные архитектуры Armv8-R и Armv8-M.
Процессор ARMv8-A может поддерживать один или оба из AArch32 и AArch64; он может поддерживать AArch32 и AArch64 на более низких уровнях исключений и только AArch64 на более высоких уровнях исключений. [162] Например, ARM Cortex-A32 поддерживает только AArch32, [163] ARM Cortex-A34 поддерживает только AArch64, [164] а ARM Cortex-A72 поддерживает как AArch64, так и AArch32. [165] Процессор ARMv9-A должен поддерживать AArch64 на всех уровнях исключений и может поддерживать AArch32 на уровне EL0. [162]
Опциональная поддержка AArch64 была добавлена в профиль Armv8-R, причем первым ядром ARM, реализующим ее, стало Cortex-R82. [166] Он добавляет набор инструкций A64.
Анонсированная в марте 2021 года обновленная архитектура делает акцент на безопасном выполнении и разделении . [167] [168]
Arm SystemReady, ранее называвшаяся Arm ServerReady, — это программа сертификации, которая помогает внедрять стандартные операционные системы и гипервизоры в системы на базе Arm, от серверов центров обработки данных до промышленных периферийных устройств и устройств IoT. Ключевыми строительными блоками программы являются спецификации минимальных требований к оборудованию и прошивке, на которые могут полагаться операционные системы и гипервизоры. Эти спецификации следующие: [169]
Эти спецификации совместно разработаны Arm и ее партнерами из Консультативного комитета по архитектуре систем (SystemArchAC).
Architecture Compliance Suite (ACS) — это инструменты тестирования, которые помогают проверить соответствие этим спецификациям. Спецификация требований Arm SystemReady документирует требования сертификаций. [174]
Эта программа была представлена Arm в 2020 году на первом мероприятии DevSummit . Ее предшественник Arm ServerReady был представлен в 2018 году на мероприятии Arm TechCon. В настоящее время эта программа включает четыре группы:
PSA Certified , ранее называвшаяся Platform Security Architecture, представляет собой архитектурно-независимую структуру безопасности и схему оценки. Она предназначена для защиты устройств Интернета вещей (IoT), построенных на процессорах system-on-a-chip (SoC). [175] Она была введена для повышения безопасности в случаях, когда полностью доверенная среда выполнения слишком велика или сложна. [176]
Архитектура была представлена Arm в 2017 году на ежегодном мероприятии TechCon . [176] [177] Хотя схема не зависит от архитектуры, она была впервые реализована на ядрах процессора Arm Cortex-M, предназначенных для использования в микроконтроллерах. Сертификация PSA включает в себя свободно доступные модели угроз и анализы безопасности, которые демонстрируют процесс принятия решения о функциях безопасности в распространенных продуктах IoT. [178] Она также предоставляет свободно загружаемые пакеты интерфейса прикладного программирования (API), архитектурные спецификации, реализации прошивки с открытым исходным кодом и соответствующие тестовые наборы. [179]
После разработки структуры безопасности архитектуры в 2017 году схема обеспечения PSA Certified была запущена два года спустя на Embedded World в 2019 году. [180] PSA Certified предлагает многоуровневую схему оценки безопасности для поставщиков микросхем, поставщиков ОС и производителей устройств IoT. [181] Презентация Embedded World познакомила поставщиков микросхем с сертификацией уровня 1. В то же время был представлен проект защиты уровня 2. [182] Сертификация уровня 2 стала применимым стандартом в феврале 2020 года. [183]
Сертификация была создана PSA Joint Stakeholders для обеспечения подхода безопасности по проектированию для разнообразного набора продуктов IoT. Спецификации, сертифицированные PSA, не зависят от реализации и архитектуры, поэтому их можно применять к любому чипу, программному обеспечению или устройству. [184] [182] Сертификация также устраняет фрагментацию отрасли для производителей и разработчиков продуктов IoT . [185]
Первый 32-битный персональный компьютер на базе ARM, Acorn Archimedes , изначально предназначался для работы амбициозной операционной системы под названием ARX . Машины поставлялись с RISC OS , которая также использовалась в более поздних системах на базе ARM от Acorn и других поставщиков. Некоторые ранние машины Acorn также могли работать с портом Unix под названием RISC iX . (Ни то, ни другое не следует путать с RISC/os , современным вариантом Unix для архитектуры MIPS.)
32-битная архитектура ARM поддерживается большим количеством встраиваемых и работающих в реальном времени операционных систем , включая:
По состоянию на март 2024 года 32-разрядная архитектура ARM была основной аппаратной средой для большинства операционных систем мобильных устройств, таких как следующие, но многие из этих платформ, такие как Android и Apple iOS, перешли на 64-разрядную архитектуру ARM:
Ранее, но сейчас прекращено:
32-битная архитектура ARM поддерживается RISC OS и несколькими Unix-подобными операционными системами, включая:
Приложения Windows, перекомпилированные для ARM и связанные с Winelib из проекта Wine , могут работать на 32- или 64-разрядных ARM в Linux, FreeBSD или других совместимых операционных системах. [214] [215] Двоичные файлы x86, например, если они не были специально скомпилированы для ARM, были продемонстрированы на ARM с использованием QEMU с Wine (на Linux и других платформах), [ необходима ссылка ] , но они не работают на полной скорости или с такими же возможностями, как с Winelib.
совокупное развертывание 100 миллиардов чипов, половина из которых была поставлена за последние четыре года. [..] почему не триллион или больше? Это наша цель — развертывание триллиона подключенных устройств в течение следующих двух десятилетий.
ARM начиналась как филиал Acorn Computer в Кембридже, Англия, с образованием совместного предприятия между Acorn, Apple и VLSI Technology. Команда из двенадцати сотрудников разработала проект первого микропроцессора ARM между 1983 и 1985 годами.
инвестировала около 3 миллионов долларов (примерно 1,5 миллиона фунтов стерлингов) за 30% акций компании, получившей название Advanced Risc Machines Ltd. (ARM) [...]
ARMv8 SVE (Scalable Vector Extension), использующий 512-битную плавающую точку.
может выполнять два потока параллельно в каждом цикле. Каждый поток может находиться на разных уровнях исключений и запускать разные операционные системы.
В отношении IEEE 754-1985 FPA достигает соответствия в арифметике с одинарной точностью [...] Иногда умножения с двойной и расширенной точностью могут выполняться с ошибкой в 1 или 2 единицы в младшем разряде мантиссы.
Биты APX и XN (execute never) были добавлены в VMSAv6 [Virtual Memory System Architecture]
новая версия Windows 10 является первой 64-битной операционной системой ARM от Microsoft. Она будет запускать приложения x86 и 32-бит ARM из Магазина, а со временем и 64-битные приложения ARM. Однако Microsoft еще не завершила свой 64-битный ARM SDK. Многие части уже готовы (например, есть 64-битный компилятор ARM), но компания пока не принимает 64-битные приложения ARM, отправленные в Магазин, и нет никаких 64-битных настольных приложений ARM.