Введение 4
1. Постановка задачи 6
2. Обзор 7
2.1. MPU во встроенных системах 7
2.1.1. Общее описание MPU 7
2.1.2. Сравнение с MMU 7
2.1.3. Описание MPU в Cortex-M 8
3. Драйвер MPU 10
3.1. Поддержка флагов доступа 10
3.2. Обработка исключений 10
3.3. Переключение контекстов 12
3.4. Обновление флагов доступа 12
4. Защита приложений и различных частей ядра ОС 15
4.1. Защита от переполнения стека 15
4.2. Защита сегментов данных 16
4.3. Защита от исполнения 16
5. Апробация на плате 18
Заключение 19
Введение 4
1. Постановка задачи 6
2. Обзор 7
2.1. MPU во встроенных системах 7
2.1.1. Общее описание MPU 7
2.1.2. Сравнение с MMU 7
2.1.3. Описание MPU в Cortex-M 8
3. Драйвер MPU 10
3.1. Поддержка флагов доступа 10
3.2. Обработка исключений 10
3.3. Переключение контекстов 12
3.4. Обновление флагов доступа 12
4. Защита приложений и различных частей ядра ОС 15
4.1. Защита от переполнения стека 15
4.2. Защита сегментов данных 16
4.3. Защита от исполнения 16
5. Апробация на плате 18
Заключение 19
Список литературы 20
Операционные системы (ОС) выполняют широкий диапазон задач, и, соответственно, сильно различаются по количеству доступных ресурсов. Одним из таких ресурсов является память. Устройства, на которых работают ОС, часто имеют подсистемы управления памятью, которые упрощают взаимодействие с процессором. Также, такие подсистемы предоставляют дополнительные функции, например защиту на запись или чтение в определенные блоки памяти. Это широко используется в ОС для защиты данных приложений и собственных компонент ядра. Кроме того, в операционных системах реального времени встает вопрос о скорости доступа к памяти. Это приводит к дополнительным требованиям к подсистемам управления памятью, из-за чего часто приходится отказываться от многих возможностей таких подсистем.
Для каждого конкретного класса устройств эффективен свой способ управлению памятью. Всего существует два вида подсистем: MMU и MPU.
MMU (Memory Management Unit) - устройство управлению памятью. Его основные функции заключаются в трансляции виртуального адресного пространства в физическое, защите памяти и управлению кэш-памятью. MMU в основном используется в устройствах, выполняющих прикладные задачи (например, в процессорах Cortex-A[1]).
MPU (Memory Protection Unit) - устройство защиты памяти. Из всех функций MMU обеспечивает только защиту памяти. Используется в специализированных устройствах, например в Cortex-M[2] (для встраиваемых систем) или Cortex-R[3] (для систем реального времени).
Данная работа выполнялась на базе ОС Embox[6] - активно разрабатываемой встроенной системы. Разработка ведется в тесном сотрудничестве с кафедрой системного программирования математикомеханического факультета Санкт-Петербургского государственного университета. В данный момент Embox поддерживает ряд платформ (x86, MicroBlaze, ARM, PowerPC и другие). И что более важно, использует различные подсистемы управления памятью. Виртуальная память, имеющаяся в ОС Embox на данный момент, пользуется в основном MMU, и имеет ряд ограничений, что не позволяет её применять в ряде случаев, например, использовать её на платформах с малым количеством оперативной памяти и в задачах, требующих высокой скорости отклика системы.
В ходе выполнения данной дипломной работы были получены следующие результаты:
• спроектирована архитектура для драйвера MPU в Cortex-M.
• реализован драйвер MPU для Gortex-M. Сам драйвер был написан на язык ассемблера для соответствующей архитектуры, а интерфейс для работы с ним был создан на C.
• Были внести изменения в ОС Embox для поддержки защиты приложений и различных компонент ядра ОС.
• проведена апробация на плате STM32F4Discovery. Для тестирования были использованы тесты, описанные в главе 4.