ARM (Advanced RISC Machine)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 15:51, 4 марта 2017.

Архитектура ARM (англ. Advanced RISC Machine, Acorn RISC Machineпродвинутая ЭВМ с упрощённым набором команд, ПВМ / усовершенствованная RISC-машина) — семейство лицензируемых 32-битных и 64-битных микропроцессорных ядер, разрабатываемых компанией ARM Limited[Источник 1]. Среди лицензиатов: AMD, Apple, Analog Devices, Atmel, Xilinx, Altera, Cirrus Logic, Intel (до 27 июня 2006 года), Marvell, NXP, STMicroelectronics, Samsung, LG, MediaTek, MStar, Qualcomm, Sony, Texas Instruments, nVidia, Freescale, Миландр, HiSilicon.

Значимые семейства процессоров: ARM7, ARM9, ARM11 и Cortex[Источник 2][Источник 3].

Многие лицензиаты разрабатывают собственные версии ядер на базе ARM: DEC StrongARM, Freescale i.MX, Intel XScale, NVIDIA Tegra, ST-Ericsson Nomadik, Krait в Qualcomm Snapdragon, Texas Instruments OMAP, Samsung Hummingbird, LG H13, Apple A6 и HiSilicon K3.

Процессоры ARM

В настоящее время значимыми считаются несколько семейств процессоров ARM:

  • ARM7 (с тактовой частотой до 60-72 МГц), предназначенные, например, для недорогих мобильных телефонов и встраиваемых решений средней производительности. В настоящее время активно вытесняется новым семейством Cortex.
  • ARM9, ARM11 (с частотами до 1 ГГц) для более мощных телефонов, карманных компьютеров и встраиваемых решений высокой производительности.
  • Cortex A — новое семейство процессоров на смену ARM9 и ARM11.
  • Cortex M — новое семейство процессоров на смену ARM7, также призванное занять новую для ARM нишу встраиваемых решений низкой производительности. В семействе присутствуют четыре значимых ядра: Cortex M0, Cortex M3, Cortex M4 и Cortex-M7.

В 2010 году производитель анонсировал процессоры Cortex-A15 под кодовым названием Eagle. ARM утверждает, что ядро Cortex A15 на 40 % производительнее на той же частоте, чем ядро Cortex-A9 при одинаковом числе ядер на чипе.[Источник 4] Изделие, изготовленное по 28-нанометровому техническому процессу, имеет четыре ядра, может функционировать на частоте до 2,5 ГГц и будет поддерживаться многими современными операционными системами[Источник 5][Источник 6].

Популярное семейство микропроцессоров xScale фирмы Marvell (до 27 июня 2007 года — Intel) — расширение архитектуры ARM9, дополненной набором инструкций Wireless MMX, специально разработанных компанией Intel для поддержки мультимедийных приложений. Здесь можно ознакомиться с версиями ядра ARM.

Архитектура

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

Архитектура развивалась с течением времени, и, начиная с ARMv7, были определены три профиля:

  • ‘П’ (Прикладной) / англ. ‘A’ (application) — для устройств, требующих высокой производительности (смартфоны, планшеты)
  • ‘В’ (реального Времени) / англ. ‘R’ (real time) — для приложений, работающих в реальном времени,
  • ’М’ (Микроконтроллер) / англ. ’M’ (microcontroller) — для микроконтроллеров и недорогих встраиваемых устройств.[Источник 2]

Профили могут поддерживать меньшее количество команд (команды определенного типа).

AArch64

AArch64 это имя для новой 64-разрядной ARM архитектуры, также известной как ARMv8 или ARM64.

AArch64 увеличил вдвое число целочисленных регистров. 32-битный ARM предоставляет 16 целочисленных регистров, из которых один — счетчик команд (англ.  program counter), еще два используются для указателя на стэк и регистра связи (англ.  link register) и 13 регистров общего назначения. В AArch64 32 целочисленных регистра, с выделенным нулевым регистром, регистром связи и регистром указателя кадра (англ.  frame pointer register). Еще один регистр зарезервирован платформой, что оставляет 28 регистров общего назначения.

AArch64 также увеличивает число регистров для чисел с плавающей запятой. Регистры в 32-битных ARM несколько странные, так что сложно сравнивать. У 32-битного ARM 32 32-битных регистров с плавающей запятой, которые могут быть представлены как 16 перекрывающихся 64-битных регистров. Кроме того, есть еще 16 независимых 64-битных регистров. AArch64 упрощает это до 32 неперекрывающихся 128-битных регистров, которые могут быть использован для данных меньшего размера. Преимущества AArch64:

  • Число регистров может значительно влиять на производительность.
  • Память значительно медленнее процессора, и чтение/запись памяти занимает значительно больше времени, чем выполнение инструкций процессора.
  • Процессор пытается исправить это при помощи кэшей, но даже самый быстрый кэш значительно медленнее регистров процессора.
  • Больше регистров — больше данных могут храниться внутри процессора.

Насколько это влияет на производительность зависит от конкретного кода и эффективности компилятора, который оптимизирует использование регистров. Когда архитектура Intel перешла от 32 к 64 битам, число регистров увеличилось с 8 до 16, и это было значительное изменение производительности.У ARM уже было больше регистров чем у 32-битной архитектуры Intel, так что увеличение регистров хоть и меньше повлияет на производительность, но это изменение все еще будет заметно.

AArch64 также привнес существенные изменения помимо увеличения числа регистров.

Большинство 32-битных инструкций ARM могут выполняться/не выполняться в зависимости от состояние регистра-условия. Это позволяет транслировать условные выражения (if-statements) без использования ветвления. Предполагалось, что это увеличит производительность, однако, судя по тому, что в AArch64 от этой возможности отказались, она порождала больше проблем, чем давала пользы.

В AArch64 набор SIMD (англ.  single instruction, multiple data — одна инструкция, много данных) NEON полностью поддерживает стандарт IEEE754 для чисел с плавающей запятой с двойной точностью, в то время как 32-битная версия NEON поддерживала только одинарную точность и не в точности следовала стандарту для некоторых битов. В AArch64 добавили специализированные инструкции для AES шифрования и SHA-1 & SHA-256 хешей. Не слишком полезное в общем, однако существенный бонус если вы занимаетесь именно этими вопросами.

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

ARMhf

ARMhf код может выполняться только на процессорах с аппаратной поддержкой вычислений с плавающей точкой. В настоящее время Debian ARMhf порт требует, по крайней мере, центральный процессор ARMv7 с Thumb-2 и VFP3D16.

Архитектура ARM Floating Point (англ.  floating point - плавающая точка) обеспечивает аппаратную поддержку для операций с плавающей запятой в половинном, одинарной и двойной точности с плавающей запятой. Он полностью IEEE 754 совместимый с поддержкой библиотеки полным программным обеспечением.

Возможности с плавающей точкой ARM VFP обеспечивает высокую производительность для арифметики с плавающей точкой , используемой в автомобильных силовых агрегатов и контроль над телом приложений, приложений для обработки изображений , такие как масштабирование, преобразования и шрифта генерации в печати, 3D - преобразования, быстрое преобразование Фурье и фильтрацию в графике. Следующее поколение потребительских товаров , таких как интернет - техника, телевизионные приставки и домашние шлюзы , могут непосредственно воспользоваться ARM VFP.

Многие приложения для управления в режиме реального времени в промышленных и автомобильных полей выгоду из динамического диапазона и точности с плавающей точкой, предложенной ARM VFP. Автомобильная трансмиссия, антиблокировочная тормозная, контроль тяги, и активные системы подвески все критически важных приложений, где точность и предсказуемость являются необходимыми требованиями.

До ARMv7 архитектуры VFP стоял Вектор с плавающей точкой архитектуры, используется для векторных операций.

Предоставление аппаратных средств с плавающей точкой имеет важное значение для многих приложений, и может быть использован как часть системы на чипе (SoC) дизайн потока с использованием инструментов проектирования высокого уровня (например , MatLab, MatrixX и LabVIEW) непосредственно моделировать систему и вывести приложение код. Использование аппаратных средств с плавающей точкой в сочетании с NEON ™ мультимедийных возможностей обработки, производительность приложений визуализации , таких как масштабирование, 2D и 3D - преобразования, шрифта поколения, а также цифровые фильтры могут быть увеличены.

Там были три основные версии VFP на сегодняшний день:

  • VFPv1 является устаревшим. Подробности можно получить по запросу от ARM.
  • VFPv2 является дополнительным расширением ARM набора команд в архитектуре ARMv5TE, ARMv5TEJ и ARMv6.
  • VFPv3 является дополнительным расширением ARM, Thumb® наборы инструкций и ThumbEE в ARMv7-A и профилей ARMv7-R. Реализация VFPv3 является либо с тридцать два или шестнадцать двойных регистров слов. Термины VFPv3-D32 и D16-VFPv3 различие между этими двумя вариантами осуществления.

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

Режимы

Процессор может находиться в одном из следующих операционных режимов:

  • Пользовательский режим / англ. User mode — обычный режим выполнения программ. В этом режиме выполняется большинство программ.
  • Режим быстрого прерывания / англ. Fast Interrupt (FIQ) — режим, где время срабатывания меньше.
  • Основной режим прерывания / англ. Interrupt (IRQ).
  • Системный режим / англ. System mode — защищённый режим для использования операционной системой.
  • Режим аварийного отказа / англ. Abort mode — режим, куда переходит процессор, когда возникает ошибка доступа к памяти (доступ к данным или к команде на этапе prefetch-конвейера).
  • Привилегированный пользовательский режим / англ. Supervisor mode.
  • Неопределённый режим / англ. Undefined mode — режим, куда процессор входит при попытке выполнить неизвестную ему команду.

Режим процессора переключается, когда возникает соответствующее исключение, или же при модификации регистра статуса.

Набор команд

Чтобы сохранить устройство чистым, простым и быстрым, оригинальное изготовление ARM было исполнено без микрокода, как и более простой 8-разрядный процессор 6502, используемый в предыдущих микрокомпьютерах от Acorn Computers. Набор команд ARM — режим, в котором исполняется 32-битный набор команд.

Набор команд Thumb

Для улучшения плотности кода процессоры, начиная с ARM7TDMI, снабжены режимом «thumb». В этом режиме процессор выполняет альтернативный набор 16-битных команд. Большинство из этих 16-разрядных команд переводятся в нормальные команды ARM. Уменьшение длины команды достигается за счёт сокрытия некоторых операндов и ограничения возможностей адресации по сравнению с режимом полного набора команд ARM.

В режиме Thumb меньшие коды операций обладают меньшей функциональностью. Например, только ветвления могут быть условными, и многие коды операций имеют ограничение в виде доступа только к половине главных регистров процессора. Более короткие коды операций в целом дают большую плотность кода, хотя некоторые операции требуют дополнительных команд. В ситуациях, когда порт памяти или ширина шины ограничены 16 битами, более короткие коды операций режима Thumb становятся гораздо производительнее по сравнению с обычным 32-битным ARM-кодом, так как меньший программный код придется загружать в процессор при ограниченной пропускной способности памяти.

Аппаратные средства типа Game Boy Advance, как правило, имеют небольшой объём оперативной памяти, доступной с полным 32-битным информационным каналом. Но большинство операций выполняется через 16-битный или более узкий информационный канал. В этом случае имеет смысл использовать Thumb-код и вручную оптимизировать некоторые тяжелые участки кода, используя переключение в режим полных 32-битных инструкций ARM.

Первым процессором с декодером Thumb-команд был ARM7TDMI. Все процессоры семейства ARM9, а также XScale, имели встроенный декодер Thumb-команд.

Набор команд Thumb-2

Thumb-2 — технология, стартовавшая с ARM1156 core, анонсированного в 2003 году. Он расширяет ограниченный 16-битный набор команд Thumb дополнительными 32-битными командами, чтобы задать набору команд дополнительную ширину. Цель Thumb-2 — достичь плотности кода, как у Thumb, и производительности, как у набора команд ARM на 32 битах. Можно сказать, что в ARMv7 эта цель была достигнута.

Thumb-2 расширяет как команды ARM, так и команды Thumb ещё большим количеством команд, включая управление битовым полем, табличное ветвление, условное исполнение. Новый язык «Unified Assembly Language» (UAL) поддерживает создание команд, как для ARM, так и для Thumb из одного и того же исходного кода. Версии Thumb на ARMv7 выглядят, как код ARM. Это требует осторожности и использования новой команды if-then, которая поддерживает исполнение до 4 последовательных команд испытываемого состояния. Во время компиляции в ARM-код она игнорируется, но во время компиляции в код Thumb-2 генерирует команды. Например:

; if (r0 == r1)
CMP r0, r1
ITE EQ ; ARM: no code ... Thumb: IT instruction
; then r0 = r2;
MOVEQ r0, r2 ; ARM: conditional; Thumb: condition via ITE 'T' (then)
; else r0 = r3;
MOVNE r0, r3 ; ARM: conditional; Thumb: condition via ITE 'E' (else)
; recall that the Thumb MOV instruction has no bits to encode "EQ" or "NE"

Все кристаллы ARMv7 поддерживают набор команд Thumb-2, а некоторые кристаллы, вроде Cortex-m3, поддерживают только Thumb-2. Остальные кристаллы Cortex и ARM11 поддерживают наборы команд как Thumb-2, так и ARM.

Набор команд Jazelle

Jazelle — это технология, которая позволяет байткоду Java исполняться прямо в архитектуре ARM в качестве 3-го состояния исполнения (и набора команд) наряду с обычными командами ARM и режимом Thumb. Поддержка технологии Jazelle обозначается буквой «J» в названии процессора — например, ARMv5TEJ. Данная технология поддерживается, начиная с архитектуры ARMv6, хотя новые ядра содержат лишь ограниченные реализации, которые не поддерживают аппаратного ускорения.

ARMv8 и набор команд ARM 64 бит

В конце 2011 года была опубликована новая версия архитектуры, ARMv8. В ней появилось определение архитектуры AArch64, в которой исполняется 64-битный набор команд A64. Поддержка 32-битных команд получила название A32 и исполняется на архитектурах AArch32. Инструкции Thumb поддерживаются в режиме T32, только при использовании 32-битных архитектур. Допускается исполнение 32-битных приложений в 64-битной ОС, и запуск виртуализованной 32-битной ОС при помощи 64-битного гипервизора.[Источник 7] Applied Micro, AMD, Broadcom, Calxeda, HiSilicon, Samsung, STM и другие заявили о планах использовать ARMv8. Ядра Cortex-A53 и Cortex-A57, поддерживающие ARMv8, были представлены компанией ARM 30 октября 2012 года.[Источник 8]

Как AArch32, так и AArch64, поддерживают VFPv3, VFPv4 и advanced SIMD (NEON). Также добавлены криптографические инструкции для работы с AES, SHA-1 и SHA-256.

Особенности AArch64:

  • Новый набор команд A64
  • 31 регистр общего назначения, каждый длиной 64 бит
  • Отдельные регистры SP и PC
  • Инструкции имеют размер 32 бит и многие совпадают с командами A32
  • Большинство инструкций работают как с 32-, так и с 64-битными аргументами
  • Адреса имеют размер 64 бит
  • Улучшения Advanced SIMD (NEON) enhanced
  • С 16 до 32 увеличено количество 128-битных регистров, доступных через NEON, VFPv4, криптоинструкции AES, SHA
  • Поддерживает вычисления с числами с плавающей запятой двойной точности (64-бит double)
  • Полная совместимость с IEEE 754
  • Новая система исключений
  • Трансляция виртуальных адресов из 48-битного формата работает с помощью существующих механизмов LPAE

Функции RISC

Архитектура ARM обладает следующими особенностями RISC:

  • Архитектура загрузки / хранения
  • Нет поддержки нелинейного (не выровненного по словам) доступа к памяти (теперь поддерживается в процессорах ARMv6, за некоторыми исключениями, и полностью в ARMv7)
  • Равномерный 16х32-битный регистровый файл
  • Фиксированная длина команд (32 бит) для упрощения декодирования за счет снижения плотности кода. Позднее режим Thumb повысил плотность кода.
  • Одноцикловое исполнение

Чтобы компенсировать простой дизайн, в сравнении с современными процессорами вроде Intel 80286 или Motorola 68020 были использованы некоторые особенности дизайна:

  • Арифметические инструкции заменяют условные коды, только когда это необходимо
  • 32-битное многорегистровое циклическое сдвиговое устройство, которое может быть использовано без потерь производительности в большинстве арифметических инструкций и адресных расчетов.
  • Мощные индексированные адресные режимы
  • Регистр ссылок для быстрого вызова функций листьев
  • Простые, но быстрые, с двумя уровнями приоритетов подсистемы прерываний с включенными банками регистров.

Условное исполнение

Одно из существенных отличий архитектуры ARM (изначальная архитектура) от других архитектур ЦПУ — так называемая предикация, то есть возможность условного исполнения команд. Под «условным исполнением» здесь понимается то, что команда будет выполнена или проигнорирована в зависимости от текущего состояния флагов состояния процессора. В Thumb и Arm 64 предикация не используется — в первом режиме для неё нет места в команде (всего 16 бит), а во втором предикация бессмысленна и сложна для реализации на суперскалярных архитектурах.

В то время как для других архитектур таким свойством, как правило, обладают только команды условных переходов, в архитектуру ARM была заложена возможность условного исполнения практически любой команды. Это было достигнуто добавлением в коды их инструкций особого 4-битового поля (предиката). Одно из его значений зарезервировано на то, что инструкция должна быть выполнена безусловно, а остальные кодируют то или иное сочетание условий (флагов). С одной стороны, с учётом ограниченности общей длины инструкции, это сократило число битов, доступных для кодирования смещения в командах обращения к памяти, но с другой — позволило избавляться от инструкций ветвления при генерации кода для небольших if-блоков.

Пример, обычно рассматриваемый для иллюстрации — основанный на вычитании алгоритм Евклида. В языке C он выглядит так:

    while (i != j)
    {
       if (i > j)
           i -= j;
       else
           j -= i;
    }

А на ассемблере ARM — так:

loop CMP Ri, Rj; set condition «NE» if (i != j),
                            ;               "GT" if (i > j),
                            ;            or "LT" if (i < j)
        SUBGT  Ri, Ri, Rj   ; if "GT" (greater than), i = i-j;
        SUBLT  Rj, Rj, Ri   ; if "LT" (less than), j = j-i;
        BNE    loop         ; if "NE" (not equal), then loop

Из кода видно, что использование предикации позволило полностью избежать ветвления в операторах else и then. Заметим, что если Ri и Rj равны, то ни одна из SUB-инструкций не будет выполнена, полностью убирая необходимость в ветке, реализующей проверку while при каждом начале цикла, что могло быть реализовано, например, при помощи инструкции SUBLE (меньше либо равно).

Один из способов, которым уплотнённый (Thumb) код достигает большей экономии объёма — это именно удаление 4-битового предиката из всех инструкций, кроме ветвлений.

Другие особенности

Другая особенность набора команд — это возможность соединять сдвиги и вращения в инструкции «обработки информации» (арифметическую, логическую, движение регистр-регистр) так, что, например, выражение С:

 a += (j << 2);

может быть преобразовано в команду из одного слова и одного цикла в ARM:

ADD Ra, Ra, Rj, LSL #2

Это приводит к тому, что типичные программы ARM становятся плотнее, чем обычно, с меньшим доступом к памяти. Таким образом, конвейер используется гораздо более эффективно. Даже несмотря на то, что ARM работает на скоростях, которые многие бы сочли низкими, он довольно-таки легко конкурирует с многими более сложными архитектурами ЦПУ.

ARM-процессор также имеет некоторые особенности, редко встречающиеся в других архитектурах RISC — такие, как адресация относительно счётчика команд (на самом деле счётчик команд ARM — это один из 16 регистров), а также пре- и пост-инкрементные режимы адресации.

Другая особенность, что стоит отметить, — это то, что некоторые ранние ARM-процессоры (до ARM7TDMI), например, не имеют команд для хранения 2-байтных чисел. Таким образом, строго говоря, для них невозможно сгенерировать эффективный код, который бы вел себя так, как ожидается от объектов С, типа «volatile int16_t».

Конвейер и другие аспекты реализации

ARM7 и более ранние версии имеют трехступенчатый конвейер. Это ступени переноса, декодирования и исполнения. Более производительные архитектуры, типа ARM9, имеют более сложные конвейеры. Cortex-a8 имеет 13-ступенчатый конвейер.

Сопроцессоры

Архитектура предоставляет способ расширения набора команд, используя сопроцессоры, которые могут быть адресованы, используя MCR, MRC, MRRC, MCRR и похожие команды. Пространство сопроцессора логически разбито на 16 сопроцессоров с номерами от 0 до 15, причем 15-й зарезервирован для некоторых типичных функций управления, типа управления кэш-памятью и операции блока управления памятью (на процессорах, в которых они есть).

В машинах на основе ARM периферийные устройства обычно подсоединяются к процессору путём сопоставления их физических регистров в памяти ARM или в памяти сопроцессора, или путём присоединения к шинам, которые, в свою очередь, подсоединяются к процессору. Доступ к сопроцессорам имеет большее время ожидания, поэтому некоторые периферийные устройства проектируются для доступа в обоих направлениях. В остальных случаях разработчики чипов лишь пользуются механизмом интеграции сопроцессора. Например, движок обработки изображений должен состоять из малого ядра ARM7TDMI, совмещенного с сопроцессором, который поддерживает примитивные операции по обработке элементарных кодировок HDTV.

Усовершенствованный SIMD (NEON)

Расширение усовершенствованного SIMD, также называемое технологией NEON — это комбинированный 64- и 128-битный набор команд SIMD (single instruction multiple data), который обеспечивает стандартизованное ускорение для медиаприложений и приложений обработки сигнала. NEON может выполнять декодирование аудиоформата mp3 на частоте процессора в 10 МГц, и может работать с речевым кодеком GSM AMR (adaptive multi-rate) на частоте более 13МГц. Он обладает внушительным набором команд, отдельными регистровыми файлами, и независимой системой исполнения на аппаратном уровне. NEON поддерживает 8-, 16-, 32-, 64-битную информацию целого типа, одинарной точности и с плавающей запятой, и работает в операциях SIMD по обработке аудио и видео (графика и игры). В NEON SIMD поддерживает до 16 операций единовременно.

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

VFP

Технология VFP (Vector Floating Point, вектора чисел с плавающей запятой) — расширение сопроцессора в архитектуре ARM. Она производит низкозатратные вычисления над числами с плавающей запятой одинарной/двойной точности, в полной мере соответствующие стандарту ANSI/IEEE Std 754—1985 Standard for Binary Floating-Point Arithmetic. VFP производит вычисления с плавающей запятой, подходящие для широкого спектра приложений — например, для КПК, смартфонов, сжатие звука, трёхмерной графики и цифрового звука, а также принтеров и телеприставок. Архитектура VFP также поддерживает исполнение коротких векторных команд. Но, поскольку процессор выполняет операции последовательно над каждым элементом вектора, то VFP нельзя назвать истинным SIMD-набором инструкций. Этот режим может быть полезен в графике и приложениях обработки сигнала, так как он позволяет уменьшить размер кода и выработку команд.

Другие сопроцессоры с плавающей запятой и/или SIMD, находящиеся в ARM-процессорах, включают в себя FPA, FPE, iwMMXt. Они обеспечивают ту же функциональность, что и VFP, но не совместимы с ним на уровне опкодов.

Расширения безопасности

Расширения безопасности, позиционируемые как TrustZone Technology, находятся в ARMv6KZ и других, более поздних, профилированных на приложениях архитектурах. Оно обеспечивает низкозатратную альтернативу добавлению специального ядра безопасности, обеспечивая 2 виртуальных процессора, поддерживаемых аппаратным контролем доступа. Это позволяет ядру приложения переключаться между двумя состояниями, называемыми «миры» (чтобы избежать путаницы с названиями возможных доменов), чтобы не допустить утечку информации из более важного мира в менее важный. Этот переключатель миров обычно ортогонален всем другим возможностям процессора. Таким образом, каждый мир может работать независимо от других миров, используя одно и то же ядро. Память и периферия соответственно изготавливаются с учетом особенностей мира ядра, и могут использовать это, чтобы получить контроль доступа к секретам и кодам ядра. Типичные приложения TrustZone Technology должны запускать полноценную операционную систему в менее важном мире, и компактный, специализированный на безопасности, код в более важном мире, позволяя Digital Rights Management’у намного точнее контролировать использование медиа на устройствах на базе ARM, и предотвращая несанкционированный доступ к устройству.

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

Отладка

Все современные процессоры ARM включают аппаратные средства отладки, так как без них отладчики ПО не смогли бы выполнить самые базовые операции типа остановки, отступа, установки контрольных точек после перезагрузки.

Архитектура ARMv7 определяет базовые средства отладки на архитектурном уровне. К ним относятся точки останова, точки просмотра и выполнение команд в режиме отладки. Такие средства были также доступны с модулем отладки EmbeddedICE. Поддерживаются оба режима — остановки и обзора. Реальный транспортный механизм, который используется для доступа к средствам отладки, не специфицирован архитектурно, но реализация, как правило, включает поддержку JTAG.

Существует отдельная архитектура отладки «с обзором ядра», которая не требуется архитектурно процессорами ARMv7.

Регистры

ARM предоставляет 31 регистр общего назначения разрядностью 32 бит. В зависимости от режима и состояния процессора пользователь имеет доступ только к строго определённому набору регистров. В ARM state разработчику постоянно доступны 17 регистров:

  • 13 регистров общего назначения (r0..r12).
  • Stack Pointer (r13) — содержит указатель стека выполняемой программы.
  • Link register (r14) — содержит адрес возврата в инструкциях ветвления.
  • Program Counter (r15) — биты [31:1] содержат адрес выполняемой инструкции.
  • Current Program Status Register (CPSR) — содержит флаги, описывающие текущее состояние процессора. Модифицируется при выполнении многих инструкций: логических, арифметических, и др.

Во всех режимах, кроме User mode и System mode, доступен также Saved Program Status Register (SPSR). После возникновения исключения регистр CPSR сохраняется в SPSR. Тем самым фиксируется состояние процессора (режим, состояние; флаги арифметических, логических операций, разрешения прерываний) на момент непосредственно перед прерыванием.[Источник 9]

usr sys svc abt und irq fiq
R0
R1
R2
R3
R4
R5
R6
R7
R8 R8_fiq
R9 R9_fiq
R10 R10_fiq
R11 R11_fiq
R12 R12_fiq
R13 R13_svc R13_abt R13_und R13_irq R13_fiq
R14 R14_svc R14_abt R14_und R14_irq R14_fiq
R15
CPSR
SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq

Работа с памятью

Архитектура ARM использует единое адресное пространство[Источник 10]. На практике такая схема означает, что адрес может указывать на оперативную память, ПЗУ или порты ввода-вывода, в противовес традиционной схеме, при которой содержимое ПЗУ при запуске копируется в оперативную память, а порты ввода-вывода имеют собственное адресное пространство.

Поддерживаемые системы ввода-вывода

В большинстве существующих моделей микропроцессоров реализована шина PCI и возможность работы с внешней динамической оперативной памятью (DRAM). В процессорах, предназначенных для потребительских устройств, также обычно встраиваются: контроллеры шин USB, IIC, AC’97-совместимое звуковое устройство, устройство для работы с флэш-носителями стандарта SD и MMC, контроллер последовательного порта.

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

Процесс запуска ОС на ARM-машинах

После включения системы на базе ARM-процессора, из ROM-памяти загружается начальный загрузчик и адрес его точки входа. Начальный загрузчик проводит предварительную инициализацию системы, исполняя тем самым ту же роль, которую исполняет BIOS на системах x86, после чего может загрузить либо системный загрузчик, либо напрямую ОС.

Единого стандарта на начальный загрузчик не существует: хотя современные версии стандарта UEFI предусматривают возможность реализации этого стандарта для архитектуры ARM, но на практике UEFI используется редко — большинство ОС используют собственные загрузчики, или реализуют совместимость с одним из загрузчиков других систем.

ОС, поддерживающие ARM

Архитектура ARM поддерживается множеством операционных систем. Наиболее широко используемые: Linux (в том числе Android), iOS, Windows Phone.

Работать на системах с ARM-процессором могут различные Unix и Unix-подобные ОС: Linux (многие дистрибутивы), iOS, Android, BSD (FreeBSD, NetBSD, OpenBSD), QNX, Plan 9, Inferno, OpenSolaris (2008—2009), Firefox OS.

Также на платформе запускаются отдельные варианты семейства Windows: Windows CE, Windows Phone, Windows RT, Windows 10 (только на Raspberry Pi)

Кроме того, ARM поддерживают: FreeRTOS, Nucleus, Symbian OS, RISC OS, RISC iX.

Примечания

Источники

  1. Компания ARM Limited занимается исключительно разработкой ядер и инструментов для них (компиляторы, средства отладки и т. п.), зарабатывая на лицензировании архитектуры сторонним производителям.
  2. 2,0 2,1 Электроника НТБ [Электронный ресурс]: Д. Козлов-Кононов. Процессорные ядра семейства Cortex. Сочетание высокой производительности и низкого энергопотребления / журнал Электроника, вып. #8/2010. — Дата обращения: 13.11.2016. Режим доступа: http://www.electronics.ru/journal/article/135.
  3. Справочник по электронным компонентам [Электронный ресурс]: Ознакомительное руководство по ARM-микроконтроллерам Cortex-M3 / Дата обращения: 13.11.2016. Режим доступа: http://www.gaw.ru/html.cgi/txt/doc/micros/arm/cortex_arh/index.htm.
  4. ITProPortal [Электронный ресурс]: Exclusive : ARM Cortex-A15 «40 Per Cent» Faster Than Cortex-A9 / Дата обращения: 13.11.2016. Режим доступа: http://www.itproportal.com/2011/03/14/exclusive-arm-cortex-a15-40-cent-faster-cortex-a9/.
  5. ARM [Электронный ресурс]: Презентация процессоров семейства ARM Cortex-A15 MPCore / Дата обращения: 13.11.2016. Режим доступа: http://www.arm.com/products/processors/cortex-a/cortex-a15.php.
  6. Ferra.ru [Электронный ресурс]: ARM Cortex-A15 — процессор с тактовой частотой до 2,5 ГГц, не только для смартфонов / Дата обращения: 13.11.2016. Режим доступа: http://news.ferra.ru/hard/2010/09/10/102926/.
  7. ARM [Электронный ресурс]: Презентация «ARMv8 Technology Preview» / Дата обращения: 13.11.2016. Режим доступа: http://www.arm.com/files/downloads/ARMv8_Architecture.pdf.
  8. ARM [Электронный ресурс]: ARM Launches Cortex-A50 Series, the World’s Most Energy-Efficient 64-bit Processors / Дата обращения: 13.11.2016. Режим доступа: http://www.arm.com/about/newsroom/arm-launches-cortex-a50-series-the-worlds-most-energy-efficient-64-bit-processors.php.
  9. ARM [Электронный ресурс]: ARM7TDMI (rev 3) Technical Reference Manual / Дата обращения: 13.11.2016. Режим доступа: http://infocenter.arm.com/help/topic/com.arm.doc.ddi0029g/DDI0029.pdf.
  10. Pete's Pages [Электронный ресурс]: ARM Assembly Language Programming — Chapter 2. Inside the ARM / Дата обращения: 13.11.2016. Режим доступа: http://www.peter-cockerell.net/aalp/html/ch-2.html. «Порты ввода-вывода имеют отображение в ОЗУ. Тут нет понятия раздельного адресного пространства ввода-вывода. Периферийные чипы считываются и записываются, как если бы они были областями памяти. То есть в практических ARM-системах памяти распределяется на три зоны: ОЗУ, ПЗУ и порты ввода-вывода (вероятно, в порядке убывания размера)».

Ссылки