Гарвардская архитектура — это компьютерная архитектура с раздельным хранилищем [1] и сигнальными путями для инструкций и данных . Ее часто противопоставляют архитектуре фон Неймана , где программные инструкции и данные используют одну и ту же память и пути. Эта архитектура часто используется в обработке в реальном времени или в приложениях с низким энергопотреблением. [2] [3]
Термин часто утверждается, что он произошел от релейного компьютера Harvard Mark I [4] , который хранил инструкции на перфоленте (шириной 24 бита), а данные в электромеханических счетчиках. Эти ранние машины имели хранилище данных, полностью содержащееся в центральном процессоре , и не предоставляли доступа к хранилищу инструкций как к данным. Программы должны были быть загружены оператором; процессор не мог инициализировать себя сам. Однако в единственной рецензируемой опубликованной статье по этой теме — «Миф об архитектуре Гарварда» , опубликованной в IEEE Annals of the History of Computing [5] — автор демонстрирует, что:
Современные процессоры кажутся пользователю системами с архитектурой фон Неймана, в которых программный код хранится в той же основной памяти , что и данные. По соображениям производительности, внутренне и в значительной степени невидимым для пользователя, большинство конструкций имеют отдельные кэши процессора для инструкций и данных, с отдельными путями в процессор для каждого. Это одна из форм того, что известно как модифицированная архитектура Гарварда .
Архитектура Гарварда исторически и традиционно разделена на два адресных пространства, но также встречается и три, т. е. два дополнительных (и все они доступны в каждом цикле), [6] хотя и редко.
В архитектуре Гарварда нет необходимости делать две памяти общими по характеристикам. В частности, ширина слова , синхронизация, технология реализации и структура адреса памяти могут отличаться. В некоторых системах инструкции для предварительно запрограммированных задач могут храниться в памяти только для чтения , в то время как память данных обычно требует памяти для чтения и записи . В некоторых системах памяти инструкций намного больше, чем памяти данных, поэтому адреса инструкций шире адресов данных.
В системе с чистой архитектурой фон Неймана инструкции и данные хранятся в одной и той же памяти, поэтому инструкции извлекаются по одному и тому же пути данных, используемому для извлечения данных. Это означает, что ЦП не может одновременно считывать инструкцию и считывать или записывать данные из памяти или в нее. В компьютере, использующем архитектуру Гарварда, ЦП может одновременно считывать инструкцию и выполнять доступ к памяти данных [7] даже без кэша . Таким образом, компьютер с архитектурой Гарварда может быть быстрее для заданной сложности схемы, поскольку извлечение инструкций и доступ к данным не конкурируют за один путь памяти.
Кроме того, машина архитектуры Гарварда имеет различные адресные пространства кода и данных: адрес инструкции ноль не то же самое, что адрес данных ноль. Адрес инструкции ноль может идентифицировать двадцатичетырехбитное значение, в то время как адрес данных ноль может указывать на восьмибитный байт, который не является частью этого двадцатичетырехбитного значения.
Машина с модифицированной архитектурой Гарварда очень похожа на машину с архитектурой Гарварда, но она смягчает строгое разделение между инструкциями и данными, при этом позволяя ЦП одновременно получать доступ к двум (или более) шинам памяти. Наиболее распространенная модификация включает в себя отдельные кэши инструкций и данных , поддерживаемые общим адресным пространством. Хотя ЦП выполняет команды из кэша, он действует как чистая машина Гарварда. При доступе к резервной памяти он действует как машина фон Неймана (где код может перемещаться как данные, что является мощным методом). Эта модификация широко распространена в современных процессорах, таких как архитектура ARM , Power ISA и процессоры x86 . Иногда ее вольно называют архитектурой Гарварда, упуская из виду тот факт, что она на самом деле «модифицирована».
Другая модификация обеспечивает путь между памятью инструкций (такой как ПЗУ или флэш-память ) и ЦП, чтобы слова из памяти инструкций можно было рассматривать как данные только для чтения. Эта техника используется в некоторых микроконтроллерах, включая Atmel AVR . Это позволяет получать доступ к постоянным данным, таким как текстовые строки или таблицы функций , без предварительного копирования в память данных, сохраняя дефицитную (и энергоемкую) память данных для переменных чтения/записи. Для чтения данных из памяти инструкций предусмотрены специальные инструкции машинного языка , или к памяти инструкций можно получить доступ с помощью периферийного интерфейса. [a] (Это отличается от инструкций, которые сами по себе встраивают постоянные данные, хотя для отдельных констант эти два механизма могут заменять друг друга.)
В последние годы скорость ЦП выросла во много раз по сравнению со скоростью доступа к основной памяти. Необходимо позаботиться о том, чтобы уменьшить количество обращений к основной памяти, чтобы сохранить производительность. Если, например, каждая инструкция, выполняемая в ЦП, требует доступа к памяти, компьютер ничего не выигрывает от увеличения скорости ЦП — проблема, называемая ограничением памяти .
Можно сделать чрезвычайно быструю память, но это практично только для небольших объемов памяти по причинам стоимости, мощности и маршрутизации сигналов. Решение состоит в том, чтобы предоставить небольшой объем очень быстрой памяти, известной как кэш ЦП , который хранит недавно использованные данные. Пока данные, необходимые ЦП, находятся в кэше, производительность намного выше, чем когда ЦП должен получать данные из основной памяти. С другой стороны, однако, он все еще может быть ограничен хранением повторяющихся программ или данных и все еще иметь ограничение на размер хранилища и другие потенциальные проблемы, связанные с этим. [b]
Современные высокопроизводительные конструкции микросхем ЦП включают аспекты как архитектуры Гарварда, так и архитектуры фон Неймана. В частности, версия «разделенного кэша» модифицированной архитектуры Гарварда очень распространена. Кэш-память ЦП разделена на кэш инструкций и кэш данных. Гарвардская архитектура используется, когда ЦП обращается к кэшу. Однако в случае промаха кэша данные извлекаются из основной памяти, которая формально не разделена на отдельные разделы инструкций и данных, хотя она вполне может иметь отдельные контроллеры памяти, используемые для одновременного доступа к ОЗУ, ПЗУ и (NOR) флэш-памяти.
Таким образом, хотя архитектура фон Неймана заметна в некоторых контекстах, например, когда данные и код проходят через один и тот же контроллер памяти, аппаратная реализация достигает эффективности архитектуры Гарварда для доступа к кэшу и, по крайней мере, для некоторых доступов к основной памяти.
Кроме того, процессоры часто имеют буферы записи, которые позволяют процессорам продолжать после записи в некэшированные области. Фон-неймановская природа памяти становится видна, когда инструкции записываются как данные процессором, а программное обеспечение должно гарантировать, что кэши (данные и инструкции) и буфер записи синхронизированы, прежде чем пытаться выполнить эти только что записанные инструкции.
Основное преимущество чистой архитектуры Гарварда — одновременный доступ к более чем одной системе памяти — было уменьшено модифицированными процессорами Гарварда, использующими современные системы кэширования ЦП . Машины с относительно чистой архитектурой Гарварда используются в основном в приложениях, где компромиссы, такие как стоимость и экономия энергии за счет исключения кэшей, перевешивают программные издержки от использования отдельных адресных пространств кода и данных.
Даже в этих случаях обычно используются специальные инструкции для доступа к памяти программ, как если бы это были данные для таблиц, доступных только для чтения, или для перепрограммирования; эти процессоры представляют собой модифицированные процессоры с архитектурой Гарварда .
Это трехбанковая архитектура Гарварда.