Архитектуры процессоров – Что такое архитектура процессора, какая бывает и используется в смартфонах
Собственная платформа. Часть 0.1 Теория. Немного о процессорах / Habr
Здравствуй, мир! Сегодня у нас серия статьей для людей со средними знаниями о работе процессора в которой мы будем разбираться с процессорными архитектурами (у меня спелл чекер ругается на слово Архитектурами/Архитектур, надеюсь я пишу слово правильно), создавать собственную архитектуру процессора и многое другое.
Принимаются любые замечания!
Исторически сложилось, что существуют много процессоров и много архитектур. Но многие архитектуры имеют схожести. Специально для этого появились «Группы» архитектур типа RISC, CISC, MISC, OISC (URISC). Кроме того они могут иметь разные архитектуры адресации памяти (фон Неймана, Гарвард). У каждого процессора есть своя архитектура. Например большинство современных архитектур это RISC (ARM, MIPS, OpenRISC, RISC-V, AVR, PIC** и т.д.), но есть архитектуры которые выиграли просто за счет других факторов (Например удобство/цена/популярность/etc) Среди которых x86, x86-64 (Стоит отметить, что x86-64 и x86 в последних процессорах используют микрокод и внутри них стоит RISC ядро), M68K. В чем же их отличие?
RISC
Reduced Instruction Set Computer — Архитектура с уменьшенным временем выполнения инструкций (из расшифровка RISC можно подумать, что это уменьшенное количество инструкций, но это не так). Данное направления развилось в итоге после того, как оказалось, что большинство компиляторов того времени не использовали все инструкции и разработчики процессоров решили получить больше производительности использую Конвейеры. В целом RISC является золотой серединой между всеми архитектурами.
Яркие примеры данной архитектуры: ARM, MIPS, OpenRISC, RISC-V
TTA
Что такое TTA? ТТА это Архитектура на основе всего одной инструкции перемещения из одного адреса памяти в другую. Данный вариант усложняет работу компилятора зато дает большую производительность. У данной архитектуры есть единственный недостаток: Сильная зависимость от шины данных. Именно это и стало причиной ее меньшей популярности. Надо отметить что TTA является разновидностью OISC.
Яркие примеры: MOVE Project
OISC (URISC)?
One Instruction Set Computer — Архитектура с единственной инструкцией. Например SUBLEQ. Такие архитектуры часто имеют вид: Сделать действие и в зависимости от результата сделать прыжок или продолжить исполнение. Зачастую ее реализация достаточно простая, производительность маленькая, при этом снова ограничение шиной данных.
Яркие примеры: BitBitJump, ByteByteJump, SUBLEQ тысячи их!
CISC
CISC — Complex Instruction Set Computer — ее особенность в увеличенных количествах действий за инструкцию. Таким образом можно было теоретически увеличить производительность программ за счет увеличения сложности компилятора. Но по факту у CISC плохо были реализованы некоторые инструкции т.к. они редко использовались, и повышение производительности не было достигнуто. Особенностью этой группы является еще ОГРОМНАЯ Разница между архитектурами. И несмотря на названия были архитектуры с маленьким количеством инструкций.
Яркие примеры: x86, M68K
Архитектура фон Неймана
Особенностью таких архитектур была общая шина данных и инструкций. Большинство современных архитектур это программный фон Нейман, однако никто не запрещает делать аппаратный Гарвард. У данной архитектуры большим недостатком является большое зависимости производительности процессора от шины. (Что ограничивает общую производительность процессора).
Архитектура гарварда
Особенность этой архитектуры является отдельная шина данных и инструкций. Дает большую производительность чем фон Нейман за счет возможности за один такт использовать обе шины (читать из шины инструкций и одновременно записывать в шинну данных), но осложняет архитектуру и имеет некоторые ограничения. В основном используется в микроконтроллерах.
Конвейеры
Что такое конвейеры? Если сказать очень глупым языком это несколько параллельных действий за один такт. Это очень грубо, но при этом отображает суть. Конвейеры за счет усложнения архитектуры позволяют поднять производительность. Например конвейер позволяет прочитать инструкцию, исполнить предыдущую и записать в шину данных одновременно.
На картинке более понятно, не правда?
IF — получение инструкции,
ID — расшифровка инструкции,
EX — выполнение,
MEM — доступ к памяти,
WB — запись в регистр.
Вроде все просто? А вот и нет! Проблема в том что например прыжок (jmp/branch/etc) заставляют конвейер начать исполнение (получение след. инструкции) заново таким образом вызывая задержку в 2-4 такта перед исполнение следующей инструкции.
Расширение существующих архитектур
Достаточно популярной техникой является добавление в уже существующую архитектуру больше инструкций через расширения. Ярким примером является SSE под x86. Этим же грешит ARM и MIPS и практически все. Почему? Потому что нельзя создать унивирсальную архитектуру.
Другим вариантом является использование других архитектур для уменьшения размера инструкций.
Яркий пример: ARM со своим Thumb, MIPS с MIPS16.
В видеокартах часто встречается много ядер и из-за этой особенности появилась потребность в дополнительных решениях. Если конвейеры можно встретить даже в микроконтроллерах то решения используемых в GPU встречаются редко. Например Masked Execution (Встречается в инструкциях ARM, но не в Thumb-I/II). Еще есть другие особенность: это уклон в сторону Floating Number (Числа с плавающей запятой), Уменьшение производительности в противовес большего количества ядер и т.д.
Masked Execution
Данный режим отличается от классических тем, что инструкции исполняются последовательно без использования прыжков. В инструкции хранится некоторое количество информации о том при каких условия эта инструкция будет исполнена и если условие не соблюдено то инструкция пропускается.
Но Зачем?
Ответ прост! Что бы не нагружать шину инструкций. Например в видеокартах можно загрузить тысячи ядер одной инструкцией. А если бы использовалась система прыжков то пришлось бы для каждого ядра ждать инструкцию из медленной памяти. Кеш частично решает проблему, но все еще не решает проблему полностью.
Здесь мы будем описывать несколько техник используемых в центральный процессорах и микроконтроллерах.
Прерывания
Прерывания это техника при которой исполняемый в данный момент код приостанавливается для выполнения какой-то другой задачи при каких-то условиях. Например при доступе в несуществующий участок памяти вызывается HardFault или MemoryFault прерывания или исключения. Или например если таймер отсчитал до нуля. Это позволяет не бездействовать пока нужно ждать какое-то событие.
Какие недостатки? Вызов прерывания это несколько тактов простоя и несколько при возврате из прерывания. Так же несколько инструкций в начале кода будет занято инструкциями для Таблицы прерываний.
Exception (исключения)
Но кроме прерываний еще существуют исключений которые возникают например при деления на ноль. Зачастую его совмещают с прерываниями и системными вызовами, как например в MIPS. Исключения не всегда присутствуют в процессоре например как в AVR или младших PIC
Системные вызовы
Системные вызовы используется в Операционных системах для того, чтобы программы могли общаться с операционной системой например просить ОС прочитать файл. Очень похоже на прерывания. Аналогично исключениям не всегда присутствуют в процессоре
Здесь описываются методы запрета доступа приложений к аппаратуре напрямую.
Привилегированный режим
Это режим в котором стартует процессор. В таком режиме программа или ОС имеют полный доступ к памяти в обход MMU/MPU. Все программы запускаются в непривилегированном режиме во избежания прямого доступа к аппаратным подсистемам программ для этого не предназначенных. Например вредоносным программам. В Windows ее часто называют Ring-0, а в *nix — системным. Не стоит путать Привелигированный пользователь и Привилегированный режим ибо в руте вы все еще не можете иметь прямой доступ к аппаратуре (можно загрузить системный модуль который позволит это сделать, но об этом чуть позже 🙂
MPU и MMU
MPU и MMU используется в современных системах чтобы изолировать несколько приложений. НО если MMU позволяет «передвинуть» память то MPU позволяет только блокировать доступ к памяти/запуск кода в памяти.
PIC (PIE)
Что такое PIE? (PIC не использую для избежания путаницы с МК PIC). PIE это техника благодаря которой компилятор генерирует код который будет работать в любом месте в памяти. Эта техника в совмещении с MPU позволяет компилировать высокие языки программирования которые будут работать и с MPU.
Популярная техника SIMD используется для того, что бы за один такт выполнять несколько действий над несколькими регистрами. Иногда бывают в качестве дополнений к основной архитектуре, например, как в MIPS, ARM со своими NEON/VFP/etc, x86 со своим SSE2.
Это техника Используется для оптимизации кода, генерируемого компилятором, с помощью пересортировки инструкций, увеличивая производительность процессора. Это позволяет использовать конвейер на полную.
Что такое регистр статуса? Это регистр который хранит состояние процессора. Например находится ли процессор в привилегированном режиме, чем закончилась операция последнего сравнения.
Используется в связке с Masked Execution. Некоторые разработчики специально исключают регистр статуса ибо он может являться узким местом как поступили в MIPS.
В MIPS нет отдельной инструкции загрузки константы в память, но есть инструкция addi и ori которая позволяет в связке с нулевым регистром ($0) эмулировать работу загрузки константы в регистр. В других архитектурах она присутствует. Я затронул эту тему, потому что она пригодиться нам в статьях с практикой.
Идут множество споров насчет того сколько должно быть операндов в арифметических инструкциях. Например в MIPS используется вариант с 3-мя регистрами. 2 операнда, 1 регистр записи. С другой стороны, использование двух операндов позволяет сократить код за счет уменьшения размера инструкции. Пример совмещения является MIPS16 в MIPS и Thumb-I в ARM. В плане производительности они практически идентичны (Если исключать размер инструкции как фактор).
Порядок байт. Возможно вам знакомы Выражения Big-Endian и Little-Endian. Они описывают порядок байт в инструкциях/в регистрах/в памяти/etc. Здесь думаю все просто :). Есть процессоры которые совмещают режимы, как MIPS, или которые используют одну систему команд, но имеют разный порядок байт, например ARM.
Итак, что такое битность процессора? Многие считают, что это битность шины данных, но это не так. Почему? В ранние переоды микроконтроллеров и микропроцессоров шина могла быть, например, 4-х битной, но передавала пакетами по 8 бит. Для программы казалось, что это 8-и битный режим, но это была иллюзия, как и сейчас. Например, в ARM SoC-ах часто применяют 128-и битную шину данных или инструкций.
Что такое сопроцессоры? Сопроцессоры являются элементами процессора или внешней микросхемой. Они позволяют исполнять инструкции, которые слишком громоздки для основной части процессора. Как яркий пример, сопроцессоры в MIPS для деления и умножения. Или например 387 для 80386, который добавлял поддержку чисел с плавающей запятой. А в MIPS сопроцессоров было много и они выполняли свои роли: контролировали прерывания, исключения и системные вызовы. Часто сопроцессоры имеют собственные инструкции и на системах, где этих инструкций нет, (пример ARM) эмулируют ее через Trap-ы (ловушки?). Несмотря на костыльность и маленькую производительность, они часто являются единственным выбором в микроконтроллерах.
Атомартность операций обеспечивает потоко-независимое исполнение за счет инструкций, которые выполняют несколько действий за один псевдотакт.
Вариант другого решения атомарность переферии. Например для установки ножки в STM32 в высокое и низкое состояние используется разные регистры, что позволяет иметь атомарность на уровне переферии.
Вы, навярняка, слышали о L1, L2, L3 и регистрах. Если коротко, процессор анализирует часть кода, чтобы предугадать прыжки и доступ в память и зараннее просит кеш получить эти данные из памяти. Кеш зачастую бывает прозрачным для программы, но бывают и исключения из этого правила. Например, в программных ядрах в ПЛИС используется програмный кеш.
И вы кончено слышали о такой вещи, как Cache Miss или промах по кешу. Это операция которая не была предусмотрена процессорам или процессор не успел закешировать эту часть памяти. Что достаточно часто является проблемой замедления доступа к памяти. Промах проходит незаметно для программы, но не останутся незаметными просадки в производительности.Так же переключения контекстов например при прерываниях тоже заставляет страдать кеш ибо небольшой код сбивает конвейер и кеш для собственных нужд.
В современных процессорах часто используется техника теневых регистров. Они позволяют переключаться между прерываниями и пользовательским кодом практически без задержек связанных с сохранением регистров.
Стек? Я видел Стек в .NET и в Java! Что же, Вы частично правы. Стек существует, но он никогда не был апаратным в большинства процессорах. Например в MIPS его по просту нет. Спросите КАК ТАК ТО?! Ответ прост. Стек это просто доступ к памяти которую не нужно резервировать (очень грубое определение). Стек используется для вызова функций, передачи аргументов, сохранения регистров для того чтобы востановить их после выполнения функции и т.д.
Спросите тогда что такое куча (Heap)? Куча это память размером намного больше чем стек (Стек обычно ~1MB). В хипе храниться все глобальное. Например все указатели полученные с помощю Malloc указывают на часть куча. А указатели хранятся в стеке или в регистрах. С помощью инструкций загрузки данных относительно регистра можно ускорить работу стека и других доступов к памяти по типу стека, поскольку не нужно постоянно использовать операции PUSH/POP, INC/DEC или ADDI, SUBI (добавить константу), чтобы получить данные глубже по стеку, а можно просто использовать доступ относительно стека с отрицательным смещением.
Не буду описывать регистры слишком подробно. Это мы затронем в практической статье.
В x86 регистров достаточно мало. В MIPS используется увеличенное количество регистров, а именно 31 ($0 имеет значение всегда равное нулю). В процессоре университета Беркли использовались регистровые окна, которые жестки ограничивали вложенность функций, при этом имея лучшую производительность. В других же, таких как AVR, ограничили использование регистров. Для примера: три 16-битных можно трактовать как шесть восьмибитных, где первые 16ть недоступны при некоторых операциях. Я считаю, что лучший метод был выбран MIPS-ом. Это мое сугубо личное мнение.
Что такое выравнивание? Оставлю-ка я этот вопрос вам 🙂
Это конец первой главы нулевой части. Вся серия будет крутиться вокруг темы создания собственного процессора. Собственной операционной системы. Собственного ассемблера. Собственного компилятора и много чего другого.
Нулевые части будут посвящены теории. Я сомневаюсь что доведу всю серию до победного конца, но попытка не пытка! )
коротко о том как устроен CPU
Доброго времени суток.
В этой статье вы получите развернутый ответ на вопрос «что такое архитектура процессора». Также после ее прочтения вы узнаете о разновидностях архитектуры и научитесь различать их обозначения.
Объяснение термина
Под архитектурой процессора понимается комбинация из:
- Микроархитектуры — способ ее реализации, то есть составные части проца и методы их взаимодействия между собой и описанными ниже компонентами;
- АНК — набор команд, включая модель исполнения, регистры устройства, форматы данных и адресов.
- Микрокода — делает понятными команды уровня АНК для микроархитектуры.
Если рассматривать архитектуру со стороны программистов, то его можно объяснить как совместимость с определенным набором команд (допустим, девайсы, соответствующие командам Intel x86), их структуру (например, как организована система адресации или регистровая память), а также метод исполнения (к примеру, счетчик команд).
Смотря на архитектуру как на аппаратную составляющую компьютера, мы увидим другую картину. Это определенный набор характеристик, которому соответствует целое семейство процессоров, то есть их внутренняя конструкция.
Классификация архитектур
По скорости и количеству выполняемых команд архитектуры делятся на:
- CISC. На английском языке расшифровывается как «Complex Instruction Set Computing», то есть «Комплексный набор команд». Устройствам этого типа свойственно большое количество режимов адресации и команд разного формата и длины, а также сложная кодировка инструкции.
- RISC. Первое слово в расшифровке заменено на «Reduced», что на нашем языке — «Сокращенный». Это значит, что все команды имеют одинаковый формат и кодировку.
- MISC (Multipurpose — Многоцелевой ). База элементов делится на две части, которые находятся или в одном корпусе, или в отдельных. Главной выступает RISC CPU. Он дополнен другой частью — постоянным запоминающим устройством микропрограммного управления. Системе присущи характеристики CISC. Большинство команд выполняет первая часть, а команды расширения преобразуются в адрес микропрограммы.
Также существует классификация процессоров, и соответственно архитектур, по назначению:
- Графические. Как видеокарта отвечает за визуализацию объектов на экране.
- Математические. Нацелены на расширение набора команд, выполняемых центральным процессором, для решения различных математических задач.
- Цифровые сигнальные. Специализированные устройства, предназначенные для обработки оцифрованных сигналов.
С физической точки зрения девайсы разделяются по количеству ядер, которые отвечают за выполнение команд. Если их больше одного, устройства называются многоядерными.
Разбор обозначений
В теме о процессорах вы можете столкнуться с их цифровыми обозначениями типа x64, x86 и пр. Давайте разберемся, что все это значит. Разложу по полочкам.
8086 и компания
В 1978 году компания Intel выпустила 16-битный процессор, получивший название 8086.
После него выходили другие модели, в наименованиях которых первые две цифры оставались прежними, а последние менялись на 88, 186, 286, 386, 486 и прочие.
Вот пример i386.
Как вы заметили, почти все имена заканчиваются одинаково, поэтому все семейство объединили под условное обозначение x86. Оно устоялось среди пользователей и применялось даже когда Интел начала давать своим продуктам словарные названия типа Пентиум, Кор, Атом и т. д. Переняли эту «моду» и другие производители устройств, совместимых с этим семейством, — IBM, VIA, AMD, Cyrix и др.
Чаще всего это обозначение сейчас используется по отношению к 32-битным процессорам. Они также могут называться, к примеру, i386, i486, i586, когда требуется дать более точные сведения о наборе инструкций.
Совершенствование до 64 бит
Компания Intel модернизировала процессоры с 16-битной шиной до 32 бит. Однако AMD приложила усилия к усовершенствованию их до х64. Первый такой продукт она выпустила в 2003 году, не став заморачиваться над названием — просто «AMD64».
Чтобы показать повышенную разрядность процессоров, стали к обозначению «x86» добавлять «64», к примеру, x86_64.
Интел решила выделиться, помечая такие устройства сначала как «IA-32e», а потом «EM64T». Но сейчас чаще можно встретить «Intel 64».
Как узнать архитектуру?
В случае с новыми ЦП прочитать их характеристики можно в инструкции или непосредственно на коробке. Но что делать, если вы берете устройство с рук? Или может быть хотите знать, какая архитектура у вашего проца? Выяснить это можно несколькими способами.
Средства системы
Выполните следующие действия:
- Откройте командную строку через меню «Пуск — Программы — Стандартные» или другим удобным способом.
- Впишите в нее слово systeminfo.
- Нажмите Enter.
Перед вами появятся сведения об операционке, среди которой будет и архитектура процессора.
- Щелкните правой кнопкой мыши на значке «Мой компьютер»;
- Откройте «Свойства»;
- Перейдите в «Диспетчер устройств»;
- Кликните пункт «Процессор».
И тоже получите все данные о нем.
Сторонние программы
Одной из хороших программ, помогающих узнать все о проце, является CPU-Z.
Она бесплатная и распространенная, поэтому вы без проблем ее отыщите и скачаете.
Вам нужно лишь установить и запустить ее, чтобы посмотреть необходимую информацию.
В качестве альтернативного варианта могу предложить еще одну достойную прогу — AIDA 64. Она платная (Есть триал период), зато может рассказать все о вашем железе в целом, не только о ЦП.
Получить сведения о процессоре через нее можно, перейдя по разделам «Компьютер — Системная плата — ЦП».
На этом буду заканчивать.
Чтобы не забывать заглядывать ко мне чаще и узнавать больше новой интересной информации, подписывайтесь на обновления.
До скорого.
Микроархитектура — Википедия
Схема, иллюстрирующая место микроархитектурного уровня в многоуровневой структуре компьютера.В компьютерной инженерии микроархитектура (англ. microarchitecture; иногда сокращается до µarch или uarch), также называемая организация компьютера — способ, которым данная архитектура набора команд (ISA, АНК) реализована в процессоре. Каждая АНК может быть реализована с помощью различных микроархитектур[1].
Реализации могут варьироваться в зависимости от целей конкретной разработки или в результате технологических сдвигов[2].
Архитектура компьютера является комбинацией микроархитектуры, микрокода и АНК.
Связь с микрокодом и архитектурой набора команд[править | править код]
АНК — это приблизительно то же самое, что и модель программирования, с точки зрения программиста на языке ассемблера или создателя компилятора. АНК, в числе прочего, включает модель исполнения, регистры процессора, форматы адресов и данных, в то время, как микроархитектура включает составные части процессора и способы их взаимосвязи и взаимодействия для реализации АНК.
Однако во многих случаях работа элементов микроархитектуры контролируется микрокодом, встроенным в процессор. В случае наличия слоя микрокода в архитектуре процессора он выступает своеобразным интерпретатором, преобразуя команды уровня АНК в команды уровня микроархитектуры. При этом различные системы команд могут быть реализованы на базе одной микроархитектуры.[3]
Микроархитектура машины обычно представляется в виде диаграмм определённой степени детализации, описывающие взаимосвязи различных микроархитектурных элементов, которые могут быть чем угодно: от отдельных вентилей и регистров до целых АЛУ и даже более крупных элементов. На этих диаграммах обычно выделяют тракт данных (где размещены данные) и тракт управления (который управляет движением данных) [4].
Машины с различной микроархитектурой могут иметь одинаковую АНК и, таким образом, быть пригодными для выполнения тех же программ. Новые микроархитектуры и/или схемотехнические решения вместе с прогрессом в полупроводниковой промышленности позволяют новым поколениям процессоров достигать более высокой производительности, используя ту же АНК.
Поколения процессоров Intel-
Блок-схема микроархитектуры первого в мире микропроцессора Intel 4004.
Конвейерный тракт данных является наиболее широко используемым в современных микроархитектурах. Эта техника используется в большинстве современных микропроцессоров, микроконтроллеров и цифровых сигнальных процессоров. Конвейерная архитектура позволяет нескольким инструкциям перекрываться в исполнении, что напоминает сборочную линию. Конвейер включает несколько различных стадий, выбор которых является фундаментальным при разработке микроархитектуры.
Некоторые из этих стадий включают выбор инструкций, декодирование инструкций, исполнение и запись результата. Некоторые архитектуры включают другие стадии, такие как доступ к памяти. Дизайн конвейера — один из центральных вопросов проектирования микроархитектуры.
Устройства исполнения также являются ключевыми для микроархитектуры. Они включают арифметико-логические устройства, устройства обработки чисел с плавающей точкой, устройства выборки и хранения, прогнозирование ветвления, параллелизм на уровне данных (SIMD). Эти блоки производят операции или вычисления процессора. Выбор числа блоков исполнения, их задержек, пропускной способности и способа соединения памяти с системой также являются микроархитектурными решениями.
Проектные решения уровня системы, такие как включать или нет периферийные устройства типа контроллеров памяти, могут считаться частью процесса разработки микроархитектуры, поскольку они содержат решения по уровню производительности и способам соединения этих периферийных устройств.
В отличие от архитектурного дизайна, где достижение определённого уровня производительности является главной целью, проектирование микроархитектуры уделяет большее внимание другим ограничениям. Поскольку дизайн микроархитектуры прямо влияет на то, что происходит в системе, внимание должно быть уделено следующим проблемам:
- Площадь/стоимость чипа
- Потребление энергии
- Сложность логики
- Простота соединений
- Технологичность
- Простота отладки
- Тестируемость.
В общем случае, все ЦПУ, одночиповые микропроцессоры и многочиповые реализации выполняют программы, производя следующие шаги:
- Чтение инструкции и её декодирование
- Поиск всех связанных данных, необходимых для обработки инструкции
- Обработка инструкции
- Запись результатов
Эта последовательность выглядит просто, но осложняется тем фактом, что иерархия памяти (где располагаются инструкции и данные), которая включает в себя кэш, основную память и энергонезависимые устройства хранения, такие как жёсткие диски, всегда была медленнее самого процессора. Шаг (2) часто привносит длительные (по меркам ЦПУ) задержки, пока данные поступают по компьютерной шине. Значительная часть исследований посвящена разработкам, которые позволяют избегать таких задержек, насколько это возможно. В течение многих лет главной целью было выполнять больше инструкций параллельно, увеличивая таким образом эффективную скорость выполнения программ. Эти усилия вызывают усложнение логики и структуры схем. Изначально эти техники могли быть реализованы только на дорогих мейнфреймах и суперкомпьютерах вследствие большого объёма схем, необходимого для этого. По мере того, как полупроводниковая промышленность развивалась, всё большее количество этих техник могло быть реализовано в единственном полупроводниковом чипе.
Краткий обзор микроархитектурных концепций, распространённых в современных процессорах.
Выбор системы команд[править | править код]
За годы системы команд развились от изначально очень простых до иногда очень сложных (в определённых отношениях). В последнее время наиболее распространёнными становятся архитектуры RISC, VLIW , EPIC. Архитектуры, имеющие дело с параллелизмом на уровне данных, включают SIMD и векторные процессоры. Следует отметить, что многие используемые в этой области термины недостаточно содержательны. Особенно это касается «CISC»: многие ранние разработки, по традиции относимые к этому классу архитектуры системы команд, на практике гораздо проще современных RISC.
Однако выбор системы команд в значительной степени определяет сложность реализации высокопроизводительных устройств. Известной стратегией, использовавшейся при разработке первых RISC-процессоров, было упрощение инструкций до минимума индивидуальной семантической сложности в сочетании с высокой упорядоченностью и простотой кодирования. Такие единообразные инструкции просто извлекались, декодировались и исполнялись по принципу конвейера, позволяя реализовывать простую стратегию сокращения числа логических уровней для достижения более высоких частот функционирования. При этом кэш-память инструкций компенсировала естественно низкую плотность кода при высоких частотах работы, а большие наборы регистров использовались для исключения, насколько это возможно, обращений к (медленной) памяти.
Конвейеризация инструкций[править | править код]
Одна из первых и наиболее мощных техник повышения производительности — это использование конвейера инструкций. Ранние модели процессоров должны были выполнить все описанные выше шаги для одной инструкции, прежде чем перейти к следующей. Большие части схемы оставались неиспользуемыми на любом отдельном шаге. Например, часть схемы, осуществляющая декодирование инструкции, останется неиспользуемой во время её исполнения и т. д.
Конвейеры увеличивают производительность, позволяя нескольким инструкциям прокладывать свой путь через процессор в одно и то же время. В том же простом примере процессор начал бы декодировать (шаг 1) новую инструкцию, в то время как предыдущая ожидала бы результатов. В этом случае до четырёх инструкций могло находиться в обработке единовременно, позволяя процессору выглядеть в четыре раза быстрее. В то же время, любая отдельная инструкция выполняется в течение того же самого времени, поскольку существуют те же четыре шага, хотя в целом процессор выдаёт больше обработанных инструкций и может работать на значительно более высоких тактовых частотах.
RISC сделал конвейеры меньше и значительно проще в конструировании, отделив каждый этап обработки инструкций, зафиксировав длину машинной инструкции и сделав время их выполнения одинаковым — один такт или как максимум один цикл доступа к памяти (из-за выделения инструкций load и store). Процессор в целом функционирует на манер сборочной линии с инструкциями, поступающими с одной стороны и результатами, выходящими с другой. Из-за уменьшенной сложности классического RISC-конвейера, конвейерезированное ядро и кэш инструкций могли быть размещены на кристалле того же размера, который содержал бы лишь ядро в случае CISC архитектуры. Это и было истинной причиной того, что RISC был быстрее. Ранние разработки, такие как SPARC и MIPS часто работали в 10 раз быстрее CISC решений Intel и Motorola той же тактовой частоты и цены.
Конвейеры никоим образом не ограничиваются RISC разработками. В 1986 году флагманская реализация VAX (VAX 8800) была сильно конвейеризирована, несколько опережая коммерческие реализации MIPS и SPARC. Большинство современных процессоров (даже встроенных) конвейеризированы, а процессоры с микрокодом но без конвейеров можно встретить только среди наиболее ограниченных по площади встроенных решений. Большие CISC машины, от VAX 8800 до современных Pentium 4 и Athlon используют как микрокод, так и конвейеры. Улучшения в конвейеризации и кэшировании — два важнейших микроархитектурных сдвига, позволяющих производительности процессоров идти в ногу со схемными технологиями, на которых они основаны.
Кэш[править | править код]
Когда улучшения в производстве чипов позволили размещать на кристалле ещё больше логики, начался поиск способов применения этого ресурса. Одним из направлений стало размещение прямо на кристалле чипа очень быстрой кэш памяти, доступ к которой происходил всего за несколько тактов процессора, в отличие от большого их количества при работе с основной памятью. При этом процессор также включал контроллер кэша, автоматизировавший чтение и запись данных в кэш.
RISC процессоры стали снабжаться кэшем в середине-конце 1980-х (часто объёмом всего 4 КБ). Этот объём постоянно возрастал, и современные процессоры имеют по крайней мере 512 КБ, а наиболее мощные 1,2,4,6,8 и даже 12 МБ кэш памяти, организованной в иерархию. В целом, больший объём кэша означает большую производительность вследствие меньшего времени простоя процессора.
Кэш память и конвейеры хорошо дополняют друг друга. Если первоначально не имело смысл создавать конвейеры, работающие быстрее времени доступа к основной памяти, то с появлением кэша конвейер стал ограничен лишь более короткими задержками доступа к быстрой памяти на чипе. В итоге это позволяло увеличивать тактовые частоты процессоров.
Прогнозирование ветвления[править | править код]
Одно из препятствий в достижении более высокой производительности за счёт параллелизма на уровне данных возникает вследствие остановки и переполнения конвейера при ветвлениях. Обычно до конца неизвестно, будет ли выбрана ветвь условного ветвления в конвейере, поскольку ветвление зависит от результата, который берётся из регистра. С того времени, как декодер инструкций процессора выяснил, что натолкнулся на инструкцию, вызывающую ветвление до того, как определяющее решение значение может быть прочитано из регистра, конвейер необходимо остановить на несколько циклов. Если ветвь выбрана, то его нужно заполнить. Одновременно с ростом частоты процессоров увеличивалась глубина конвейеров и современные разработки имеют до 20 стадий. С учётом того, что в среднем каждая пятая инструкция вызывает ветвление, без дополнительных мер возникнет значительный простой.
Такие техники, как прогнозирование ветвлений и спекулятивное исполнение используются для уменьшения этих потерь.
Прогнозирование ветвления заключается в том, что оборудование делает обоснованное решение о том, какая из ветвей будет выбрана для исполнения. Современные разработки имеют достаточно сложные статистические системы прогнозирования, которые используют результаты последних ветвлений для предсказания будущих с большой точностью. Такие решения позволяют аппаратуре предварительно считать инструкции, не дожидаясь результата из регистра.
Спекулятивное исполнение — это дальнейшее развитие идеи, при котором инструкции из предсказанного пути не только считываются, но и исполняются до того, как становится точно известно, будет ли выбрана ветвь. Это помогает достичь высокой производительности, если решение было правильным, но вызывает риск большой потери времени, если решение ошибочно и инструкции нужно отменить.
Суперскалярность[править | править код]
Изначально, даже процессоры конвейерной микроархитектуры могли запускать только одну инструкцию в каждый момент времени. Очевидно, что программы могли бы выполняться быстрее, если запускать несколько инструкций одновременно. Именно этого достигают суперскалярные микроархитектуры за счёт использования нескольких одинаковых функциональных блоков, таких как АЛУ. Такие архитектуры появились когда на схеме стало возможно размещать больше элементов и к концу 1980-х они вышли на рынок.
В современных разработках часто можно видеть два устройства выборки, одно устройство хранения (многие инструкции не имеют результатов для хранения), два или более целочисленных АЛУ, два или более устройства обработки чисел с плавающей точкой, устройство SIMD и другие. Логика управления значительно усложнилась, обеспечивая чтение из памяти большого количества инструкций, распределение их по свободным функциональным блокам, сбор и упорядочение результатов.
Внеочередное исполнение[править | править код]
Появление кэшей сократило частоту и длительность простоев из-за ожидания чтения данных из иерархии памяти, но не устранило их совсем. В ранних разработках отсутствие данных в кэше вынуждало контроллер кэша остановить процессор и ожидать. Очевидно, что в программе почти всегда есть другие инструкции, данные для которых доступны в кэше в данный момент. Внеочередное исполнение позволяет выполнить эти инструкции в то время, как предыдущие ожидают данных из кэша. Затем результаты упорядочиваются так, что сохраняется предусмотренный в программе порядок. Эта техника также используется, чтобы избегать других остановок вследствие зависимых операндов, как в случае инструкций, ожидающих результатов длинных операций с плавающей точкой или других многоцикловых операций.
Переименование регистров[править | править код]
Переименование регистров — это техника, позволяющая избежать ненужного последовательного выполнения инструкций программы вследствие использования этими инструкциями одних и тех же регистров. Предположим, имеется две группы инструкций, использующих один регистр. Одна группа инструкций должна предшествовать другой для того, чтобы освободить этот регистр. Но если вторую группу инструкций перенаправить на другой однотипный регистр, то обе группы могут выполняться параллельно.
Многопроцессорность и многопоточность[править | править код]
В определённый период разработчики компьютеров оказались в тупике, связанном с растущим несоответствием между рабочими частотами ЦПУ и временем доступа к DRAM. Ни одна из технологий, эксплуатирующих параллелизм уровня инструкций внутри одной программы не могла компенсировать длительные остановки, возникающие когда данные должны быть прочитаны из основной памяти. К тому же, большое число транзисторов и высокие тактовые частоты, необходимые для более совершенных способов организации параллелизма инструкций, требовали таких уровней рассеивания тепла, что устройства нельзя было дёшево охлаждать. По этим причинам новые поколения компьютеров стали использовать более высокие уровни параллелизма, существовавшие вне одной программы или одного программного потока.
Эта тенденция также известна как производительные вычисления (throughput computing) и возникла в своё время на рынке мэйнфреймов, где OLTP требовала не столько высокой скорости обработки отдельной транзакции, сколько возможности обрабатывать большое их число одновременно. С распространением приложений, базирующихся на использовании транзакций, таких, как сетевая маршрутизация и обслуживание веб-сайтов, в компьютерной индустрии вновь появился акцент на ёмкости и пропускной способности.
Одним из способов достижения параллелизма такого вида являются многопроцессорные системы — компьютеры с несколькими ЦПУ. Когда-то ограничивавшиеся мэйнфреймами и суперкомпьютерами, многопроцессорные системы в виде миниатюрных (2-8)-процессорных серверов становятся[источник не указан 1858 дней] обычным явлением в малом бизнесе. Для крупных корпораций характерны масштабные мультипроцессоры (16-256). В 1990-е появились и многопроцессорные персональные компьютеры.
По мере дальнейшего уменьшения размера транзисторов (с соответствующим увеличением их числа в интегральных микросхемах) получали распространение многоядерные процессоры, у которых несколько физических процессорных ядер размещаются в единственном кремниевом чипе. Сначала такие решения предназначались для рынка встроенных систем, где более простые и компактные архитектуры позволяли разместить несколько экземпляров ЦПУ на одном кристалле. К 2005 году полупроводниковая технология позволила поместить в один корпус два высокопроизводительных универсальных процессора. В некоторых проектах, таких, как UltraSPARC T1 Sun Microsystems, разработчики вернулись к более простым микроархитектурам (скалярным с исполнением по порядку) с тем, чтобы разместить больше процессоров на одном кристалле.
Многопоточность является ещё одной технологией, получившей распространение сравнительно недавно[когда?]. Суть её в том, что когда процессору необходимо получить данные из медленной основной памяти, он вместо того, чтобы простаивать в ожидании этих данных, переключается на выполнение другого программного потока, который готов к исполнению. Не улучшая время выполнения отдельной программы, многопоточность тем не менее увеличивает пропускную способность всей системы. Концептуально операции многопоточного процессора эквивалентны переключению контекста (процесса или потока) на уровне операционной системы. Различие состоит в том, что многопоточный процессор производит переключение активного потока за один такт, в то время как программная реализация на уровне ОС требует на несколько порядков больших временных затрат. Это достигается путём аппаратной репликации регистрового контекста для каждого потока.
Дальнейшее развитие микроархитектур в этом направлении связано с одновременной многопоточностью. При этом суперскалярный процессор выполняет инструкции разных программ и потоков одновременно.
- ↑ Miles Murdocca, Vincent Heuring. Computer Architecture and Organization, An Integrated Approach (англ.). — Wiley, 2007. — P. 151.
- ↑ Michael J. Flynn. Computer Architecture Pipelined and parallel Processor Design (англ.). — Jones and Bartlett (англ.)русск., 2007. — P. 1—3.
- ↑ Andrew S. Tanenbaum. Structured Computer Organization (неопр.). — Fifth Edition. — 2007. — ISBN 0131485210.
- ↑ 1 2 John L. Hennessy and David A. Patterson. Computer Architecture: A Quantitative Approach (англ.). — Forth Edition. — Morgan Kaufmann Publishers, Inc, 2006. — ISBN 0123704901.
конец 80-х — начало 2000-х / ua-hosting.company corporate blog / Habr
Продолжая тему первой статьи — история эволюции процессоров с конца XX века по начала XXI века.Во многих процессорах 80-х годов использовалась архитектура CISC (Complex instruction set computing). Чипы были довольно сложными и дорогими, а также не достаточно производительными. Возникла необходимость в модернизации производства и увеличения количества транзисторов.
Архитектура RISC
В 1980 году стартовал проект Berkeley RISC, которым руководили американские инженеры Дэвид Паттерсон и Карло Секвин. RISC (restricted instruction set computer) — архитектура процессора с увеличенным быстродействием благодаря упрощенным инструкциям.
Руководители проекта Berkeley RISC — Дэвид Паттерсон и Карло Секвин
После нескольких лет плодотворной работы, на рынке появилось несколько образцов процессоров с сокращенным набором команд. Каждая инструкция платформы RISC была простой и выполнялась за один такт. Также присутствовало намного больше регистров общего назначения. Кроме того использовалась конвейеризация с упрощенными командами, что позволяло эффективно наращивать тактовую частоту.
RISC I вышел в 1982 году и содержал более чем 44 420 транзисторов. Он имел всего 32 инструкции и работал на частоте 4 МГц. Следующий за ним RISC II насчитывал 40 760 транзисторов, использовал 39 инструкций и был более быстрым.
Процессор RISC II
Процессоры MIPS: R2000, R3000, R4000 и R4400
Архитектура процессоров MIPS (Microprocessor without Interlocked Pipeline Stages) предусматривала наличие вспомогательных блоков в составе кристалла. В MIPS использовался удлиненный конвейер.
В 1984 году группа исследователей во главе с американским ученым Джоном Хеннесси основала компанию, проектирующую микроэлектронные устройства. MIPS лицензировала микропроцессорную архитектуру и IP-ядра для устройств умного дома, сетевых и мобильных применений. В 1985 году вышел первый продукт компании — 32-битный R2000, который в 1988 году был доработан в R3000. У обновленной модели имелась поддержка многопроцессорности, кэш-памяти инструкций и данных. Процессор нашел применение в SG-сериях рабочих станций разных компаний. Также R3000 стал основой игровой консоли Sony PlayStation.
Процессор R3000
В 1991 году вышла линейка нового поколения R4000. Данный процессор обладал 64-битной архитектурой, встроенным сопроцессором и работал на тактовой частоте 100 МГц. Внутренняя кэш-память составляла 16 Кб (8 Кб кэш-команд и 8 Кб кэш-данных).
Через год вышла доработанная версия процессора — R4400. В этой модели увеличился кэш до 32 Кб (16 Кб кэш-команд и 16 Кб кэш-данных). Процессор мог работать на частоте 100 МГц — 250 МГц.
Процессоры MIPS: R8000 и R10000
В 1994 году появился первый процессор с суперскалярной реализацией архитектуры MIPS — R8000. Емкость кэш-памяти данных составляла 16 Кб. У этого CPU была высокая пропускная способность доступа к данным (до 1.2 Гб/с) в сочетании с высокой скоростью выполнения операций. Частота достигала 75 МГц — 90 МГц. Использовалось 6 схем: устройство для целочисленных команд, для команд с плавающей запятой, три вторичных дескриптора кэш-памяти ОЗУ и кэш-контроллер ASIC.
Процессор R8000
В 1996 году вышла доработанная версия — R10000. Процессор включал в себя 32 Кб первичной кэш-памяти данных и команд. Работал CPU на частоте 150 МГц — 250 МГц.
В конце 90-х компания MIPS занялась продажей лицензий на 32-битную и 64-битную архитектуры MIPS32 и MIPS64.
Процессоры SPARC
Ряды процессоров пополнили продукты компании Sun Microsystems, которая разработала масштабируемую архитектуру SPARC (Scalable Processor ARChitecture). Первый одноименный процессор вышел в конце 80-х и получил название SPARC V7. Его частота достигала 14.28 МГц — 40 МГц.
В 1992 году появилась следующая 32-битная версия под названием SPARC V8, на базе которой был создан процессор microSPARC. Тактовая частота составляла 40 МГц — 50 МГц.
Над созданием следующего поколения архитектуры SPARC V9 с компанией Sun Microsystems совместно работали Texas Instruments, Fujitsu, Philips и другие. Платформа расширилась до 64 бит и являлась суперскалярной с 9-стадийным конвейером. SPARC V9 предусматривала использование кэш-памяти первого уровня, разделенного на инструкции и данные (каждая объемом по 16 Кб), а также второго уровня емкостью 512 Кб — 1024 Кб.
Процессор UltraSPARC III
Процессоры StrongARM
В 1995 году стартовал проект по разработке семейства микропроцессоров StrongARM, реализовавших набор инструкций ARM V4. Эти CPU представляли собой классическую скалярную архитектуру с 5-стадийным конвейером, включая блоки управления памятью и поддерживая кэш-память инструкций и данных объемом по 16 Кб каждая.
StrongARM SA-110
И уже в 1996 году был выпущен первый процессор на базе StrongARM — SA-110. Он работал на тактовых частотах 100 МГц, 160 МГц или 200 МГц.
Также на рынок вышли модели SA-1100, SA-1110 и SA-1500.
Процессор SA-110 в Apple MessagePad 2000
Процессоры POWER, POWER2 и PowerPC
В 1985 году компания IBM начала разработку RISC-архитектуры следующего поколения в рамках проекта America Project. Разработка процессора POWER (Performance Optimization With Enhanced RISC) и набора инструкций для него длилась 5 лет. Он был весьма производительный, но состоял из 11 различных микросхем. И поэтому в 1992 году вышел другой вариант процессора, что умещался в одном чипе.
Чипсет POWER
В 1991 году совместными усилиями альянса компаний IBM, Apple и Motorola была разработана архитектура PowerPC (сокращенно PPC). Она состояла из базового набора функций платформы POWER, а также поддерживала работу в двух режимах и была обратно совместима с 32-битным режимом работы для 64-разрядной версии. Основным назначением являлись персональные компьютеры.
Процессор PowerPC 601 использовался в Macintosh.
Процессор PowerPC
В 1993 году был представлен POWER2 с расширенным набором команд. Тактовая частота процессора варьировалась от 55 МГц до 71.5 МГц, а кэш-память данных и инструкций была 128-256 Кб и 32 Кб. Микросхемы процессора (их было 8) содержали 23 миллиона транзисторов, а изготавливался он по 0.72-микрометровой CMOS-технологии.
В 1998 году IBM выпустила третью серию процессоров POWER3 на 64 бита, полностью совместимых со стандартом PowerPC.
В период с 2001 по 2010 вышли модели POWER4 (до восьми параллельно выполняющихся команд), двухядерные POWER5 и POWER6, четырех-восьми ядерный POWER7.
Процессоры Alpha 21064A
В 1992 году компания Digital Equipment Corporation (DEC) выпустила процессор Alpha 21064 (EV4). Это был 64-разрядный суперскалярный кристалл с конвейерной архитектурой и тактовой частотой 100 МГц — 200 МГц. Изготовлен по 0,75-мкм техпроцессу, со внешней 128-разрядной шиной процессора. Присутствовало 16 Кб кэш-памяти (8 Кб данных и 8 Кб инструкций).
Следующей моделью в серии стал процессор 21164 (EV5), который вышел в 1995 году. Он обладал двумя целочисленными блоками и насчитывал уже три уровня кэш-памяти (два в процессоре, третий — внешний). Кэш-память первого уровня разделялась на кэш данных и кэш инструкций объемом по 8 Кб каждый. Объем кэш-памяти второго уровня составлял 96 Кб. Тактовая частота процессора варьировалась от 266 МГц до 500 МГц.
DEC Alpha AXP 21064
В 1996 году вышли процессоры Alpha 21264 (EV6) с 15,2 миллионами транзисторов, изготовленные по 15,2-мкм техпроцессу. Их тактовая частота составляла от 450 МГц до 600 МГц. Целочисленные блоки и блоки загрузки/сохранения были объединены в единый модуль Ebox, а блоки вычислений с плавающей запятой — в модуль Fbox. Кэш первого уровня сохранил разделение на память для инструкций и для данных. Объем каждой части составлял 64 Кб. Объем кэш-памяти второго уровня был от 2 Мб до 8 Мб.
В 1999 году DEC купила компания Compaq. В результате чего большая часть производства продукции, использовавшей Alpha, была передана компании API NetWorks, Inc.
Процессоры Intel P5 и P54C
По макету Винода Дхама был разработан процессор пятого поколения под кодовым названием P5. В 1993 году CPU вышли в производство под названием Pentium.
Процессоры на ядре P5 производились с использованием 800-нанометрового техпроцесса по биполярной BiCMOS-технологии. Они содержали 3,1 миллиона транзисторов. У Pentium была 64-битная шина данных, суперскалярная архитектура. Имелось раздельное кэширование программного кода и данных. Использовалась кэш-память первого уровня объемом 16 Кб, разделенная на 2 сегмента (8 Кб для данных и 8 Кб для инструкций). Первые модели были с частотами 60 МГц — 66 МГц.
Процессор Intel Pentium
В том же году Intel запустила в продажу процессоры P54C. Производство новых процессоров было переведено на 0,6-мкм техпроцесс. Скорость работы процессоров составляла 75 МГц, а с 1994 года — 90 МГц и 100 МГц. Через год архитектура P54C (P54CS) была переведена на 350-нм техпроцесс и тактовая частота увеличилась до 200 МГц.
В 1997 году P5 получила последнее обновление — P55C (Pentium MMX). Появилась поддержка набора команд MMX (MultiMedia eXtension). Процессор состоял из 4,5 миллиона транзисторов и производится по усовершенствованной 280-нанометровой CMOS-технологии. Объем кэш-памяти первого уровня увеличился до 32 Кб (16 Кб для данных и 16 Кб для инструкций). Частота процессора достигла 233 МГц.
Процессоры AMD K5 и K6
В 1995 году компания AMD выпустила процессор K5. Архитектура представляла собой RISC-ядро, но работала со сложными CISC-инструкциями. Процессоры изготавливались с использованием 350- или 500-нанометрового техпроцесса, с 4,3 миллионами транзисторов. Все K5 имели пять целочисленных блоков и один блок вычислений с плавающей запятой. Объем кэш-памяти инструкций составлял 16 Кб, а данных — 8 Кб. Тактовая частота процессоров варьировалась от 75 МГц до 133 МГц.
Процессор AMD K5
Под маркой K5 выпускалось два варианта процессоров SSA/5 и 5k86. Первый работал на частотах от 75 МГц до 100 МГц. Процессор 5k86 работал на частотах от 90 МГц до 133 МГц.
В 1997 году компания представила процессор K6, архитектура которого существенно отличалась от K5. Процессоры изготавливались по 350-нанометровому техпроцессу, включали в себя 8,8 миллионов транзисторов, поддерживали изменение порядка выполнения инструкций, набор команд MMX и блок вычислений с плавающей запятой. Площадь кристалла составляла 162 мм². Объем кэш-памяти первого уровня насчитывал 64 Кб (32 Кб данные и 32 Кб инструкции). Работал процессор на частоте 166 МГц, 200 МГц и 233 МГц. Частота системной шины была 66 МГц.
В 1998 году AMD выпустила чипы с улучшенной архитектурой K6-2, с 9,3 миллионами транзисторов изготавливаемого по 250-нанометровому техпроцессу. Максимальная частота чипа составляла 550 МГц.
Процессор AMD K6
В 1999 году вышла третья генерация — архитектура K6-III. Кристалл сохранил все особенности K6-2, но при этом появилась встроенная кэш-память второго уровня объемом 256 Кб. Объем кэша первого уровня составлял 64 Кб.
Процессоры AMD K7
В том же 1999 году на смену К6 пришли процессоры К7. Они выпускались по 250-нм технологии с 22 миллионами транзисторов. У CPU присутствовал новый блок целочисленных вычислений (ALU). Системная шина EV6 обеспечивала передачу данных по обоим фронтам тактового сигнала, что давало возможность при физической частоте 100 МГц получить эффективную частоту 200 МГц. Объем кэш-памяти первого уровня составлял 128 Кб (64 Кб инструкций и 64 Кб данных). Кэш второго уровня достигал 512 Кб.
Процессор AMD K7
Несколько позже появились кристаллы, базировавшиеся на ядре Orion. Они производилось по 180-нм техпроцессу.
Выход ядра Thunderbird внес необычные изменения в процессоры. Кэш-память 2-го уровня была перенесена непосредственно в процессорное ядро и работала на одинаковой с ним частоте. Кэш был с эффективным объемом 384 Кб (128 Кб кэша первого уровня и 256 Кб кэша второго уровня). Увеличилась тактовая частота системной шины — теперь она функционировала с частотой 133 МГц.
Процессоры Intel P6
Архитектура P6 пришла на смену P5 в 1995 году. Процессор являлся суперскалярным и поддерживал изменения порядка выполнения операций. Процессоры использовали двойную независимую шину, которая значительно увеличила пропускную способность памяти.
В том же 1995 году были представлены процессоры следующего поколения Pentium Pro. Кристаллы работали на частоте 150 МГц — 200 МГц, имели 16 Кб кэш-памяти первого уровня и до 1 Мб кэша второго уровня.
Процессор Intel Pentium Pro
В 1999 году были представлены первые процессоры Pentium III. Они базировались на новой генерации ядра P6 под названием Katmai, которые являлись модифицированными версиями Deschutes. В ядро была добавлена поддержка инструкций SSE, а также улучшился механизм работы с памятью. Тактовая частота процессоров Katmai достигала 600 МГц.
В 2000 году вышли первые процессоры Pentium 4 с ядром Willamette. Эффективная частота системной шины составляла 400 МГц (физическая частота — 100 МГц). Кэш-данных первого уровня достигал объема 8 Кб, а кэш-память второго уровня — 256 Кб.
Следующим ядром линейки стало Northwood (2002 год). Процессоры содержали 55 миллионов транзисторов и производились по новой 130-нм КМОП-технологии с медными соединениями. Частота системной шины составляла 400 МГц, 533 МГц или 800 МГц.
Intel Pentium 4
В 2004 году производство процессоров вновь перевели на более тонкие технологические нормы — 90 нм. Вышли Pentium 4 на ядре Prescott. Кэш данных первого уровня увеличился до 16 Кб, а кэш второго уровня достиг 1 Мб. Тактовая частота составляла 2,4 ГГц — 3,8 ГГц, частота системной шины — 533 МГц или 800 МГц.
Последним ядром, которое использовалось в процессорах Pentium 4 стало одноядерное Cedar Mill. Выпускалось по новому техпроцессу — 65 нм. Существовало четыре модели: 631 (3 ГГц), 641 (3,2 ГГц), 651 (3,4 ГГц), 661 (3,6 ГГц).
Процессоры Athlon 64 и Athlon 64 X2
В конце 2003 года AMD выпустила новую 64-битную архитектуру K8, построенную по 130-нанометровому техпроцессу. В процессоре был встроенный контроллер памяти и шина HyperTransport. Она работала на частоте 200 МГц. Новые продукты AMD получили название Athlon 64. Процессоры поддерживали множество наборов команд, таких как MMX, 3DNow!, SSE, SSE2 и SSE3.
Процессор Athlon 64
В 2005 году на рынок вышли процессоры компании AMD под названием Athlon 64 X2. Это были первые двухъядерные процессоры для настольных компьютеров. В основе модели лежали два ядра, выполненных на одном кристалле. Они имели общий контроллер памяти, шину HyperTransport и очередь команд.
Процессор Athlon 64 X2
В течение 2005 и 2006 годов AMD выпустила четыре поколения двухъядерных чипов: три 90-нм ядра Manchester, Toledo и Windsor, а также 65-нм ядро Brisbane. Процессоры отличались объемом кэш-памяти второго уровня и энергопотреблением.
Процессоры Intel Core
Процессоры Pentium M обеспечивали большую производительность, чем настольные процессоры на базе микроархитектуры NetBurst. И поэтому их архитектурные решения стали основой для микроархитектуры Core, которая вышла в 2006 году. Первым настольным четырехядерным процессором стал Intel Core 2 Extreme QX6700 с тактовой частотой 2.67 ГГц и 8 Мб кэш-памяти второго уровня.
Кодовое имя первого поколения мобильных процессоров компании Intel было Yonah. Они производились с использованием техпроцесса 65 нм, основанного на архитектуре Banias/Dothan Pentium M, с добавленной технологией защиты LaGrande. Процессор мог обрабатывать до четырех инструкций за такт. В Core был переработан алгоритм обработки 128-битных инструкций SSE, SSE2 и SSE3. Если раньше каждая команда обрабатывалась за два такта, то теперь для операции требовался лишь один такт.
Intel Core 2 Extreme QX6700
В 2007 году вышла 45-нм микроархитектура Penryn с использованием металлических затворов Hi-k без содержания свинца. Технология использовалась в семействе процессоров Intel Core 2 Duo. В архитектуру добавилась поддержка инструкций SSE4, а максимальный объем кэш-памяти 2-го уровня у двухъядерных процессоров увеличился с 4 Мб до 6 Мб.
Процессор AMD Phenom II X6
В 2008 году вышла архитектура следующего поколения — Nehalem. Процессоры обзавелись встроенным контроллером памяти, поддерживающим 2 или 3 канала DDR3 SDRAM или 4 канала FB-DIMM. На смену шине FSB, пришла новая шина QPI. Объем кэш-памяти 2-го уровня уменьшился до 256 Кб на каждое ядро.
Intel Core i7
Вскоре Intel перевела архитектуру Nehalem на новый 32-нм техпроцесс. Эта линейка процессоров получила название Westmere.
Первой моделью новой микроархитектуры стал Clarkdale, обладающий двумя ядрами и интегрированным графическим ядром, производимым по 45-нм техпроцессу.
Процессоры AMD K10
Компания AMD старалась не отставать от Intel. В 2007 году она выпустила поколение архитектуры микропроцессоров x86 — K10. Четыре ядра процессора были объединены на одном кристалле. В дополнение к кэшу 1-го и 2-го уровней модели K10 наконец получили L3 объемом 2 Мб. Объем кэша данных и инструкций 1-го уровня составлял 64 Кб каждый, а кэш-памяти 2-го уровня — 512 Кб. Также появилась перспективная поддержка контроллером памяти DDR3. В K10 использовалось два 64-битных контроллера. Каждое процессорное ядро имело 128-битный модуль вычислений с плавающей запятой. Вдобавок ко всему, новые процессоры работали через интерфейс HyperTransport 3.0.
В 2007 году с архитектурой K10 вышли многоядерные центральные процессоры Phenom фирмы AMD, предназначенные для использования в стационарных персональных компьютерах. Решения на базе K10 производились по 65- и 45-нм техпроцессу. В новой версии архитектуры (К10,5) контроллер памяти работал с памятью DDR2 и DDR3.
Процессор AMD Phenom
В 2011 году вышла новая архитектура Bulldozer. Каждый модуль содержал два ядра со своим блоком целочисленных вычислений и кэш-памятью 1-го уровня. Поддерживалась кэш-память 3-го уровня объемом 8 Мб, шины HyperTransport 3.1, технологии увеличения частоты ядер Turbo Core второго поколения и наборов инструкций AVX, SSE 4.1, SSE 4.2, AES. Также процессоры Bulldozer были наделены двухканальным контроллером памяти DDR3 с эффективной частотой 1866 МГц.
Процессор AMD Bulldozer
В 2013 году компания представила следующее поколение процессоров — Piledriver. Данная модель являлась улучшенной архитектурой Bulldozer. Были доработаны блоки предсказания ветвлений, возросла производительность модуля операций с плавающей запятой и целочисленных вычислений, а также тактовая частота.
Просматривая историю, можно проследить этапы развития процессоров, изменения в их архитектуре, усовершенствования технологий разработки и многое другое. Современные CPU отличаются от тех, которые выходили раньше, но при этом имеют и общие черты.
Фундаментальные основы архитектуры процессоров — i2HARD
Статьи • 2 Июня 2019 • Sannio
Существует общественное мнение, что процессор — мозг компьютера. Но как работает этот самый мозг, состоящий из миллиардов транзисторов? В этой небольшой серии статей (всего из четырех частей)портал Techspotрешил тщательно разобраться в том, что же заставляет работать ваше «железо».
В статьях будут затронуты такие темы, как принцип работы компьютерной архитектуры, дизайн микросхем процессоров, сверхбольшая масштабная интеграция (VLSI), создание чипов и грядущие тренды. Если вам всегда было интересно, как работают процессоры, то присаживайтесь прямо сейчас и наслаждайтесь чтением, потому что именно с этого и начнется данная статья.
Для началанужно понять, из чего состоит процессор, и как блоки соединяются в функциональное целое. Также будет затронута тема ядер процессоров, иерархии памяти, прогнозирования ветвлений и многого другого. Для начала, стоит дать базовое определение тому, что именно делает процессор. Если говорить простым языком, то процессор проводит операции над введенными командами, следуя конкретным инструкциям. Такой операцией может быть считывание значений из памяти, сложение этих значений, а затем сохранение их в другом отделе памяти. Или что-то более сложное — например, деление двух чисел, если результат предыдущего вычисления оказался выше нуля.
Любая программа, будь то операционная система или видеоигра, представляет собой набор инструкций, которые необходимо выполнить. Эти действия загружаются из памяти и запускаются по очереди, вплоть до окончания программы. Многие разработчики пишут программы на сложных языках программирования, например, C++ или Python, но стоит отметить, что процессор их попросту не понимает. Все, что он может — обработать нули и единицы, поэтому необходимо представить код в подобном формате.
Программы представляют собой набор низкоуровневых инструкций. Их называют языком ассемблера (assembly language), и они являются одной из частей архитектуры набора команд (ISA). Процессоры запрограммированы на распознавание и выполнение этих инструкций. Самыми распространенными архитектурами набора команд являются x86, MIPS, ARM, RISC-V и PowerPC. Каждая из них отличается друг от друга написанием кода, по аналогии с языками программирования.
Эти архитектуры можно разбить на две категории: архитектуры с фиксированной длиной и переменной длиной. RISC-V является архитектурой с фиксированной длиной, и это означает, что по количеству битов можно понять можно определить тип инструкции. Ее полная противоположность — это x86: архитектура с переменной длиной, в которой каждая инструкция может быть закодирована совершенно по-разному и с разным количеством битов в каждой части. Именно поэтому декодер инструкций на процессорах с архитектурой x86 является самой сложной деталью всего устройства.
Инструкции с фиксированной длиной декодируются легче и быстрее, но у таких архитектур существует лимит поддерживаемых инструкций. Так, самые распространенные процессоры на RISC-V с открытым доступом поддерживают около 100 инструкций, а x86 является закрытой архитектурой, поэтому никто не знает точного количества поддерживаемых инструкций. Многие считают, что это число достигает нескольких тысяч, но это лишь догадки. Тем не менее, несмотря на такую разницу, процессоры на обеих архитектурах выполняют одни и те же функции.
Примеры инструкций архитектуры RISC-V. Инструкция opcode справа занимает 7 бит, что, в свою очередь, определяет ее тип. Каждая инструкция состоит из битов, которые отвечают за то, какие регистры и функции будут вып
Пришло время для открытых и свободных процессоров? / GlobalSign corporate blog / Habr
Раскрытие уязвимостей Meltdown и Spectre снова привлекло внимание к багам на аппаратном уровне. Многое сделано для улучшения (всё ещё слабой) безопасности нашего программного обеспечения, но всё напрасно, если оборудование даёт сбой. Процессоры в наших системах по-прежнему, в основном, проприетарные и уже преподнесли ряд неприятных сюрпризов (например, в движке Intel Management Engine). Поэтому встаёт естественный вопрос о переходе на железо open-source, как мы сделали с нашим программным обеспечением. Такой переход вполне возможен и даёт ряд преимуществ, хотя и не является панацеей.Учитывая сложность современных процессоров и свирепый рынок, где они продаются, их разработка по принципам open-source может показаться необычной идеей. Но в этой области уже есть серьёзные инициативы; так что идея свободного дизайна CPU — не просто фантазия. Небольшое исследование темы выявляет несколько проектов; хотя дальнейший список явно не полон.
Рассмотрим, например, проект OpenPOWER, основанный на архитектуре POWER. Это не полностью свободный проект, в отличие от некоторых других, но это хороший пример совместной разработки процессорной архитектуры. Процессоры на (относительно) открытой архитектуре уже продаются. OpenPOWER ориентируется на серверные CPU; они в ближайшее время вряд ли появятся в вашем компьютере или смартфоне.
Затем, есть OpenSPARC, где Sun Microsystems полностью открыла архитектуры процессоров SPARC T1 и T2. Несколько проектов пытались использовать эти архитектуры, но пока неясно, удалось ли кому-нибудь добиться успеха. На данный момент открытой архитектуре SPARC уже десять лет, а будущее SPARC в целом под сомнением. Что-нибудь интересное может получиться, если Oracle решит открыть архитектуры современных процессоров, но ожидать этого события, затаив дыхание — тоже не лучшая идея.
OpenRISC — полностью открытая архитектура процессора для встроенных приложений; у них полностью готов один процессор (OpenRISC 1000). Сделаны несколько коммерческих версий OpenRISC 1000, существуют и эталонные реализации (такие как mor1kx). Ядро Linux поддерживает OpenRISC с версии 3.1, которая вышла в 2011 году, а порт на Debian существует с 2014 года. Правда, работа в рамках дистрибутива Debian прекратилась в 2016-м. Работа над кодом OpenRISC для ядра тоже замедлилась, хотя в 2017 году появилась поддержка SMP. В целом, OpenRISC как будто потерял бóльшую часть динамики разработки, какая была раньше.
Сейчас максимальная активность вроде бы связана с архитектурой RISC-V. Этот проект ориентируется, в основном, на архитектуру набора команд (ISA), а не на конкретные реализации, но существуют и примеры дизайна свободного оборудования. Western Digital недавно анонсировала, что будет использовать процессоры RISC-V в своём оборудовании для хранения данных — это может привести к поставкам RISC-V в миллиардном масштабе. Есть набор средств разработки для тех, кто хочет поиграться с этим процессором, и доступны многие архитектуры ядра.
В отличие от OpenRISC, RISC-V нацелен на различные варианты использования. Есть надежда, что простая архитектура RISC позволит относительно легко сделать быстрый процессор. В то же время для низкопроизводительных устройств существует сокращённый формат потока команд, с помощью которого уменьшаются требования к памяти и сокращается энергопотребление. ISA предусматривает расширения для конкретных реализаций, что облегчает эксперименты и добавление техник аппаратного ускорения.
Поддержка RISC-V в Linux появилась совсем недавно; только в версии 4.15 (релиз состоялся 28 января 2018 года). Активность разработчиков кажется весьма бурной, а в соответствующих проектах также есть поддержка необходимых инструментальных средств и библиотеки. Судя по всему, у RISC-V имеется определённая поддержка в коммерческой индустрии — по крайней мере, в организацию RISC-V Foundation вступило много компаний. В ближайшее время эта архитектура должна продолжать развитие.
После появления информации о Meltdown и Spectre, организация RISC-V Foundation опубликовала пресс-релиз, продвигающий свою архитектуру процессоров как более безопасную альтернативу. Процессоры RISC-V действительно не подвержены этим уязвимостям, потому что они добропорядочно не допускают никакого спекулятивного доступа к памяти. Но в пресс-релизе говорится, что преимущества RISC-V распространяются за рамки этих конкретных уязвимостей. Сама открытость модели разработки позволяет быстро внедрять лучшие идеи безопасности от широкого круга разработчиков.
Становится всё более очевидным, что хотя Linux может и выиграл битву на уровне ядра, но есть целый слой проприетарного аппаратного и программного обеспечения, работающего ниже этого уровня — и мы не контролируем его. Поэтому открытая архитектура RISC-V выглядит очень привлекательно. Возможно, со временем мы сможем частично вернуть себе этот контроль. Это кажется желанной мечтой, но для её достижения требуется в первую очередь решить некоторые проблемы.
Первая из них, конечно, в том, что хотя компиляторы можно получить бесплатно, но это невозможно в отношении производственных мощностей, особенно дорогих фабрик по производству высокопроизводительных современных процессоров. Если на уровне производства микросхем прогресс замедлится — а некоторые говорят, что это уже происходит — и услуги по производству станут более доступны для малых заказчиков, то тогда эксперименты с архитектурами процессоров на практике станут доступнее для большего количества заказчиков. Впрочем, это никогда не будет настолько простым и дешёвым, как набрать make
в консоли.
До тех пор мы останемся зависимыми от других в создании для нас процессоров. Это необязательно плохо; почти все мы точно так же зависим от других в создании для нас программного обеспечения. Но в железе нужно добиваться более высокого уровня доверия. Получение воспроизводимых сборок на уровне программного обеспечения — серьёзная и актуальная задача; на аппаратном уровне она станет ещё сложнее. Но если не добиться некоего способа проверки исходной архитектуры в реальном образце железа, то мы никогда не можем быть уверены, то конкретная микросхема имеет тот дизайн, как нам сказали.
В спецификациях RISC-V ничего не сказано, что конкретные варианты реализаций обязаны публично открывать свою архитектуру. Даже если RISC-V добьётся успеха на рынке, есть высокие шансы, что реальные процессоры не станут поставляться со свободно лицензируемым дизайном. Крупные заказчики (которые строят дата-центры по собственным проектам) могут настоять на получении дизайна микросхем — или просто создать собственный — но у остальных довольно слабая переговорная позиция.
Наконец, даже если мы получим полностью открытые и свободные процессоры, с уязвимостями на этом уровне не будет полностью покончено. У нас есть свободное ядро, но уязвимости в ядре тоже постоянно находят. Открытое железо может придать больше уверенности, что мы сохраним контроль над нашими системами в долговременной перспективе, но это не волшебная палочка для решения всех проблем.
Впрочем, ничего из этого не должно помешать нам добиваться большей открытости и свободы в части аппаратного обеспечения. Когда-то и создание свободной операционной системы казалось непреодолимо сложной задачей, но мы сделали, причём несколько раз. Отход от проприетарного дизайна аппаратного обеспечения может стать одним из лучших шансов сохранить нашу свободу; будет глупо не попытаться сделать это.
основные виды, развитие, достоинства и недостатки
Архитектура микропроцессоров.
Эта глава посвящена архитектурным особенностям микропроцессоров. В ней приведены общие сведения о микропроцессорах, рассматриваются принципы структурно – функциональной организации) типы данных, регистровая память, способы адресации и система команд микропроцессоров. Излагаемый материал иллюстрируется на простейших 8– и 16–разрядных процессорах.
Основные понятия
Микропроцессор — это программно–управляемое устройство в виде интегральной микросхемы (БИС или СБИС), предназначенное для обработки цифровой информации. Поскольку все современные микропроцессоры имеют интегральное исполнение, синонимом микропроцессора стал термин процессор.
Микроконтроллер— это специализированный процессор, предназначенный для реализации функций управления (control— управление).
{xtypo_quote}Цифровой сигнальный процессор(Digital Signal Processor — DSP) — это специализированный процессор, предназначенный для обработки цифровых сигналов. {/xtypo_quote}
Микропроцессорная система представляет собой функционально законченное изделие, состоящее из нескольких цифровых устройств, включая процессор. Это понятие объединяет широкий набор законченных изделий, начиная с микроконтроллеров, выполненных на интегральных микросхемах, и кончая компьютерными системами, представляющими собой набор отдельных конструктивно оформленных устройств (системный блок, клавиатура, монитор и др.). В дальнейшем рассматриваются простейшие (однокристальные) микропроцессорные системы, содержащие помимо процессора основную память и устройства ввода/вывода. Такие микропроцессорные системы можно отнести к классу микропроцессоров.
Под организацией процессора понимают совокупность его узлов (устройств, блоков, модулей), связи между узлами и их функциональные характеристики. Организация определяет аппаратную организацию процессора, т. е. состав и взаимодействие его аппаратных средств. Выделяют два уровня организации:
● физическую организацию в виде принципиальной схемы;
● логическую организацию в виде структурно–функциональной схемы.
В дальнейшем рассматривается организация микропроцессоров на логическом уровне, или структурно–функциональная организация процессоров.
Под архитектурой процессора будем понимать совокупность его программно–аппаратных средств, обеспечивающих обработку цифровой информации (выполнение программы), т. е. совокупность всех средств, доступных программе (или пользователю). Это более общее понятие по сравнению с понятием организация включает в себя набор программно–доступных регистров и операционных устройств, систему основных команд и способов адресации, объем и организацию адресуемой памяти, виды и способы обработки данных (обмен, прерывания, примой доступ к памяти и др.).
{xtypo_quote}Например, современные 32–разрядные процессоры х86 с архитектурой IA–32 (Intel Architecture — 2 bit ) имеют стандартный набор регистров, общую систему основных команд, одинаковые способы организации и адресации памяти, защиты памяти и обслуживания прерываний. Отметим, что понятие архитектуры в большей степени характеризует свойства системы, чем устройства. {/xtypo_quote}
Основные виды архитектур
По форматам используемых команд (инструкций) можно выделить:
● CISC–архитектуру, которая относится к процессорам (компьютерам) с полным набором команд (Complete Instruction Set Computer— CISC). Она реализована во многих типах микропроцессоров (например Pentium), выполняющих большой набор разноформатных команд с использованием многочисленных способов адресации.
Система команд процессоров с CISC–архитектурой может содержать несколько сотен команд разного формата (от 1 до 15 байт), или степени сложности, и использовать более 10 различных способов адресации, что позволяет программисту реализовать наиболее эффективные алгоритмы решения различных задач.
Развитие традиционных CISC
Архитектур микропроцессоров по пути расширения функциональных возможностей и снижения затрат на программирование привело к увеличению числа команд в наборе и числа микрокоманд в команде. Следствием этого явилось усложнение интегральных схем и снижение быстродействия выполнения программ. Один из возможных путей устранения указанных недостатков состоит в использовании сокращенного набора команд, организация которого подчинена увеличению скоростей их выполнения;
● RISC–архитектуру, которая относится к процессорам (компьютерам) с сокращенным набором команд (Reduced instruction Set Computer — RISC). Появление RISC –архитектуры продиктовано тем, что многие CISC –команды и способы адресации используются достаточно редко. Основная особенность RISC–архитектуры проявляется в том, что система команд состоит из небольшого количества часто используемых команд одинакового формата, которые могут быть выполнены за один командный цикл (такт) центрального процессора. Более сложные, редко используемые команды реализуются на программном уровне. Однако за счет значительного повышения скорости исполнения команд средняя производительность RISC–процессоров может оказаться выше, чем у процессоров с CISC–архитектурой.
{xtypo_quote}Большинство команд RISC –процессоров связано с операцией регистр–регистр. Для обращения к памяти оставлены наиболее простые с точки зрения временных затрат операции загрузки в регистры и записи в память. {/xtypo_quote}
Современные RISC –процессоры реализуют около 100 команд, имеющих фиксированный формат длиной 4 байта, и используют небольшое число наиболее простых способов адресации (регистровую, индексную и некоторые другие).
Для сокращения количества обращений к внешней оперативной памяти RISC –процессоры содержат десятки–сотни регистров общего назначения (РОН), тогда как в CISC–процессорах всего 8–16 регистров. Обращение к внешней памяти в RISC–процессорах используется только в операциях загрузки данных в РОН или пересылки результатов из РОН в память. За счет сокращения аппаратных средств, необходимых для декодирования и выполнения сложных команд, достигается существенное упрощение интегральных схем RISC–процессоров и снижение их стоимости. Кроме того, значительно повышается производительность. Благодаря указанным достоинствам во многих современных
CI SC –процессорах (последние модели Pentium и К7) используется RISC–ядро. При этом сложные CI SC–команды предварительно преобразуются в последовательность простых RISC–операций и быстро выполняются RISC–ядром;
● VLIW–архитектуру, которая относится к микропроцессорам с использованием очень длинных команд (Very Large Instruction Word— VLIW). Отдельные поля команды содержат коды, обеспечивающие выполнение различных операций. Одна VLIW –команда может выполнить сразу несколько операций одновременно в различных узлах микропроцессора. Формирование «длинных» VLIW – koманд производит соответствующий компилятор при трансляции программ, написанных на языке высокого уровня.
{xtypo_quote}VLIW –архитектура реализована в некоторых типах современных микропроцессоров и является весьма перспективной для создания нового поколения сверхвысокопроизводительных процессоров. {/xtypo_quote}
По способу организации выборки команд и данных различают два вида архитектур:
● принстонская архитектура, или архитектура фон–Неймана, особенностью которой является (рис. 2.1.1) использование:
• общей основной (оперативной) памяти для хранения программ и данных, что позволяет оперативно и эффективно перераспределять ее объем в зависимости от решаемых задач в каждом конкретном случае применении микропроцессора;
• общей шины, по которой в процессор поступают команды и данные, а в оперативную память записываются результаты, что значительно упрощает отладку, тестирование и текущий контроль функционирования системы, повышает ее надежность. Чтобы отделить команду от данных, первым из памяти всегда поступает код выполняемой операции, а затем следуют данные. По умолчанию код операции загружается в регистр команд, а данные — в блок регистров (рис. 2.1.1). Из–за ограниченного числа внешних выводов общая шина обычно работает в режиме временного мультиплексирования, т. е. противоположные направления обмена данными между микропроцессором, памятью или другими внешними устройствами разделены во времени.
Недостаток принстонской архитектуры
Использование общей шины для передачи команд и данных ограничивает производительность цифровой системы;
● гарвардская архитектура (создатель Говард Айкен), особенностью которой является физическое разделение памяти команд (программ) и памяти данных (рис. 2.1.2). Это обстоятельство вызвано постоянно возрастающими требованиями к производительности микропроцессорных систем. Память команд и память данных соединяются с процессором отдельными шинами. Благодаря разделению потоков команд и данных, а также совмещению операций их выборки (и записи результатов обработки) обеспечивается более высокая производительность, чем при использовании принстонской архитектуры.
Недостатки гарвардской архитектуры
Усложнение конструкции из–за использования отдельных шин для команд и данных; фиксированный объем памяти для команд и данных; увеличение общего объема памяти из–за невозможности ее оптимального перераспределения между командами и данными. Гарвардская архитектура получила широкое применение в микроконтроллерах — специализированных микропроцессорах для управления различными объектами, а также во внутренней структуре современных высокопроизводительных микропроцессоров в кэш–памяти с раздельным хранением команд и данных.
В то же время во внешней структуре большинства микропроцессорных систем реализуются принципы принстонской архитектуры.
Отметим, что архитектура микропроцессора тесно связана с его структурой. Реализация тех или иных архитектурных особенностей требует введении в структуру микропроцессора соответствующих устройств и обеспечения механизмов их совместного функционирования.