Модифицированная гарвардская архитектура
Модифицированная гарвардская архитектура — это вариация гарвардской компьютерной архитектуры, которая, в отличие от чистой гарвардской архитектуры, позволяет содержать в памяти инструкции, которые доступны как данные. Большинство современных компьютеров, которые задокументированы как имеющие гарвардскую архитектуру, имеют, фактически, модифицированную гарвардскую архитектуру.
Гарвардская архитектура
Компьютер с оригинальной гарвардской архитектурой, Mark I, использовал полностью раздельную систему памяти для хранения инструкций и данных. CPU выбирал следующую инструкцию и загружал или записывал данные одновременно[1] и независимо. Это отличается от компьютерной рхитектуры фон Неймана, в которой и инструкции, и данные хранятся в той же самой системе памяти и (без сложностей с кэшем процессора) должны обрабатываться поочерёдно.
Физическое разделение памяти инструкций и данных иногда считается отличительной чертой современных компьютеров с гарвардской архитектурой. В микроконтроллерах (компьютерных системах, интегрированных в единые чипы), становится популярным использование различных технологий памяти для инструкций (например, флеш-память) и данных (обычно память чтения/записи) в машинах фон Неймана. Истинное отличие гарвардской машины заключается в использовании различных адресных пространств для инструкций и данных. Другими словами, адрес в памяти не определяет единственным образом место в памяти (как в машине фон Неймана), а необходимо знать ещё адресное пространство (инструкции или данные), которому адрес принадлежит.
Архитектура фон Неймана
Компьютер с архитектурой фон Неймана имеет преимущество перед гарвардскими машинами в том, что код может быть доступен и обрабатываться так же, как данные и наоборот. Это позволяет, например, прочесть данные с диска в память и затем выполнить код, или использовать самооптимизирующиеся программные системы, такие как компиляция «точно в нужное время», для записи машинного кода в собственную память, а позднее выполнить этот код. Другой пример — самомодифицирующийся код, позволяющий программе модифицировать себя.
Недостатком этих методов являются проблемы с защитой выполняемого пространства, которые увеличивают риски от вредоносных программ и ошибок в программах.
Модифицированная гарвардская архитектура
Таким образом, некоторые чисто гарвардские машины являются специализированными продуктами. Большинство современных компьютеров вместо этого реализуют модифицированную гарвардскую архитектуру. Эти модификации представляют собой различные способы ослабления строгого разделения между кодом и данными, при этом сохраняя поддержку более высокой производительности одновременного доступа к данным и инструкциям, характерной для гарвардской архитектуры.
Архитектура с раздельным кэшем (почти фон Неймана)
Наиболее распространённая модификация создаёт иерархию памяти с раздельным кэшем процессора для инструкций и данных на нижних уровнях архитектуры. Имеется единое адресное пространство для инструкций и данных, обеспечивая модель фон Неймана, но CPU выбирает инструкции из кэша инструкций и выбирает данные из кэша данных[2][3]. Большинству программистов нет необходимости знать, что ядро процессора реализует (модифицированную) гарвардскую архитектуру, хотя они и получают преимущество от неё в скорости. Только те программисты, которые генерируют и сохраняют инструкции в памяти должны учитывать такие аспекты, как когерентность кэша, если операция записи не изменяет или не аннулирует кэшированную копию инструкции в кэше инструкций.
Память инструкций как память данных
Другое изменение сохраняет природу гарвардской машины с «раздельным адресным пространством», но предоставляет специальные машинные операции для доступа к содержимому памяти инструкций как к данным. Поскольку данные не могут быть выполнены напрямую как инструкции, такие машины не всегда рассматриваются как «модифицированная» гарвардская архитектура:
- Доступ на чтение: начальные значения данных могут быть скопированы с памяти инструкций в память данных при старте программы. Или, если данные не были изменены (это могут быть постоянные значения, такие как π, или текстовая строка), они могут быть получены программой прямо из памяти инструкций без переноса в память данных (которая часто ограничена).
- Доступ для записи: возможность для перепрограммирования, как правило, требуется, лишь немногие машины основаны исключительно на ROM. Например, микроконтроллер обычно имеет операции записи в флеш-память, используемую для хранения инструкций[4]. Эта возможность может использоваться для различных целей, включая обновление программного обеспечения. Замена EEPROM/PROM является альтернативным методом.
Память данных как память инструкций
Некоторые процессоры с гарвардской архитектурой, такие как MAXQ компании Maxim Integrated, могут выполнять инструкции, выбранные из любого сегмента памяти в отличие от оригинального гарвардского процессора, который выполняет инструкции, выбранные только из сегмента памяти программы. Такие процессоры, как и другие процессоры с гарвардской архитектурой, в отличие от чисто архитектуры фон Неймана могут читать инструкции и читать данные одновременно, если они находятся в разных сегментах памяти, поскольку процессор имеет (по меньшей мере) два отдельных сегмента памяти с независимыми шинами данных. Наиболее очевидное отличие модифицированной гарвардской архитектуры от чистой фон Неймановской, видимое программисту, заключается в том, что при выполнении инструкции из одного сегмента памяти, этот же сегмент не может одновременно использоваться для доступа к данным[5][6].
Сравнение
Три характеристики могут быть использованы для различения модифицированных гарвардских машин от чистых гарвардских машин и машин фон Неймана:
- Память инструкций и память данных занимают разные адресные пространства
В чистых гарвардских архитектурах существует адрес «ноль» в пространстве команд, который указывает на ячейку памяти для хранения команд, и отдельный адрес «ноль» в пространстве данных, указывающий на другую ячейку памяти для хранения данных. В отличие от этого машины фон Неймана и модифицированные гарвардские машины с раздельным кэшем хранят и инструкции, и данные в одном адресном пространстве, так что «ноль» адресует только одно место и бинарные значения в этом месте интерпретируются как инструкции или данные в зависимости от того, как в программе было задумано. Однако, подобно чистым гарвардским архитектурам, модифицированные гарвардские архитектуры, в которых память команд используется как данные, имеют раздельные адресные пространства, а значит, и отдельные адреса «ноль» для пространства команд и пространства данных. Таким образом, это не позволяет отличить этот тип модифицированных гарвардских архитектур от чистых гарвардских архитектур.
- Инструкции и данные имеют отдельные аппаратные пути к центральному процессору (ЦПУ)
Суть машин Гарвардской архитектуры, как в чистом, так и в модифицированном виде, и причина их сосуществования с более универсальной архитектурой фон Неймана заключается в следующем: раздельные каналы памяти для центрального процессора позволяют одновременно получать команды и обращаться к данным, что повышает производительность. Чисто гарвардские машины имеют раздельные каналы доступа к различным адресным пространствам памяти. Модифицированные гарвардские машины с разделённым кэшем имеют такие раздельные пути для кэшей CPU или других тесно связанных с ним запоминающих устройств, но единый путь доступа охватывает остальную часть иерархии памяти. Процессоры фон Неймана имеют только единый канал доступа. С точки зрения программирования модифицированный гарвардский процессор, в котором память команд и память данных используют общее адресное пространство, обычно рассматривается как машина фон Неймана до тех пор, пока не возникнет проблема согласованности кэша, например, при самомодифицирующемся коде и загрузке программ. Это может вызывать путаницу, но такие проблемы обычно заметны только системным программистам и интеграторам. Другие модифицированные гарвардские машины в этом отношении похожи на чистые гарвардские машины.
- Память инструкций и память данных имеют различные способы доступа
Оригинальная гарвардская машина, Mark I, хранила команды на перфоленте, а данные в электромеханических счётчиках. Однако это было обусловлено исключительно ограничениями существовавших тогда технологий. Современные машины гарвардской архитектуры, такие как PIC микроконтроллер, могут использовать 12-битную флеш-память для инструкций и 8-битную SRAM для данных. Для сравнения, микроконтроллер фон Неймана, такой как ARM7TDMI, или модифицированное гарвардское ядро ARM9, обеспечивают унифицированный доступ к флэш-памяти и SRAM (в данном случае в виде 8-битных байтов).
Современное использование модифицированной гарвардской архитектуры
За исключением случаев, когда требуется DSP или микроконтроллер без кэша, большинство современных процессоров имеют кэш процессора, который разделяет инструкции и данные.
Существуют также процессоры, которые по самому строгому определению являются гарвардскими машинами (то есть, память программ и память данных занимают разные адресные пространства), и модифицированы лишь в слабой степени, поскольку имеют операции для чтения и/или записи памяти программ как данных Например, команды LPM (Load Program Memory, Загрузить из Программной Памяти) и SPM (Store Program Memory, Записать в Программную Память) в контроллере Atmel AVR реализуют такую модификацию. Аналогичные решения найдены в других микроконтроллерах, таких как PIC и Z8 Encore!, во многих семействах цифровых сигнальных процессоров, таких как TI C55x. Поскольку выполнение команд остаётся ограниченным адресным пространством программ, эти процессоры очень не похожи на машины фон Неймана. Внешняя проводка также может преобразовать строго гарвардское ядро ЦП в модифицированное гарвардское, например, путем простого объединения сигналов PSEN# (чтение из программного пространства) и RD# (чтение из внешнего пространства данных) внешне через логический элемент И на микроконтроллере семейства Intel 8051 . В этом случае говорят, что микроконтроллер «подключен по фон Нейману», поскольку внешние адресные пространства данных и программ объединяются.
Раздельные адресные пространства создают определенные трудности при программировании на языках высокого уровня, которые не поддерживают напрямую концепцию того, что таблицы данных только для чтения могут находиться в другом адресном пространстве, отличном от обычных данных для записи (и, следовательно, требуют чтения с использованием других инструкций). Язык программирования Си может поддерживать несколько адресных пространств либо через нестандартные расщирения [a], либо через ныне стандартизованную расширенную поддержку встраиваемых процессов.
См. также
Примечания
- ↑ Разработчики стандартной библиотеки C для переноса GCC на микроконтроллер Atmel AVR, который имеет раздельные адресные пространства для кода и данных, утверждают на Data in Program Space, что раздельные адресные пространства подразумевают гарвардскую архитектуру. Далее они поясняют, что язык C имеет только одно адресное пространство для указателей и поэтому не был разработан для машин с гарвардской архитектурой. Затем они описывают нестандартные расширения, внесённые в транслятор GCC для AVR и в библиотеку AVR C, чтобы позволить доступ к данным в памяти кодов (памяти программы). Они даже объясняют, почему ключевое слово const не может быть использовано для различения объектов данных, которые должны быть размещены в памяти инструкций.
- ↑ CAMBRIDGE, 1946, с. 4.
- ↑ Лекция 3. Память. Дата обращения: 23 ноября 2025.
- ↑ Таненбаум, 2007, с. 98.
- ↑ AVR109: Self Programming. Atmel (июнь 2004). Дата обращения: 29 января 2015.
- ↑ [https://www.maximintegrated.com/en/design/technical-documents/userguides-and-manuals/4/4811.html MAXQ Family User's Guide Memory Access"]. Maxim Integrated (сентябрь 2008). См. Sections 1.2 "Harvard Memory Architecture" и 2.5 "Pseudo-Von Neumann
- ↑ Konark Goel et al. About MAXQ GCC port.
Литература
- STAFF OF THE COMPUTATION LABORATORY. A Manual of Operation for the Automatic Sequence Controlled Calculator. — LONDON : GEOFFREY CUMBERLEGE: OXFORD UNIVERSITY PRESS, 1946. — Т. I. — С. 4. — (THE ANNALS OF THE COMPUTATION LABORATORY OF HARVARD UNIVERSITY).
- Э. Таненбаум. Архитектура компьютера. — 5-е. — Питер, 2007. — (Классика Computer science). — ISBN 5-469-01274-3.