- •Встроенные микропроцессорные системы
- •Оглавление
- •2. Программное обеспечение встроенных систем ……….
- •Введение
- •Модуль 1
- •Аппаратные средства встроенных систем
- •1.2. Элементы архитектуры процессоров встроенных систем
- •1.2.1. Множество команд
- •1.2.3.1. Адресное пространство
- •1.2.3.2. Порядок байт
- •1. 2.3.3. Когерентность памяти
- •1. 2.3.4. Защита памяти
- •1. 2. 4. Модель прерываний
- •1.2. 5.Модель управления памятью
- •1.2.5.1. Страничная организация памяти
- •1.2.5.2. Сегментация памяти
- •1.3. Типы процессоров
- •1.4. Формы параллелизма в процессорах
- •1.4.1. Конвейеризация
- •1.4.2. Параллелизм уровня команд
- •1.5.Технологии памяти
- •1.5.1. Оперативная память
- •1.5.1. 1. Статическое озу
- •1.5.2. Постоянное запоминающее устройство (rom)
- •1.6. Иерархия памяти
- •1.6.1. Распределение или карта памяти
- •1.6.2. Блокнотная и кэш память
- •1.6.2.1. Кэш-память прямого отображения
- •1.6.2.2. Ассоциативная по множеству кэш-память
- •1.6.2.3. Обновление кэш-памяти.
- •1.6.2.4. Протокол когерентности кэширования с обратной записью
- •1.7. Магистраль микропроцессорной системы
- •1.8. Базовые устройства ввода-вывода встроенных систем
- •1.8.1. Порты ввода-вывода общего назначения
- •1.7.2. Таймер-счетчик
- •1.8.3. Импульсно-кодовая модуляция.
- •1.8.4. Многоканальный аналого-цифровой преобразователь
- •1.9. Базовые последовательные интерфейсы ввода-вывода
- •1.9.2. Последовательный интерфейс spi
- •1.9.4.1. Введение в usb
- •1.9.4.2. Интерфейс Open Host Controller для usb
- •Вопросы для самоконтроля
- •Модуль 2
- •1.10. Язык проектирования аппаратуры vhdl
- •1.10.2. Введение в vhdl
- •1.10.2.1. Программирование на vhdl для моделирования и синтеза [19]
- •1.10.2.2. Entity и architecture
- •1.10.2.3. Операторы присваивание и process [19]
- •1.10.2.4. Цикл моделирования vhdl
- •1.10.2.5. Многозначная логика и стандарт ieee 1164
- •1.11. Проектирование устройств ввода-вывода и контроллеров
- •1.12. Интегрированная среда разработки аппаратных средств
- •Вопросы для самоконтроля
- •Модуль 3
- •2. Программное обеспечение встроенных систем
- •2.1 Модель вычислений
- •2.2 Автомат с конечным числом состояний
- •2.3. Асинхронный язык проектирования sdl
- •2.4. Синхронный язык проектирования Lustre
- •2.5. Многозадачность.
- •2.5.1. Язык программирования Си
- •2.5.2. Потоки
- •2.5.2.1. Реализация потоков
- •2.5.2.2. Взаимное исключение
- •2.5.2.3. Взаимная блокировка
- •2.5.2.4. Модели непротиворечивости памяти
- •2.5.2.5. Проблемы с потоками
- •2.5.3. Процессы и передача сообщений
- •2.6. Интегрированная среда разработки прикладного программного
- •2.6.2. Комплект программ Telelogic Tau sdl Suite
- •2.6.3. Средства разработки программного обеспечения
- •2.7.1. Моделирование, эмуляция и макетирование
- •2.7.2. Формальная верификация
- •2.7.3. Оценка производительности
- •2.7.3.1. Оценка wcet
- •2.7.3.2. Исчисление реального времени
- •1 2 3 E
- •2.7.4. Модели энергии и мощности
- •2.7.5. Тепловая модель
- •Вопросы для самоконтроля
- •Заключение
- •Задания
- •1. Конвейеризация
- •2. Иерархия памяти
- •3. Базовые устройства ввода-вывода встроенных систем
- •5. Многозадачность
- •6. Валидация и оценка проекта
- •Библиографический список
- •Встроенные микропроцессорные системы
1.6.2.4. Протокол когерентности кэширования с обратной записью
При большом количестве процессоров не эффективно каждый раз перезаписывать ОП. Вместо этого используется обратная запись (write back). Используется бит изменения в поле состояния кэша. Этот бит устанавливается, если блок был обновлен новыми данными и является более поздним, чем его оригинальная копия в основной памяти. Перед тем как перезаписать блок в кэш-памяти, контроллер проверяет состояние этого бита. Если он установлен, то контроллер переписывает данный блок и основную память перед загрузкой новых данных в кэш-память.
Один из популярных протоколов с обратной записью MESI. MESI – аббревиатура состояния кэш-памяти:
Invalid – блок кэш-памяти содержит недействительные данные.
Shared - в нескольких кэшах содержаться одинаковые блоки, основная память обновлена.
Exclusive – блок только в этой кэш-памяти, основная память обновлена.
Modified - блок действителен, основная память недействительна, копий блока не существует.
При загрузке процессора все элементы кэш памяти помечаются как недействительные I. При первом считывании из MM нужная строка вызывается в кэш-память и помечается как Е. Другой процессор (процессор 2) может вызвать ту же строку и поместить ее в кэш, но при отслеживании исходный держатель строки (процессор 1) узнает, что он уже не единственный, и объявляет, что у него есть копия. Обе копии помечаются состоянием S.
Процессор 2 производит запись в строку кэш-памяти в состоянии S и помещает сигнал о недействительности на магистраль, сообщая всем другим процессорам, что нужно отбросить свои копии. Соответствующая строка в процессоре 2 переходит в состояние М.
Процессор 3 считывает эту строку. Процессор 2, который в данный момент содержит строку, знает, что копия в MM недействительна, поэтому он передает на магистраль сообщение, чтобы процессор 3 подождал, пока он запишет строку обратно в память. После записи строки в MM процессор 3 вызывает из памяти копию этой строки, и в обоих кэшах строка помечается как S. Затем процессор 2 записывает в эту строку снова, что делает недействительным копию в кэш-памяти процессора 3.
Процессор 1 записывает слово в эту строку. Процессор 2 видит это и передает на шину сигнал, который сообщает процессору 1, что нужно подождать, пока строка не будет записана в MM. После завершения этого действия процессор помечает собственную копию как недействительную, поскольку он знает, что другой процессор собирается изменить ее. Возникает ситуация, в которой процессор 1 записывает что-либо в некэшируемую строку. Если применяется политика write-allocate, строка будет загружена в кэш-память и пометится как М. В противном случае строка в кэш-памяти сохранена не будет.
1.6.2.5. Команды поддержки когерентности памяти
Устройства ввода-вывода MPS, работающее по каналу прямого доступа к MM не содержат кэш-памяти, а следовательно и рассмотренных выше механизмов поддержки когерентности памяти. Вся ответственность ложится на CPU и реализуется программным путем. Для этой цели в системе команд процессора предусмотрены команды flush и invalidate.
Пусть программа процессора формирует данные для отправки через устройство ввода-вывода, помещая их в кэшируемую область MM в виде буфера выходных данных (кэш-память работает в режиме обратной записи). Это означает, что новые данные будут сформированы в кэши, а не в MM. Устройство же ввода-вывода берет данные из MM. Поэтому перед разрешением на передачу, процессор должен переместить подготовленные данные из кэш-памяти в MM, выполнив команду flush. По этой команде данные из кэш-памяти перезаписываются в MM. В команде flush указывается адрес и размер перезаписываемых данных.
Пусть устройство ввода-вывода принимает данные и помещает их во входной буфер MM, минуя процессор. В кэш-памяти процессора могут остаться данные входного буфера от предыдущей обработки, помеченные как действительные. По завершении приема устройство ввода-вывода информирует процессор о готовности входного буфера. Для работы с этими новыми данными процессор должен объявить недействительными строки кэш-памяти, содержащие старые значения входного буфера. Поэтому процессор выполняет команду invalidate для соответствующих строк кэш-памяти. Команда invalidate объявляет недействительными строки кэш, содержащие данные старого входного буфера. В команде invalidate указывается адрес и размер недействительных данных.