Гарвардская архитектура и операционные системы

У меня три вопроса:

  1. Имеет ли гарвардская архитектура два отдельных ОЗУ (блоки памяти - один для данных и один для кода) или только один ОЗУ и две отдельные шины?

  2. Только модуль выборки может делать ссылки на память в памяти кода (в архитектуре Гарварда), или есть некоторые инструкции, которые также могут читать и писать в памяти кода? Как можно загружать программы в Гарвардской архитектуре?

  3. Как ядро ​​ОС хранится в гарвардской архитектуре? Разделены ли код ядра и данные ядра друг от друга?

1 ответ

Решение

Истинный Гарвард означает отдельные адресные пространства; один и тот же числовой адрес - это разные ячейки памяти в разных адресных пространствах. Если бы у вас были отдельные внешние шины, но они оба были подключены к контроллеру памяти, который использовал адреса одинаково, это больше не было бы настоящей гарвардской системой, это была бы деталь реализации.

Разделение кэшей L1d/L1i (часто перед унифицированным L2), позволяющее выполнять параллельную выборку кода и загрузку / сохранение данных, называется «модифицированным Гарвардом». Большинство современных процессоров таковы. Единственный видимый эффект здесь - некоторые ISA, требующие барьеров памяти и явной очистки L1d и / или L1i после того, как JIT-компилятор записывает некоторые байты машинного кода в буфер, прежде чем вы сможете безопасно перейти к нему. Интересный факт: x86 имеет согласованный I-кеш, а также отслеживает конвейер, поэтому выборка устаревших инструкций невозможна .


Современные гарвардские системы обычно представляют собой микроконтроллеры с Flash для памяти кода, RAM для памяти данных. У многих из них есть инструкция вроде AVR lpmЗагрузить программную память. Таким образом, у вас по-прежнему есть отдельные адресные пространства, но вы можете загружать постоянные данные из ПЗУ, например, для таблиц поиска, а не только через mov-непосредственный.

Некоторые даже хранят в памяти программ, даже если это Flash. (Медленная и ограниченная выносливость, поэтому вы делаете это только при необходимости.)

Для гарвардской системы, которая не является микроконтроллером (т.е. может загружать новые программы) с ОЗУ для программной памяти, у вас обычно есть контроллеры жестких дисков, которые могут осуществлять прямой доступ к памяти в программную память. Таким образом, вы можете загружать программы с диска, не требуя от центрального процессора записи в память программ. У вас также могут быть специальные инструкции загрузки / сохранения программной памяти или механизм DMA для копирования между двумя областями памяти.


Как ядро ​​ОС хранится в гарвардской архитектуре? Разделены ли код ядра и данные ядра друг от друга?

То же, что и для пользовательского пространства.

Если ядро ​​находится в ROM / Flash встроенной системы, оно может работать оттуда. (Предполагая, что хранилище предназначено для обеспечения эффективного произвольного доступа, например, флэш-память NOR или, возможно, флэш-память NAND с некоторым кешированием.)

Другие вопросы по тегам