Автор: Пользователь скрыл имя, 10 Марта 2012 в 05:33, курсовая работа
Архитектура ARM (Advanced RISC Machine, Acorn RISC Machine, усовершенствованная RISC-машина) — семейство лицензируемых 32-битных и 64-битных микропроцессорных ядер разработки компании ARM Limited. Компания занимается исключительно разработкой ядер и инструментов для них (компиляторы, средства отладки и т. п.), зарабатывая на лицензировании архитектуры сторонним производителям.
Вступление 2
1. Общие сведения об архитектуре ARM 3
1.1. Краткая история 3
1.2. Главные особенности 7
2. Архитектура ARM 11
2.1. Особенности архитектуры ARM 11
2.2. Набор инструкций Thumb 12
2.3. Технология SIMD 13
2.4. Набор инструкций DSP 13
2.5. Технология Jazelle 14
2.6. Технология интеллектуального управления энергопотреблением 15
3. Семейства ядер и процессоров ARM 16
4. Регистры общего назначения (ARM) 18
4.1. Регистры общего назначения на прикладном уровне 18
4.1.1. Счётчик команд PC (R15) 19
4.1.2. Считывание счётчика команд 19
4.1.3. Запись в счётчик команд 20
4.1.4. Указатель стека SP (R13) 21
4.1.5. Регистр связи LR (R14) 22
4.2. Регистры общего назначения на системном уровне 23
4.2.1. Архитектуры ARMv7-A, ARMv7-R и более ранние 23
4.2.2. Архитектуры ARMv6-M и ARMv7-M 23
4.3. Стандартные соглашения о связях 24
5. Логическая структура памяти (ARM) 26
5.1. Адресное пространство 26
5.2. Порядок следования байтов в многобайтовых величинах 26
5.2.1. Порядок LE 27
5.2.2. Порядок BE-32 27
5.2.3. Порядок BE-8 28
5.3. Доступы по невыровненным адресам 29
5.3.1. Архитектуры, предшествующие ARMv6 29
5.3.2. Архитектура ARMv6 30
Оглавление
Вступление 2
1. Общие сведения об архитектуре ARM 3
1.1. Краткая история 3
1.2. Главные особенности 7
2. Архитектура ARM 11
2.1. Особенности архитектуры ARM 11
2.2. Набор инструкций Thumb 12
2.3. Технология SIMD 13
2.4. Набор инструкций DSP 13
2.5. Технология Jazelle 14
2.6. Технология интеллектуального управления энергопотреблением 15
3. Семейства ядер и процессоров ARM 16
4. Регистры общего назначения (ARM) 18
4.1. Регистры общего назначения на прикладном уровне 18
4.1.1. Счётчик команд PC (R15) 19
4.1.2. Считывание счётчика команд 19
4.1.3. Запись в счётчик команд 20
4.1.4. Указатель стека SP (R13) 21
4.1.5. Регистр связи LR (R14) 22
4.2. Регистры общего назначения на системном уровне 23
4.2.1. Архитектуры ARMv7-A, ARMv7-R и более ранние 23
4.2.2. Архитектуры ARMv6-M и ARMv7-M 23
4.3. Стандартные соглашения о связях 24
5. Логическая структура памяти (ARM) 26
5.1. Адресное пространство 26
5.2. Порядок следования байтов в многобайтовых величинах 26
5.2.1. Порядок LE 27
5.2.2. Порядок BE-32 27
5.2.3. Порядок BE-8 28
5.3. Доступы по невыровненным адресам 29
5.3.1. Архитектуры, предшествующие ARMv6 29
5.3.2. Архитектура ARMv6 30
Архитектура ARM (Advanced RISC Machine, Acorn RISC Machine, усовершенствованная RISC-машина) — семейство лицензируемых 32-битных и 64-битных микропроцессорных ядер разработки компании ARM Limited. Компания занимается исключительно разработкой ядер и инструментов для них (компиляторы, средства отладки и т. п.), зарабатывая на лицензировании архитектуры сторонним производителям.
В 2007 году около 98 % из более чем миллиарда мобильных телефонов, продаваемых ежегодно, были оснащены по крайней мере одним процессором ARM. По состоянию на 2009 на процессоры ARM приходится до 90 % всех встроенных 32-разрядных процессоров. Процессоры ARM широко используются в потребительской электронике — в том числе КПК, мобильных телефонах, цифровых носителях и плеерах, портативных игровых консолях, калькуляторах и компьютерных периферийных устройствах, таких как жесткие диски или маршрутизаторы.
Данные процессоры имеют низкое энергопотребление, поэтому находят широкое применение во встраиваемых системах и доминируют на рынке мобильных устройств, для которых важно низкое энергопотребление.
С момента появления архитектуры ARM и до 2011 года появилось семь «больших» версий архитектуры — до ARMv7 включительно. Кроме того, если не у всех, то у многих версий имеются разновидности.
Ранние процессоры архитектуры ARM использовали 26-разрядные адреса памяти. Первой версией с 32-разрядной адресацией и одновременно последней с 26-разрядной стала ARMv3. Все эти версии к 2010 году уже полностью исчезли, поэтому в дальнейшем они обсуждаться не будут.
Первой по времени появления из пока ещё используемых архитектур стала ARMv4. В ней впервые отказались от поддержки 26-разрядных адресов, но зато в дополнение к командам обработки слов (32 бита) и байтов ввели команды обработки полуслов (16 бит).
Вскоре появилась разновидность ARMv4T, в которой впервые был реализован набор команд Thumb. Команды этого набора функционально являлись подмножеством основного набора команд (с этого момента обозначаемого как набор команд ARM), причём в них отсутствовали инструкции системного назначения. По этой причине ни для этой, ни для основной массы последующих архитектур невозможно создать ОС или системно-независимую программу (т.е. программу, работающую на «голом железе»), использующую только систему команд Thumb. Начальные участки обработчиков прерываний, а также некоторые действия по управлению процессором можно выполнить только с помощью инструкций набора ARM. В то же время каждая команда Thumb кодируется полусловом (16 бит), в то время как команда ARM всегда занимает целое слово (32 бита). Благодаря этому функционально аналогичная программа, написанная с использованием системы команд Thumb, занимает существенно меньше памяти, чем программа на ARM.
Помимо ARMv4 и ARMv4T, четвёртая версия архитектуры ARM имела ещё две разновидности — ARMv4xM и ARMv4TxM, отличавшиеся от первых двух отсутствием команды длинного умножения (сомножители по 32 разряда, результат — 64 разряда). К началу 2010 года все эти разновидности, кроме ARMv4T, уже утратили актуальность и исчезли с рынка.
Пятая версия архитектуры в «чистом» виде — ARMv5, а также её разновидность без длинного умножения ARMv5xM тоже уже не употребляются. От предыдущей архитектуры они отличались несколько расширенной системой команд. В частности, именно в ARMv5 появились первые инструкции набора ARM, не имеющие возможности условного выполнения.
Thumb-разновидность ARMv5T отличается от ARMv4T наличием нескольких дополнительных команд, улучшенными возможностями взаимодействия ARM- и Thumb-кода и некоторыми другими усовершенствованиями; она ещё иногда встречается. Её разновидность с «обрезанными» возможностями умножения, ARMv5TxM, из употребления вышла.
Вскоре после появления процессоров семейства ARMv5T архитектура была вновь весьма существенно расширена: появилась целая группа инструкций, намного упростившая реализацию алгоритмов цифровой обработки сигналов (так называемые DSP-команды). Новое семейство получило обозначение ARMv5TE и весьма широко используется до сих пор. Некоторые ранние реализации этого семейства имели лишь часть новых инструкций; эта разновидность получила обозначение ARMv5TExP и уже почти не применяется.
Венцом развития пятой версии архитектуры стало включение специальных средств, предназначенных для упрощения реализации виртуальной машины Java (технология Jazelle). Такие процессоры получили обозначение ARMv5TEJ; к настоящему времени они являются одними из наиболее распространённых.
Предпоследняя версия архитектуры, ARMv6, изначально не имела разновидностей и включала все возможности ARMv5TEJ, но с рядом улучшений. Так, в ней были расширены обе системы команд, пересмотрена архитектура подсистемы памяти (ставшая намного более унифицированной: до ARMv6 очень многие важные решения отдавались «на откуп» производителям, из-за чего при переносе ОС с одного процессора на другой зачастую требовалось выполнить очень много доработок), обеспечен доступ к невыровненным данным и др.
Через некоторое время появилась разновидность ARMv6T2, в которой система команд Thumb была несколько расширена: добавились несколько инструкций, кодируемых не одним, а двумя полусловами, зато обеспечивающими дополнительные возможности, что улучшило производительность Thumb-кода. Особого распространения эта разновидность не получила.
Последняя версия, ARMv7, более известная под именем Cortex (по общему имени реализующих её процессорных ядер), сейчас стремительно набирает популярность. В ней фирма ARM впервые явным образом разделила свои разработки по сферам применения, или по «профилям», как это именуется в документации.
Процессоры ARMv7-A (Cortex-A) являются наиболее мощными и являются прямыми потомками предыдущих архитектур, сохраняя с ними практически полную программную совместимость. Они реализуют две системы команд: ARM и Thumb-2, которая ещё больше расширена по сравнению с реализованной в ARMv6T2. Благодаря этому, сохраняя намного более высокую плотность кода (а значит, потребляя меньше памяти), чем система команд ARM, Thumb-2 обеспечивает почти такую же производительность. Все процессоры Cortex-A в обязательном порядке оснащены устройством управления памятью (MMU), довольно часто на одном кристалле размещаются два процессорных ядра. Все эти процессоры предназначены для использования в мощных мобильных устройствах (сотовых телефонах, коммуникаторах, нетбуках и т.д.). Нередко производители расширяют их возможности, добавляя специализированные узлы. Например, фирма nVidia производит семейство процессоров Tegra 2, у которых, помимо процессорных ядер ARM, имеется графическое ядро, функционально близкое к использовавшемуся в видеоплатах семейства GeForce 6xxx.
Кристаллы ARMv7-R (Cortex-R) по системам команд аналогичны процессорам Cortex-A, но оснащены не устройством управления памятью, а значительно более простым устройством защиты памяти (MPU). Они предназначены в первую очередь для использования в промышленных контроллерах и тому подобных устройствах, не нуждающихся в виртуальной памяти, однако имеющих высокие требования к производительности.
Наконец, семейство ARMv7-M (Cortex-M), строго говоря, не относится к «настоящим» ARM-процессорам. Во-первых, оно кардинальным образом отличается по системной архитектуре от всех прочих разработок фирмы ARM, а соответственно, на системном уровне несовместимо ни с более ранними процессорами, ни с другими ветками Cortex. Во-вторых, в этих кристаллах реализована только система команд Thumb-2, а команды набора ARM не поддерживаются. Предназначена эта серия для использования в качестве микроконтроллеров малой и средней производительности. Благодаря низкой стоимости и энергопотреблению они могут успешно конкурировать с намного более слабыми по вычислительными возможностям 8- и 16-разрядными микроконтроллерами.
Разновидностью Cortex-M стала архитектура ARMv6-M. Несмотря на формальное отношение к шестой версии архитектуры, реально ARMv6-M является упрощённым вариантом Cortex-M и совершенно не совместима с другими процессорами версии ARMv6. С «настоящими» Cortex-M имеется совместимость «снизу вверх»: программа, работающая на ARMv6-M, заработает на Cortex-M, но не наоборот.
Следует заметить, что у процессорных ядер, разработанных ARM, существует своя система нумерации, не связанная с номером версии архитектуры. Так, ядра ARM7TDMI и ARM920T реализуют версию ARMv4T, большинство ядер семейства ARM9 — различные разновидности версии ARMv5 (например, ARM926EJ-S — это ARMv5TEJ). Все ядра семейства Cortex, за исключением Cortex-M0, относятся к разновидностям 7-й версии архитектуры (ядру Cortex-M0 соответствует версия ARMv6-M). Между собой ядра одной и той же версии и разновидности архитектуры могут отличаться конструкцией и объёмом кэш-памяти, наличием MMU, MPU, FPU и т.д.
Несмотря на то, что аббревиатура ARM расшифровывается как «A RISC Machine» («RISC-машина»), с самого начала это была не совсем типичная RISC-архитектура. С одной стороны, для RISC'а она имела не очень много регистров общего назначения (сейчас с формальной точки зрения у большинства разновидностей архитектуры их 31 штука, однако программисту доступны лишь 16 из них, причём три регистра имеют специальные функции; таким образом, «настоящих» регистров общего назначения с точки зрения программиста всего 13, в то время как целый ряд «настоящих» RISC-процессоров имеют их больше сотни). С другой стороны, уникальной особенностью этой архитектуры являлась возможнось исполнения любой команды при соблюдении заданного условия, отсутствующая не только у других RISC'ов, но и у CISC'ов (первые безусловно выполняемые команды в наборе ARM появились лишь в версии ARMv5). Кроме того, в командах обработки данных в ряде случаев возможно совмещение выполнения основной операции (например, сложения) со сдвигом. Наконец, инструкции чтения и записи памяти у ARM располагают развитым набором видов адресации, который превосходит по своим возможностям не только RISC'и, но и основную массу CISC-процессоров (среди последних единственными конкурентами в этом плане могли бы служить лишь появившиеся в 1970-х годах мини-ЭВМ PDP-11 и VAX-11 фирмы DEC).
Однако время показало ошибочность идеи, на которой базировались «настоящие» RISC-архитектуры: достижение высокой производительности через быстрое выполнение простых команд в противовес медленному выполнению сложных команд у CISC-процессоров (предполагалось, что, пока CISC выполнит одну свою сложную команду, RISC успеет выполнить несколько простых и в итоге обгонит CISC по производительности, хотя каждая команда индивидуально выполнит меньший объём действий, чем одна команда CISC'а). На практике оказалось, что даже очень неудачные с архитектурной точки зрения системы команд, например, Intel IA-32, можно выбирать из памяти, декодировать и исполнять чрезвычайно быстро (это наглядно демонстрирует пример самой Intel: несмотря на всю громоздкость и неэффективность её системы команд, именно её процессоры на сегодняшний день по производительности обгоняют любые другие кристаллы — правда, ценой очень сложной внутренней организации, ставшей возможной лишь благодаря использованию очень совершенной технологии производства). Неудивительно, что в своём развитии архитектура ARM постепенно эволюционировала в сторону CISC-процессоров.
На сегодняшний день у ARMа от RISCа у неё остались только две вещи: невозможность прямой работы с операндами в памяти и название. Некоторые имеющиеся у современных процессоров ARM инструкции (в частности, деление) недопустимы в «настоящих» RISC'ах в связи с их сложностью и переменным временем выполнения. Внедрение же системы команд Thumb-2 похоронило и другую важнейшую черту RISC-процессоров: одинаковую длину кода команды, призванную упростить выборку из памяти и декодирование инструкций.
Современные процессоры архитектуры ARM способны обрабатывать 8-, 16- и 32-разрядные целые числа. Возможность обработки вещественных чисел является необязательной и достигается с помощью сопроцессоров (которые, если присутствуют, выполняются на одном кристалле с собственно центральным процессором). Старшие модели способны работать с виртуальной памятью, поскольку имеют необходимое для этого устройство управления памятью (MMU). Более простые изделия не располагают MMU, но в некоторых случаях имеют устройство защиты памяти (MPU), не позволяющее реализовать виртуальную память, но обеспечивающее необходимую поддержку аппаратной защиты одних выполняющихся процессором задач от других.
Терминология и язык ассемблера
Компания ARM не всегда последовательна в выборе терминов для обозначения различных понятий и механизмов, описываемых в документации. Особенно это касается ранних версий архитектуры. Например, она использует термины interrupt, fault, abort, exception, trap без чёткого, недвусмысленного и неукоснительного их разграничения (хотя в документации на последние версии архитектуры применение этих слов стало более строгим и упорядоченным). Поэтому в статьях, посвящённых архитектуре ARM, для обозначения произвольного вида прерывания текущего выполняемого кода применяется терминпрерывание; он же используется, когда источником прерывания является внешнее устройство, что бывает ясно из контекста (внешние и быстрые прерывания IRQ и FIQ). Термин отказ применяется к прерываниям, возникающим в результате неудачной попытки обращения к памяти для выборки команды (отказ предвыборки — prefetch abort) или считывания либо записи данных (отказ данных — data abort). Терминисключение применяется в прерываниям, возникающим вследствие особых условий, возникших при выполнении программы, и прямо связанным с определёнными командами (например, попытка применения привилегированной инструкции в непривилегированном режиме). Термины сбой и ошибка применяются для обозначения условий, обнаруживаемых различным оборудованием (в первую очередь, устройством управления памятью и устройствм защиты памяти) и приводящих в итоге к возникновению отказа или исключения.