===== OSA : Планировщик ===== Сервис ##[[osa:ref:allservices:OS_Run|OS_Run]]()## - это макрос, который содержит бесконечный цикл с работой планировщика. Этот сервис вызывается в самом конце функции main() и полностью передает управление ядру OSA. Планировщик отвечает за проверку готовности задач к выполнению, определение задачи с наивысшим приоритетом (из готовых) и за запуск задач. Вызов сервиса ##[[osa:ref:allservices:OS_Run|OS_Run]]##() может располагаться только в одном месте программы, т.к. он содержит глобальные метки для возврата из задач. Планировщик по очереди перебирает все активные задачи, проверяя их готовность и одновременно вычисляя задачу с высшим приоритетом. Если была найдена одна или несколько готовых задач, то из них выбирается та, у которой приоритет выше, и ей передается управление. Подробнее о приоритетах см. [[osa:ref:description:events_and_priority|"События и проиритетность"]]. Исключение составляет работа в [[osa:ref:services:critical_sections|критической секции]]. OSA допускает передачу управления планировщику из задачи, выполняющейся в критической секции. Планировщик, определив, что находится в критической секции, не осуществляет поиск готовых задач, а сразу же передает управление последней выполнявшейся задаче.