Модифицированная архитектура Гарварда — это разновидность архитектуры Гарвардского компьютера , которая, в отличие от чистой архитектуры Гарварда, позволяет получать доступ к памяти, содержащей инструкции, как к данным. Большинство современных компьютеров, которые документируются как архитектура Гарварда, на самом деле являются модифицированной архитектурой Гарварда.
Оригинальный компьютер с архитектурой Гарварда, Harvard Mark I , использовал совершенно отдельные системы памяти для хранения инструкций и данных. Центральный процессор извлекал следующую инструкцию и загружал или сохранял данные одновременно [1] и независимо. Это контрастирует с компьютером с архитектурой фон Неймана , в котором и инструкции, и данные хранятся в одной и той же системе памяти и (без сложности кэша центрального процессора ) должны быть доступны по очереди.
Физическое разделение памяти инструкций и данных иногда считается отличительной чертой современных компьютеров с архитектурой Гарварда. С появлением микроконтроллеров (целых компьютерных систем, интегрированных на одном чипе) использование различных технологий памяти для инструкций (например, флэш-памяти ) и данных (обычно памяти для чтения/записи ) в машинах фон Неймана становится популярным. Истинное отличие машины Гарварда заключается в том, что память инструкций и данных занимает разные адресные пространства . Другими словами, адрес памяти не идентифицирует однозначно место хранения (как это происходит в машине фон Неймана); также необходимо знать пространство памяти (инструкции или данные), к которому принадлежит адрес.
Компьютер с архитектурой фон Неймана имеет преимущество перед машинами Гарварда, как описано выше, в том, что к коду можно получить доступ и обрабатывать его так же, как и данные, и наоборот. Это позволяет, например, считывать данные с дискового хранилища в память, а затем выполнять их как код, или самооптимизирующиеся программные системы, использующие такие технологии, как компиляция «точно в срок» , чтобы записывать машинный код в свою собственную память и затем выполнять его позже. Другим примером является самомодифицирующийся код , который позволяет программе изменять себя.
Недостатком этих методов являются проблемы с защитой исполняемого пространства , что увеличивает риски вредоносных программ и дефектов программного обеспечения.
Соответственно, некоторые чистые машины Гарварда являются специализированными продуктами. Большинство современных компьютеров вместо этого реализуют модифицированную архитектуру Гарварда. Эти модификации представляют собой различные способы ослабления строгого разделения между кодом и данными, при этом по-прежнему поддерживая более высокую производительность параллельного доступа к данным и инструкциям архитектуры Гарварда.
Наиболее распространенная модификация создает иерархию памяти с отдельными кэшами ЦП для инструкций и данных на более низких уровнях иерархии. Существует единое адресное пространство для инструкций и данных, что обеспечивает модель фон Неймана, но ЦП извлекает инструкции из кэша инструкций и извлекает данные из кэша данных. [ требуется цитата ] Большинству программистов никогда не нужно знать о том факте, что ядро процессора реализует (модифицированную) архитектуру Гарварда, хотя они получают выгоду от ее преимуществ в скорости. Только программисты, которые генерируют и сохраняют инструкции в памяти, должны знать о таких проблемах, как когерентность кэша , если хранилище не изменяет или не делает недействительной кэшированную копию инструкции в кэше инструкций.
Другое изменение сохраняет природу "отдельного адресного пространства" машины Гарварда, но обеспечивает специальные машинные операции для доступа к содержимому памяти инструкций как к данным. Поскольку данные не могут быть непосредственно выполнены как инструкции, такие машины не всегда рассматриваются как "модифицированная" архитектура Гарварда:
Несколько процессоров архитектуры Гарварда, такие как Maxim Integrated MAXQ, могут выполнять инструкции, извлеченные из любого сегмента памяти, в отличие от оригинального процессора Гарварда, который может выполнять только инструкции, извлеченные из сегмента памяти программы. Такие процессоры, как и другие процессоры архитектуры Гарварда, и в отличие от чистой архитектуры фон Неймана, могут одновременно считывать инструкцию и считывать значение данных, если они находятся в отдельных сегментах памяти, поскольку процессор имеет (по крайней мере) два отдельных сегмента памяти с независимыми шинами данных. Наиболее очевидное, видимое программисту различие между этим видом модифицированной архитектуры Гарварда и чистой архитектурой фон Неймана заключается в том, что при выполнении инструкции из одного сегмента памяти к тому же сегменту памяти нельзя одновременно обращаться как к данным. [3] [4]
Для отличия модифицированных гарвардских машин от чистых гарвардских и фон-неймановских машин можно использовать три характеристики:
Для чистых машин Гарварда есть адрес «ноль» в пространстве инструкций, который ссылается на место хранения инструкций, и отдельный адрес «ноль» в пространстве данных, который ссылается на отдельное место хранения данных. Напротив, фон Неймановские и модифицированные с раздельным кэшем машины Гарварда хранят как инструкции, так и данные в одном адресном пространстве, поэтому адрес «ноль» ссылается только на одно место, и то, интерпретируется ли двоичный шаблон в этом месте как инструкция или данные, определяется тем, как написана программа. Однако, как и чистые машины Гарварда, модифицированные машины Гарварда с памятью инструкций как данных имеют отдельные адресные пространства, поэтому имеют отдельные адреса «ноль» для пространства инструкций и данных, поэтому это не отличает этот тип модифицированных машин Гарварда от чистых машин Гарварда.
В этом суть чистых или модифицированных машин Гарварда, и почему они сосуществуют с более гибкой и общей архитектурой фон Неймана: отдельные пути памяти к ЦП позволяют извлекать инструкции и получать доступ к данным одновременно, что повышает пропускную способность. Чистые машины Гарварда имеют отдельные пути с отдельными адресными пространствами. Модифицированные машины Гарварда с разделенным кэшем имеют такие отдельные пути доступа для кэшей ЦП или других тесно связанных запоминающих устройств, но унифицированный путь доступа охватывает остальную часть иерархии памяти . Процессор фон Неймана имеет только этот унифицированный путь доступа. С точки зрения программиста модифицированный процессор Гарварда, в котором память инструкций и данных разделяет адресное пространство, обычно рассматривается как машина фон Неймана, пока не станет проблемой когерентность кэша, как в случае с самомодифицирующимся кодом и загрузкой программ. Это может сбивать с толку, но такие проблемы обычно видны только системным программистам и интеграторам . [ необходимо разъяснение ] Другие модифицированные машины Гарварда в этом отношении похожи на чистые машины Гарварда.
Оригинальная машина Гарварда, Mark I , хранила инструкции на перфорированной бумажной ленте , а данные — в электромеханических счетчиках. Однако это было полностью обусловлено ограничениями технологий, доступных в то время. Сегодня машина Гарварда, такая как микроконтроллер PIC, может использовать 12-битную флэш-память для инструкций и 8-битную SRAM для данных. Напротив, микроконтроллер фон Неймана, такой как ARM7TDMI , или модифицированное ядро Harvard ARM9 , обязательно обеспечивает единообразный доступ к флэш-памяти и SRAM (в этих случаях как 8-битные байты).
За исключением приложений, где требуется ЦСП или микроконтроллер без кэша, большинство современных процессоров имеют кэш ЦП , который разделяет инструкции и данные.
Существуют также процессоры, которые являются машинами Гарварда по самому строгому определению (программная память и память данных занимают разные адресные пространства) и модифицируются только в слабом смысле, что существуют операции чтения и/или записи программной памяти как данных. Например, инструкции LPM (Load Program Memory) и SPM (Store Program Memory) в Atmel AVR реализуют такую модификацию. Аналогичные решения встречаются в других микроконтроллерах, таких как PIC и Z8Encore!, во многих семействах цифровых сигнальных процессоров, таких как ядра TI C55x и других. Поскольку выполнение инструкций по-прежнему ограничено адресным пространством программы, эти процессоры очень непохожи на машины фон Неймана. Внешняя проводка также может преобразовать ядро ЦП строго гарвардского типа в модифицированное гарвардское ядро, например, просто объединив сигналы `PSEN#` (чтение пространства программы) и `RD#` (чтение внешнего пространства данных) внешне через логический элемент И на микроконтроллере семейства Intel 8051 ; говорят, что микроконтроллер «фон-неймановски связан», поскольку внешние адресные пространства данных и программы становятся едиными.
Наличие отдельных адресных пространств создает определенные трудности в программировании на языках высокого уровня, которые напрямую не поддерживают идею о том, что таблицы данных, предназначенных только для чтения, могут находиться в другом адресном пространстве, чем обычные записываемые данные (и, следовательно, должны читаться с использованием других инструкций). Язык программирования C может поддерживать несколько адресных пространств либо через нестандартные расширения [a] , либо через стандартизированные расширения для поддержки встроенных процессоров .