- •Встроенные микропроцессорные системы
- •Оглавление
- •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. Валидация и оценка проекта
- •Библиографический список
- •Встроенные микропроцессорные системы
5. Многозадачность
1. Дать EFSM-модель функции addListener на рис.73 подобно модели на рис. 74.
2. Допустим, что две целые глобальные переменные a и b разделяются несколькими потоками. Допустим, что lock_a и lock_b два замка мутекса, которые защищают доступ к a и b. Допустим, нельзя предположить, что чтение и запись целых глобальных переменных являются атомарными. Рассмотрим следующий код:
Допустим, для исключения взаимоблокировки команда разработчиков договорилась, чтозамок b должен быть всегда взят перед замком a любым кодом, берущим оба замка. Кроме того из-за производительности команда настаивает, что не надо излишне брать замок. Следовательно, неприемлемо модифицировать proc1 следующим образом:
Поток, вызывающий proc1 берет замок b излишне, когда a не равно arg.
В некоторых библиотеках потоков такой код является некорректным. Поток будет блокировать попытку получить уже удерживаемый замок. Но примем для нашего случая, что если поток пытается получить уже удерживаемый замок, тогда он немедленно предоставляет его.
Дать решение для proc1, которое минимизирует излишнее взятие замка b.
3. Реализация функции get на рис.78 допускает более одного вызывающего get потока. Однако, если изменить код в строках 30-32 для pthread_cond_wait на
1
if
(size
== 0) { 2
pthread_cond_wait(&sent, &mutex); 3
}
тогда этот код будет работать, только если удовлетворяются два условия:
– pthread_cond_wait возвращается, только если есть соответствующий вызов pthread_cond_signal и
– есть только один поток-потребитель.
Пояснить, почему требуется второе условие.
4. Шаблон producer/consumer, реализованный на рис.77 имеет недостаток в том, что размер очереди используемой для буферизации сообщений неограничен. Программа может отказать в работе, исчерпав всю доступную память (отказ функции malloc). Написать вариант функций send и get, который ограничивает размер буфера до 5 сообщений.
5. Альтернативная форма передачи сообщений, называемая рандеву подобна шаблону producer/consumer на рис.77, но это синхронная процедура тесно связанная с потребителем. В частности на рис. 77 функция send возвращается немедленно независимо от того готов ли некоторый поток принять сообщение. При коммуникации в стиле рандеву процедура send не должна возвращаться пока процесс потребителя не достигнет соответствующего вызова get. Соответственно нет необходимости в буферизации сообщений.
Написать реализацию send и get для рандеву.
6. Валидация и оценка проекта
1. Представим состояние кэш в случае сходящегося потока управления. На рис. Показано состояние строки 4-входовой кэш в точке схождения для каждого из двух путей.
Что получится в результате анализа необходимости и возможности состояния кэш?
2. Рассмотрим пульсирующий поток событий. Поток периодический с периодом p. В начале каждого периода два события поступают с интервалом в d единиц времени. Построить кривые поступления для этого потока на интервале от 0 до 3*p.
3. Представим, что обработкой потока занимается процессор с максимальной производительностью b.
а) На что похожи кривые обслуживания, если производительность ухудшится до величины b’ из-за конфликтов в кэш?
б) Как изменятся кривые обслуживания, если некоторый таймер будет прерывать задачи каждые 100 ms и если обслуживание прерывания выполняется 10 ms? Предполагается, что нет конфликтов в кэш.
в) На что похожи кривые обслуживания, если рассматривать конфликты в кэш как в а) и прерывания как в б)?
Результирующие кривые должны быть построены на интервале от 0 до 300 ms.