Современная электроника №9/2023
СОВРЕМЕННЫЕ ТЕХНОЛОГИИ 7 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА • № 9 / 2023 В FX-RTOS реализован алгоритм пла - нирования MLQ (Multi-Level Priority Queue), действующий согласно сле - дующим принципам . 1. Неактивные , но готовые к выполне - нию потоки группируются в отдель - ные очереди с одинаковым приори - тетом . Количество очередей равно количеству приоритетов потоков , определённых в системе . Заблоки - рованные потоки отсутствуют в оче - редях ( рис . 3). 2. Первой обрабатывается очередь с наивысшим приоритетом до пол - ного исчерпания потоков , готовых к выполнению . 3. Диспетчеризация потоков внутри одной очереди может быть устрое - на по порядку (FIFO) либо с разде - лением по времени (Round-Robin). 4. При активации более приоритетного потока выполняется незамедлитель - ное вытеснение менее значимого . 5. Приостановленные потоки в плани - ровании не участвуют . К основным недостаткам данного подхода можно отнести отсутствие со стороны планировщика гарантий выполнения потоков с наименьшими приоритетами при повышенной актив - ности высокоприоритетных . Структура исходных текстов FX-RTOS Модули FX-RTOS можно классифи - цировать по группам : FX ( кроссплат - форменные высокоуровневые ком - поненты ОСРВ ), RTL ( библиотека универсальных алгоритмов и струк - тур данных ), HAL ( слой реализации низкоуровневых функций ОС для раз - личного аппаратного обеспечения ), HW ( низкоуровневые функции для взаимодействия с аппаратурой через регистры процессора ). Далее внима - ние будет уделяться файлам с пре - фиксами fx_thread, fx_sched, fx_spl, hal и hw . Иерархическая структура систе - мы показана на рис . 4. Синхронизация внутри ядра и блокировки Многопоточный код обязан отве - чать требованиям надёжности ( отсут - ствие ошибок и целостность дан - ных как в примере производителя и потребителя ) и жизнеспособности ( способности всех взаимодействую - щих потоков завершить работу ). Ядро FX-RTOS является вытесняемым , то есть допускающим прерывания без нарушения целостности управляю - щих структур данных и алгоритмов . Естественно , само ядро не имеет воз - можности использовать примитивы синхронизации , предоставляемые в пользовательском API, а использует более низкоуровневые механизмы . В однопроцессорной системе источни - ком асинхронности являются преры - вания и смена контекста выполняю - щихся потоков . Например , системный вызов , прерванный в момент модифи - кации очереди к объекту , приведёт к неопределённому поведению при обра - щении к тому же объекту из другого потока . Запрещение прерываний в однопро - цессорных системах обеспечивает вза - имное исключение как с потоками , так и с обработчиками прерываний . Этот простой способ , выполняемый за 1 инструкцию , имеет высокую гра - нулярность , так как не позволяет выполняться в том числе и тем пото - кам , которые не используют защища - емый ресурс . В FX-RTOS использует - ся концепция приоритета системы по отношению к асинхронным собы - тиям (SPL) . Различные сервисы ОС должны выполняться на минималь - ном уровне SPL, достаточном , чтобы в это время не могли выполняться дру - гие потоки , пользующиеся теми же управляющими структурами . Запре - щение всех прерываний осуществляет - ся на самом высоком уровне , в терми - нах HAL называющемся SPL_SYNC [6]. В системах реального времени продол - Задача имеет наивысший приоритет среди готовых Задача заблокирована по запросу или из-за ожидания ресурса или события Задача разблокирована, но у неё не наивысший приоритет Running Ready Suspended (blocked) Рис . 2. Диаграмма состояний выполняющейся задачи Рис . 3. Схема работы алгоритма планирования MPQ. Зелёным кругом обозначен выполняющийся активный поток , красные круги – потоки , ожидающие в очередях . Синий круг – системный idle- поток Рис . 4. Иерархия компонентов FX-RTOS во встроенном приложении Priority IDLE Application FX-RTOS kernel FX-RTOS API Hardware FX RTL HAL CPU HAL HAL
RkJQdWJsaXNoZXIy MTQ4NjUy