110
КОМПОНЕНТЫ И ТЕХНОЛОГИИ •
№ 3 '2011
компоненты
микроконтроллеры
Пример перехода задачи в блокированное
состояние показан на рис. 3.
Задача 1
исполняется на протяжении
определенного времени (1). В момент вре-
мени (2) планировщик приостанавливает
задачу 1 и возобновляет выполнение зада-
чи 2 (момент времени (3)). Во время свое-
го выполнения (4) задача 2 захватывает
определенный аппаратный ресурс для свое-
го единоличного использования. В момент
времени (5) планировщик приостанавлива-
ет задачу 2 и восстанавливает задачу 3 (6).
Задача 3 пытается получить доступ к тому же
самому аппаратному ресурсу, который занят
задачей 2. В результате чего задача 3 блокиру-
ется — момент времени (7). Через некоторое
время управление снова получает задача 2,
которая завершает работу с аппаратным ре-
сурсом и освобождает его (9). Когда управле-
ние получает задача 3, она обнаруживает, что
аппаратный ресурс свободен, захватывает его
и выполняется до того момента, пока не бу-
дет приостановлена планировщиком (10).
Когда задача выполняется, она, как и любая
программа, использует регистры процессора,
память программ и память данных. Вместе эти
ресурсы (регистры, стек и др.) образуют кон-
текст задачи (task execution context). Контекст
задачи целиком и полностью описывает теку-
щее состояние процессора: флаги процессора,
какая инструкция сейчас выполняется, какие
значения загружены в регистры процессора,
где в памяти находится вершина стека и т. д.
Задача «не знает», когда ядро ОСРВ прио-
становит ее выполнение или, наоборот, воз-
обновит.
На рис. 4а показан абстрактный процессор,
который выполняет задачу 1, частью которой
является операция сложения. Операнды за-
гружены в регистры Reg1 и Reg2 (инструкции
LDI). Пусть перед инструкцией сложения
ADD ядро приостановило задачу 1 и отдало
управление задаче 2, которая использует ре-
гистры Reg1 и Reg2 для своих нужд (рис. 4б).
В какой-то момент времени ядро возобновит
выполнение задачи 1 с места, где она была
приостановлена: с инструкции ADD (рис. 4в).
Однако для задачи 1 изменение ее контекста
(регистров Reg1 и Reg2) останется незамечен-
ным, произойдет сложение, но его результат
«с точки зрения» задачи 1 окажется неверным.
Таким образом, одна из основных функ-
ций ядра ОСРВ — это обеспечение идентич-
ности контекста задачи до ее приостановки
и после ее восстановления. Когда ядро при-
останавливает задачу, оно должно сохранить
контекст задачи, а при ее восстановлении —
восстановить. Процесс сохранения и восста-
новления контекста задачи называется пере-
ключением контекста (context switching).
Немаловажным понятием является квант
времени работы планировщика (tick) — это
жестко фиксированный отрезок времени,
в течение которого планировщик не вмеши-
вается в выполнение задачи. По истечении
кванта времени планировщик получает воз-
можность приостановить текущую задачу
и возобновить следующую, готовую к вы-
полнению. Далее квант времени работы
планировщика будет называться систем-
ным квантом. Для отсчета системных кван-
тов в МК обычно используется прерывание
от таймера/счетчика. Системный квант ис-
пользуется как единица измерения интерва-
лов времени средствами ОСРВ.
Уменьшая продолжительность системного
кванта, можно добиться более быстрой реак-
ции программы на внешние события, однако
это приведет к увеличению частоты вызова
планировщика, что скажется на производи-
тельности вычислительной системы в целом.
Подводя итог, можно выделить три основ-
ные функции ядра любой ОСРВ:
1. Работа планировщика, благодаря которой
создается эффект параллельного выпол-
нения нескольких задач за счет быстрого
переключения между ними.
2. Переключение контекста, благодаря кото-
рому выполнение одной задачи не сказы-
вается на остальных задачах (задачи рабо-
тают независимо).
3. Временная база, основанная на системном
кванте как единице измерения времени.
Вышеприведенное описание основ ОСРВ
является очень обобщенным. Существует
еще целый ряд понятий, таких как приорите-
ты задач, средства синхронизации, передача
информации между задачами и др., которые
будет раскрыты позже на примере конкрет-
ной ОСРВ — FreeRTOS.
Достарыңызбен бөлісу: