Соблюдение сроков является функцией приложения, которое вы пишете. ОСРВ просто предоставляет средства, которые помогут вам в соблюдении сроков. Вы также можете программировать на «голом металле» (без ОСРВ) в большом главном цикле и уложиться в сроки.
Также имейте в виду, что в отличие от ОС более общего назначения, ОСРВ имеет очень ограниченный набор выполняемых задач и процессов.
Некоторые из средств, которые предоставляет ОСРВ:
- Планировщик на основе приоритетов
- Процедура прерывания системных часов
- Детерминированное поведение
Планировщик на основе приоритетов
Большинство ОСРВ имеют от 32 до 256 возможных приоритетов для отдельных задач / процессов. Планировщик запустит задачу с наивысшим приоритетом. Когда запущенная задача отдает ЦП, запускается следующая задача с наивысшим приоритетом и т. Д. *
Задача с наивысшим приоритетом в системе будет иметь процессор до:
- он работает до завершения (то есть добровольно отказывается от процессора)
- задача с более высоким приоритетом готова, и в этом случае исходная задача заменяется новой (с более высоким приоритетом) задачей.
Как разработчик, ваша задача - назначать приоритеты задач так, чтобы ваши сроки были соблюдены.
Процедуры прерывания системных часов
ОСРВ обычно предоставляет какие-то системные часы (где-то от 500 до 100 мс), которые позволяют выполнять чувствительные ко времени операции.
Если у вас системное время в 1 мс, и вам нужно выполнять задачу каждые 50 мс, обычно есть API, который позволяет вам сказать «Через 50 мс, разбуди меня». В этот момент задание будет находиться в спящем режиме, пока ОСРВ не разбудит его.
Обратите внимание, что простое пробуждение не гарантирует, что вы будете бежать именно в это время. Это зависит от приоритета. Если в данный момент выполняется задача с более высоким приоритетом, вы можете быть отложены.
Детерминированное поведение
ОСРВ идет на многое, чтобы гарантировать, что если у вас есть 10 или 100 задач, вам не нужно больше переключать контекст, определять, какая следующая задача с наивысшим приоритетом и т. Д ...
Как правило, операция RTOS пытается быть O (1).
Одной из основных областей детерминированного поведения в ОСРВ является обработка прерываний. Когда сигнализируется линия прерывания, ОСРВ немедленно переключается на правильную подпрограмму обработки прерываний и обрабатывает прерывание без задержки (независимо от приоритета любой выполняемой в данный момент задачи).
Обратите внимание, что большинство аппаратных ISR будут написаны разработчиками проекта. RTOS может уже предоставлять ISR для последовательных портов, системных часов, может быть, сетевого оборудования, но все специализированное (сигналы кардиостимулятора, исполнительные механизмы и т. Д.) Не будет частью RTOS.
Это грубое обобщение, и, как и во всем остальном, существует большое разнообразие реализаций ОСРВ. Некоторые RTOS работают по-другому, но приведенное выше описание должно быть применимо к большой части существующих RTOS.