- •«Пермский национальный исследовательский политехнический университет»
- •«Встроенные микропроцессорные системы»
- •Составитель о.В. Гончаровский
- •Оглавление
- •2. Программное обеспечение встроенных систем ……….
- •Введение
- •Аппаратные средства встроенных систем
- •Организация аппаратных средств встроенных
- •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.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 для моделирования и синтеза [22]
- •1.10.2.3. Операторы присваивание и process [22]
- •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. Исчисление реального времени
- •2.7.4. Модели энергии и мощности
- •2.7.5. Тепловая модель
- •Задания
- •1. Конвейеризация
- •2. Иерархия памяти
- •3. Базовые устройства ввода-вывода встроенных систем
- •5. Многозадачность
- •6. Валидация и оценка проекта
- •Заключение
- •Библиографический список
- •Встроенные микропроцессорные системы
1.4. Формы параллелизма в процессорах
Большинство современных процессоров обеспечивают различные формы параллельной работы. Эти механизмы существенно влияют на время выполнения программ микропроцессорной системой, поэтому разработчики встроенных систем должны понимать их.
Понятие конкурентная (одновременная) работа является центральным для встроенных систем. Говорят, что компьютерная программа конкурентная, если ее различные части концептуально могут выполняться совместно. Говорят, что компьютерная программа параллельна, если ее различные части физически выполняются совместно на различном оборудовании (например, многоядерный процессор или группа различных процессоров)
Не конкурентные программы задают строгую последовательность выполнения команд. Языки программирования, выражающие такие программы, называют императивными (например, язык С). Использование С для написания конкурентных программ требует дополнительных шагов вне языка. Обычно это использование библиотеки потоков (thread), которая обеспечивается операционной системой. В Java, являющимся императивным языком включены конструкции, напрямую поддерживающие потоки.
Рассмотрим следующие операторы Си кода:
double
pi,
piSquared,
piCubed; pi
= 3.14159; piSquared
= pi * pi ; piCubed
= pi * pi * pi;
Последние два оператора являются независимыми и следовательно могут выполняться параллельно или в обратном порядке. Это не повлияет на результат.
Перепишем эту последовательность следующим образом, и она перестанет быть независимой:
double pi, piSquared,
piCubed; pi
= 3.14159; piSquared
= pi * pi ; piCubed
= piSquared * pi;
В этом случае последний оператор зависит от третьего.
Компилятор может анализировать зависимости между операторами и формировать параллельный код, если целевая микропроцессорная система поддерживает параллельную работу. Такой анализ называют анализом потока данных. Сегодня многие микропроцессоры поддерживают параллельное выполнение, используя архитектуру с множественной выдачей потоков команд или VLIW (Very Large Instruction Word, очень длинный формат команды).
Процессоры с множественной выдачей потоков команд могут выполнять одновременно независимые команды. Аппаратные средства анализируют команды на лету, и когда зависимость не обнаруживается, выполняют одновременно более чем оду команду. VLIW процессоры имеют команды ассемблерного уровня, которые определяют конкурентные операции. В этом случае от компилятора обычно требуют вставить подходящие команды в программу.
В обоих случая (множественна выдача и VLIW) императивная программа анализируется на предмет одновременности для разрешения ее параллельного выполнения. Общее требование состоит в увеличении скорости выполнения программы. Цель - увеличение производительности, когда предположение о завершении задачи раньше всегда лучше завершения позже. Однако в контексте встроенных систем одновременность играет более существенную роль, чем просто улучшение производительности. Программе встроенной системы часто необходимо отслеживать и реагировать на множество одновременных источников и одновременно управлять множеством выходных устройств. Программа встроенной системы почти всегда одновременная программа и одновременность является присущей частью логики программы. Это не только путь улучшения производительности. В действительности завершение задачи раньше не является с необходимостью лучше, чем завершение позже. Суть в своевременности, т.е. действия в физическом мире часто необходимо делать в правильное время - не раньше и не позже. Например, регулятор бензинового двигателя: раннее зажигание не лучше позднего. Оно должно произойти в правильное время.
Также как императивные программы могут выполняться последовательно или параллельно, конкурентные программы могут выполняться последовательно или параллельно. Последовательное выполнение конкурентной программы сегодня обычно выполняется многозадачной операционной системой, которая чередует выполнения множества задач в простом последовательном потоке команд. Аппаратура может распараллелить это выполнение, если процессор поддерживает множественную выдачу или VLIW.
Таким образом, конкурентная программа преобразуется операционной системой в последовательный поток и обратно в конкурентную программу аппаратным обеспечением для улучшения производительности. Это множественное преобразование сильно затрудняет получение результата в правильное время.
Параллелизм в аппаратном обеспечении призван повысить производительность приложений, требующих интенсивных вычислений. С точки зрения программиста одновременность вырастает как следствие разработки аппаратура для увеличения производительности. Другими словами приложение не требует, чтобы множество действий происходило одновременно, требуется лишь, чтобы все происходило очень быстро. Конечно, много интересных приложений объединят обе формы одновременности, возникающие из параллелизма и требований приложения.
В этом параграфе рассматриваются такие параллелизмы как конвейерная обработка, параллелизм уровня команд и многоядерные архитектуры.