ФЭНДОМ


Эволюция архитектуры ARM от довольно простых микроконтроллеров, имеющих весьма ограниченную область применения, до универсальных процессоров, широко используемых как в промышленных и встраиваемых системах, так и в разнообразных мобильных устройствах, работающих под управлением развитых операционных систем (Windows CE, Linux/Android, iOS и т.п.), сильнейшим образом отразилась на подсистеме памяти. Чтобы удовлетворять требованиям, предъявляемым современными ОС, процессоры должны обладать высокой производительностью и иметь поддержку виртуальной памяти, поэтому архитектура ARM предусматривает все необходимые средства. Однако для микроконтроллеров эти механизмы нередко являются бесполезными и даже вредными, увеличивая стоимость и энергопотребление, поэтому конкретные образцы процессоров могут как обладать, так и не обладать кэш-памятью, буферами записи, устройством управления памятью и т.д. Кроме того, с разными типами процессоров могут использоваться разные виды оперативной и флэш-памяти — все вопросы, связанные с внешними интерфейсами процессорного кристалла, отданы на откуп фирмам-производителям.

Общим для всех процессоров архитектуры ARM является то, что конфигурирование и управление работой кэш-памяти, буфера записи, устройств управления и защиты памяти осуществляется с помощью сопроцессора управления системой (CP15). Однако достаточно жёсткая регламентация поддержки различных механизмов, связанных с управлением памятью, появляется лишь начиная с версии ARMv6. Так, само наличие CP15 стало обязательным требованием лишь с версии ARMv6. В более ранних процессорах целый ряд средств мог отсутствовать вообще или быть реализованным не тем способом, каким предписывается их реализовывать в ARMv6, а в управляющих структурах имелось немало битов, смысл которых мог определяться производителями. Лишь с появлением ARMv6 все эти механизмы были достаточно стандартизированы и одновременно существенно расширены. При разработке, ориентированной на процессоры более ранних версий, может потребоваться внимательное изучение документации, относящейся к конкретной версиям архитектуры и модели процессора. Тем не менее, если не использовать некоторые «тонкие» особенности архитектуры (в частности, всегда использовать порядок хранения байтов «младший-старший» и обращаться к памяти лишь по выровненным адресам), проблем с переносимостью кода с одного процессора на другой не возникнет.

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

Для обеспечения широких возможностей по подключению различных типов микросхем памяти и периферийных устройств, а также для облегчения портирования ПО, изначально разработанного под другие аппаратные платформы, архитектура ARM предусматривает несколько вариантов логической структуры памяти; в первую очередь это касается порядка байтов в многобайтовых величинах («младший-старший» или наоборот). До версии ARMv6 требований по обязательной поддержке того или другого порядка байтов не предъявлялось; тем не менее, можно считать, что порядок «младший-старший» поддерживается всегда (исключения из этого правила неизвестны, т.е., если они и есть, то не получили сколько-нибудь заметного распространения). Начиная с ARMv6, поддержка порядка «младший-старший» стала обязательной; кроме того, в этой версии архитектуры добавилась возможность обращения к данным, не выровненным на естественную для их размера границу (ранее такая возможность могла присутствовать, а могла и отсутствовать, при этом обращение по невыровненному адресу могло приводить к ошибочным результатам, но не вызывать генерацию соответствующего отказа).

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

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

В старших моделях процессоров, предназначенных для применения в сложных устройствах (КПК, смартфоны и т.п.), имеется поддержка виртуальной памяти. Однако в более простых случаях нередко бывает предпочтительнее иметь простые средства защиты памяти без аппаратуры преобразования адресов. Архитектура ARM предусматривает обе эти возможности, однако наличие того или иного механизма зависит от конкретной модели процессора.

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

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