Программирование для встроенных систем - статьи

Структура мини-ОС


Ядро мини-ОС состоит из следующих модулей:

  • Модуль управления потоками (Task manager)– включает в себя планировщик потоков, а также набор функций для управления состоянием потока. Планировщик задач реализован в виде функции, осуществляющей выбор активного потока и переключение контекста.
  • Модуль динамического распределения памяти (Memory manager) – содержит функции для динамического распределения памяти. Пользователю предоставляются две функции: alloc() для выделения памяти данного размера и free() для освобождения выделенной памяти.
  • Модуль синхронизационных примитивов (Synchronization primitives) – включает в себя функции для создания синхронизационных объектов и управления синхронизационными примитивами: семафоры, мьютексы, бинарные события.
  • Модуль управления прерываниями (Interrupt controller)– представляет собой набор функций для управления состоянием системы прерываний и функцию для инсталляции обработчиков прерываний.
  • Модуль ввода-вывода (IO manager) – предоставляет унифицированный интерфейс для доступа к устройствам ввода-вывода.
  • Модуль начальной загрузки – инициализирует регистры процессора, а также структуры и модули операционной системы. Он инициализирует главную задачу (функция main) и запускает её.

Рис 1. Базовая структура мини-ОС

Для каждого из модулей имеются несколько реализаций в зависимости от конфигурации операционной системы. На Рис 1. представлена базовая структура мини-ОС. Прерывистыми линиями обозначены так называемые «относительные зависимости», то есть, если один модуль включен в систему, то другой использует функции зависимого модуля. В противном случае используется реализация модуля без использования зависимого модуля.

В качестве примера рассмотрим зависимость модуля синхронизационного примитива от модуля управления потоками. Если ОС сконфигурирована как однозадачная, то применяется простой опрос объекта синхронизации. В том случае, когда используется многозадачность, при переходе в режим ожидания сигнала вызывается функция Sleep(), которая переводит текущую задачу в так называемый «спящий» режим и вызывает планировщик задач. При соответствующем изменении состояния объекта синхронизации для «спящей» задачи, вызывается функция Resume(), которая переводит ожидающую задачу в активный режим.

В минимальной конфигурации мини-ОС может состоять только из блока начальной загрузки, которая инициализирует процессор и передает управление main-функции приложения. Все остальные модули подключаются к системе в соответствии с заданной конфигурацией.



Содержание раздела