Гарвардская архитектура и операционные системы
У меня три вопроса:
Имеет ли гарвардская архитектура два отдельных ОЗУ (блоки памяти - один для данных и один для кода) или только один ОЗУ и две отдельные шины?
Только модуль выборки может делать ссылки на память в памяти кода (в архитектуре Гарварда), или есть некоторые инструкции, которые также могут читать и писать в памяти кода? Как можно загружать программы в Гарвардской архитектуре?
Как ядро ОС хранится в гарвардской архитектуре? Разделены ли код ядра и данные ядра друг от друга?
1 ответ
Истинный Гарвард означает отдельные адресные пространства; один и тот же числовой адрес - это разные ячейки памяти в разных адресных пространствах. Если бы у вас были отдельные внешние шины, но они оба были подключены к контроллеру памяти, который использовал адреса одинаково, это больше не было бы настоящей гарвардской системой, это была бы деталь реализации.
Разделение кэшей L1d/L1i (часто перед унифицированным L2), позволяющее выполнять параллельную выборку кода и загрузку / сохранение данных, называется «модифицированным Гарвардом». Большинство современных процессоров таковы. Единственный видимый эффект здесь - некоторые ISA, требующие барьеров памяти и явной очистки L1d и / или L1i после того, как JIT-компилятор записывает некоторые байты машинного кода в буфер, прежде чем вы сможете безопасно перейти к нему. Интересный факт: x86 имеет согласованный I-кеш, а также отслеживает конвейер, поэтому выборка устаревших инструкций невозможна .
Современные гарвардские системы обычно представляют собой микроконтроллеры с Flash для памяти кода, RAM для памяти данных. У многих из них есть инструкция вроде AVR
lpm
Загрузить программную память. Таким образом, у вас по-прежнему есть отдельные адресные пространства, но вы можете загружать постоянные данные из ПЗУ, например, для таблиц поиска, а не только через mov-непосредственный.
Некоторые даже хранят в памяти программ, даже если это Flash. (Медленная и ограниченная выносливость, поэтому вы делаете это только при необходимости.)
Для гарвардской системы, которая не является микроконтроллером (т.е. может загружать новые программы) с ОЗУ для программной памяти, у вас обычно есть контроллеры жестких дисков, которые могут осуществлять прямой доступ к памяти в программную память. Таким образом, вы можете загружать программы с диска, не требуя от центрального процессора записи в память программ. У вас также могут быть специальные инструкции загрузки / сохранения программной памяти или механизм DMA для копирования между двумя областями памяти.
Как ядро ОС хранится в гарвардской архитектуре? Разделены ли код ядра и данные ядра друг от друга?
То же, что и для пользовательского пространства.
Если ядро находится в ROM / Flash встроенной системы, оно может работать оттуда. (Предполагая, что хранилище предназначено для обеспечения эффективного произвольного доступа, например, флэш-память NOR или, возможно, флэш-память NAND с некоторым кешированием.)