Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Шрифт:
8.4.3. Компоненты многозадачных систем
Чтобы выполнить многозадачную операционную систему, разработчик системы (которым являетесь вы) должен рассматривать управление прикладным устройством как группу независимых, но взаимодействующих задач. Каждая задача выполняет ряд связанных с ней действий. Цель многозадачной системы состоит в том, чтобы выполнить требования к прикладному устройству, изменяя задачи, планируя и реализуя их осуществление и решая конфликты, возникающие между различными задачами, из-за использования только одного процессора. Как вы могли уже себе представить, многозадачная система может быть очень сложной. Однако мы разбиваем систему на составные части и исследуем каждую из них отдельно.
Операционная система должна следить за состоянием каждой из управляемых ей задач. Обратимся снова к примеру с автомобильными дилерами, в котором мы использовали списки с указателями, чтобы учесть текущее состояние каждого
Обычно ОСРВ позволяет частично выполнять задачу на некотором ограниченном временном промежутке. Когда время, выделенное для задачи истекает, ОСРВ сохраняет текущий контекст задачи в связанном с ней блоке управления TCB. Затем ОСРВ решает, какой из задач предоставить очередную часть процессорного времени. Для принятия этого решения может использоваться ряд алгоритмов планирования. Но какой бы алгоритм планирования не был выбран, он должен удовлетворять основному требованию: каждой задаче должна быть выделена оптимальная доля процессорного времени.
Прежде, чем задача сможет перейти в состояние готовности, ОСРВ должна гарантировать, что ей будут доступны все необходимые ресурсы. Под ресурсами понимаются специфические данные, аппаратные подсистемы и т. д. Например, если задача должна использовать одну из подсистем микроконтроллера 68HC12, ОСРВ должна гарантировать, что этот ресурс доступен для задачи, переходящей в состояние готовности. Задача же, которая ожидает необходимого ресурса, должна быть переведена в состояние ожидания.
Процессор должен также иметь возможность приостановить задачу на некоторое время, чтобы предоставить процессорное время задачам с более низким приоритетом. Если мы не сделаем этого, выполняя все время задачи с самым высоким приоритетом, то ряд задач просто никогда не получит процессорного времени. Чтобы предотвратить эту ситуацию, активные задачи с высоким приоритетом должны временно переводиться в ждущее состояние, чтобы позволить частично выполнить низкоприоритетные задачи, находящиеся в состоянии готовности. Операционная система должна также иметь механизмы, позволяющие выполнять критические задачи с наивысшим приоритетом по мере их появления. Это подразумевает использование прерываний в обработке ОСРВ.
Для выполнения этих действий ядро ОСРВ использует ряд инструментов, включая системные таблицы, отслеживающие состояние задач и диспетчеры/планировщики, исследующие данные системы, чтобы определить, какая из задач должна выполняться в любой момент. ОСРВ также обеспечивает возможность осуществления межзадачных связей, которую мы рассмотрим далее в этой главе.
Системные таблицы. Операционная система используют ряд таблиц/блоков, чтобы проследить состояние задач, устройств ввода–вывода и услуг системы. Мы уже обсудили в общих чертах блок управления задачами TCB в разделе 8.4. Кроме TCB, операционная система также поддерживает управляющий блок устройства (DCB), чтобы отслеживать состояние связанных c системой устройств. Это позволяет операционной системе гарантировать, что все требуемые задачей ресурсы доступны для использования, до того как будет дано разрешение на переход задачи в состояние готовности. В зависимости от числа устройств и ресурсов в системе, DCB может быть введен с помощью простого двумерного массива, который может динамически изменяться при изменении состояния устройства.
Пример: Когда мы наблюдали по телевидению феноменальную игру в гольф Лесного Тигра (Matt Christopher, прим. переводчика), то были заинтригованы тем, как же обслуживающий персонал поля для гольфа способен проследить за состоянием большого числа игроков в гольф (задач) на турнире, чтобы предоставлять им лунки (ресурсы). В процессе передачи, мы увидели большое табло, на котором отслеживалось состояние игроков и лунок. Обслуживающий персонал поля для гольфа мог сообщить состояние данного игрока или лунки. Табло состояния постоянно изменялось в течение турнира. ОСРВ использует тот те же методы (TCB и DCB) чтобы проследить состояние задач, ресурсов и услуг в процессе выполнения программы.
Диспетчер/планировщик. Диспетчер/планировщик — другая ключевая часть ядра ОСРВ. Первичная его функция состоит в том, чтобы определить, какая из задач является очередной. Планировщик может использовать ряд алгоритмов, чтобы принять это решение. В следующем разделе обсуждаются различные алгоритмы и свойственные им недостатки и преимущества.
8.5. Типы операционных систем реального
времени
Обычно, операционные системы реального времени характеризуются типом алгоритма, используемого звеном диспетчера/планировщика, имеющимся в ядре ОСРВ. Уже название каждого типа ОСРВ дает достаточно хорошее описание работы его алгоритма. Проведем сравнительный обзор различных типов ОСРВ. Мы должны
подчеркнуть, что ни один из рассматриваемых алгоритмов планирования ОСРВ не лучше любого другого. Выявление алгоритма, наиболее подходящего для конкретного применения является задачей программиста, создающего систему ОСРВ.8.5.1. Системы с циклическим опросом
Система с циклическим опросом является наиболее простым ядром планирования ОСРВ, как для разработки, так и для исполнения. Как подразумевается самим названием, оно использует механизм последовательного опроса, чтобы определить, требует ли данная задача процессорного времени. Когда задача его требует, оно предоставляется ей от начала до конца выполнения. Как только задача заканчивается, операционная система продолжает опрос других задач, требующих процессорного времени.
Системы с циклическим опросом используются при управлении многозадачными системами с равным приоритетом для всех задач. Она должна также использоваться для систем с задачами, которые вряд ли потребуют процессорного времени одновременно. Так как одиночная задача выполняется до завершения, межзадачная связь в таких операционных системах обычно не требуется.
Основное преимущество системы с циклическим опросом — простота. С этим типом системы просто определить время срабатывания специфической задачи, систему просто написать и отладить. Основной недостаток такой системы — также простота. Система с циклическим опросом не может обрабатывать пакет событий — то есть несколько задач, требующих процессорного времени одновременно.
Следует подчеркнуть, что система с циклическим опросом — не лучший выбор сценария работы операционной системы реального времени. Она имеет существенные ограничения, однако идеально подходит для некоторых приложений, в чем мы убедимся на следующем примере.
Пример: В главе 2 мы обсуждали встроенную систему управления, предназначенную для обработки входных сигналов дистанционного управления или группового ввода для стерео усилителей. В этом специфическом примере, операционная система инициализировала систему усилителя и затем непрерывно опрашивала входные сигналы от пульта дистанционного управления и переключателей на лицевой панели. Интерфейс дистанционного управления связан с портом А, а переключатели на лицевой панели — портом B. Для этого применения, опрос был наилучшим метод для реализации операционной системы. Он был выбран в качестве предпочтительного, потому что 1) как только усилитель инициализирован, операционная система, выполняет только опрос сигналов на входах, 2) входы от дистанционного управления и переключателей лицевой панели имеют равный приоритет и 3) время реакции на изменение входных сигналов не критично.
8.5.2. Циклический опрос с прерываниями
Что же будет, если наше прикладная программа в основном хорошо соответствует системе с опросом, но содержит несколько задач, которые требуют непосредственного доступа к процессору? Необходимо ли отказываться от простой системы с опросом в пользу намного более сложного алгоритма планирования ОСРВ? Ответ будет отрицательным. Как мы указывали в главе 4, микроконтроллер 68HC12 имеет мощную, гибкую систему прерывания с приоритетным управлением. Чтобы обрабатывать простые текущие задачи может применяться алгоритм опроса, в то же время для внеочередной обработки задач требующих немедленного вмешательства может использоваться система прерываний.
Эти типы алгоритмов планирования известны также как системы с передним планом и фоном. Алгоритм опроса рассматривается как фоновая часть операционной системы, в то время как прерывание отвечает за приоритетную часть системы. Обычно, эти системы и разрабатываются по частям. Сначала разрабатывается, выполняется и отлаживается фоновая часть, а затем к ней добавляется часть приоритетного прерывания.
Пример: Обратимся опять к нашему контроллеру стереоусилителя. Транзисторные усилители, используемые в нашем стереопроекте достаточно дороги. В хорошем проекте транзисторы не перегреваются при обычной работе усилителя, чтобы предотвратить их повреждение. Предположим, что для защиты от перегрева проектировщик предусмотрел датчики температуры для каждого транзистора, чтобы постоянно контролировать их текущую температуру. Если температура любого транзистора достигает недопустимого уровня, проектировщик хотел бы, чтобы операционная система включала дополнительные вентиляторы охлаждения. Эта модификация проекта не требует, чтобы мы вообще отказались от схемы опроса. Лучше всего использовать схему опроса в фоновом режиме, чтобы обработать обычное рабочее управление стереоусилителем. В приоритетной части системы, датчики, контролирующие температуру транзисторов, могли бы быть подключены с помощью интерфейса к системе прерывания. Прерывание было бы активизировано при достижении температурой транзистора(ов) неприемлемо высокого уровня. В этом случае процессор должен был бы формировать сигнал, на включение дополнительного вентилятора. Мы исследуем этот проект в применениях, рассмотренных в разделе 8.9 и задании для самостоятельного исследования 2, приведенного в конце главы.