- •8. Многозадачность, ядро RTOS
- •Динамическое создание задачи
- •Обработка прерывания
- •Переключение задач
- •Переключение задач, пример
- •Переключение задач, пример (2)
- •Инициирование переключения
- •Дисциплины переключения
- •Диспетчеризация задач
- •Ядро операционной системы
- •Управление задачами
- •Планирование и диспетчеризация задач
8. Многозадачность, ядро RTOS
Приложение
Задача_1 . . . Задача_N
API
«Виртуальная машина»:
•Многозадачность
•Надежная синхронизация
Аппаратная платформа
«Объект» (Внешняя среда)
1. Задача – работа, выполняемая машиной; задаче соответствует статическая программа, описывающая поведение машины
2. Приложение – совокупность задач, конкурирующих за ресурс (процессор, память, ввод/вывод)
3. API (Application Program
Interface) – функции операционной системы, доступные из прикладной программы (сервисы операционной системы)
8. Многозадачность, ядро RTOS |
1 |
2002 v.0.4 |
|
Динамическое создание задачи
Приложение |
|
Программа ‘Х’ |
|
|
|
||
|
Описание |
||
|
|
|
|
|
Вызов сервиса |
||
|
|
действия, |
|
|
Создать_задачу(…) |
|
выполняемых |
|
|
|
задачей |
|
|
|
|
«Виртуальная |
Дескриптор задачи (ТСВ) |
||||
машина» |
|
|
|
|
|
|
адрес ‘X’ |
|
|
||
|
|
||||
|
|
|
адрес стека |
||
|
Создание дескриптора |
||||
|
|
|
|
|
|
|
|
|
|
|
(Операционная система)
8. Многозадачность, ядро RTOS |
2 |
2002 v.0.4 |
|
Обработка прерывания
Событие i
x:
«Основная» |
|
|
Вектор |
Системный |
|
Регистр |
|||||
|
|
|
указателя |
||||||||
программа |
|
прерывания i-го |
|
стек |
|
стека (SP) |
|||||
|
|
|
события |
|
|
|
|
|
|||
|
|
x |
|
|
|
||||||
|
|
|
|||||||||
|
|
|
|
|
|
|
Контекст |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
Адрес P |
|
|
|
|
||||
|
|
|
|
|
|
|
«основной |
|
|
|
|
|
Запоминание контекста, |
программы» |
|
|
|
||||||
|
в точке x |
|
|
|
|||||||
|
|
передача управления по |
|
|
|
||||||
|
|
|
адресу Р |
Р: |
|
|
|
Процедура |
|||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
обработки |
|
|
|
|
|
|
|
|
return |
|
прерывания |
|
|
|
|
|
|
|
|
|
|
|
|
|
Восстановление
контекста, возврат из
прерывания return - инструкция возврата из процедуры обработки
прерывания, автоматически восстанавливает контекст
8. Многозадачность, ядро RTOS |
3 |
2002 v.0.4 |
|
Переключение задач
Обработчик прерывания – при каждом событии
активизируется с адреса Р
Активизация задачи – должна производится с той точки, где она была приостановлена
Идея реализации переключения - по событию,
требующему активизации новой задачи, обработчик прерывания:
•обеспечивает запоминание контекста текущей задачи в ее стеке
•из дескриптора новой задачи «достает» адрес стека
•делает этот стек текущим
•осуществляет возврат в соответствии с контекстом из нового стека
8. Многозадачность, ядро RTOS |
4 |
2002 v.0.4 |
|
Переключение задач, пример
События
|
x0: |
Задача А |
|
|
|
|
|
|
|
|
|
|
ТСВ А |
|
ТСВ В |
|||
|
|
|
|
|
|
|
|
|
|
|
|
адрес программы ‘А’ |
|
адрес программы ‘В’ |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
* |
|
|
|
|
|
|
|
|
|
Задача B |
|
|
адрес стека s1 |
|
адрес стека s2 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y0: |
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
Стек A |
|
|
Стек |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
B |
||
** |
|
|
|
|
|
|
|
|
|
|
|
s1: |
|
|
|
s2: |
|
|
1 |
|
|
|
|
|
|
|
|
|
|
адрес возврата x1 |
адрес возврата у0 |
||||||
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Контекст А |
|
Контекст В |
|||
|
|
|
|
|
|
|
: |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
в точке x1 |
|
в точке у0 |
||||
|
|
|
|
|
|
y1 |
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SP |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s2 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(Обработчики прерываний на рисунке не показаны)
8. Многозадачность, ядро RTOS |
5 |
2002 v.0.4 |
|
Переключение задач, пример (2)
Событие * :
•Контекст задачи (в том числе адрес возврата x1) помещается в «активный» стек A
•Из ТСВ задачи В выбирается адрес стека s2 и помещается в регистр процессора SP – стек задачи В становится «активным»
•Передача управления по адресу возврата из нового «активного» стека B - (y0)
•Действия задачи B
Событие **:
•Контекст задачи (в том числе адрес возврата y1) помещается в «активный» стек B
•Из ТСВ задачи А выбирается адрес стека s1 и помещается в регистр процессора SP – «активным» становится стек задачи А
•Передача управления по адресу (x1) из нового «активного» стека А с восстановлением контекста
•Действия задачи А
8. Многозадачность, ядро RTOS |
6 |
2002 v.0.4 |
|
Инициирование переключения
События вызывают прерывания
• Аппаратные (interrupt)
сигналы от аппаратуры – готовность АЦП, таймер, нажатие кнопки на функцианальной клавиатуре ...
• программные (trap)
обращение к функциям, реализующим API (системные вызовы) – создание задачи, завершение задачи, приостановка задачи, вызов семафорной операции ....
Прерывания инициируют переключение задач
8. Многозадачность, ядро RTOS |
7 |
2002 v.0.4 |
|
Дисциплины переключения |
|
|||||||||||||
(диспетчеризация задач) |
|
|||||||||||||
Time-slicing |
|
|||||||||||||
Таймер |
|
|
|
|
|
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
Обработчик прерывания |
|
|
|
|
|
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
Задача 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
|||||
Задача 2 |
|
|
|
|
|
|
|
|
|
t |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|||||||
При ограничениях жесткого реального времени не применяется ! |
|
|||||||||||||
Вытеснение (preempting) |
|
|||||||||||||
Событие |
|
|
|
|
|
t |
||||||||
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|||
Обработчик прерывания |
t |
|||||||||||||
Задача 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
t |
|
|
|
|
|||||||||||
Задача 2 |
|
|
|
|
|
t |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
8. Многозадачность, ядро RTOS |
8 |
2002 v.0.4 |
|
Диспетчеризация задач
Диспетчеризация - выбор следующей выполняемой задачи из набора задач, готовых к выполнению
Критерий выбора – приоритет задачи
Приоритет задачи – целое число, характеризующее
важность задачи на данный момент времени; устанавливается |
||||
разработчиком системы на этапе проектирования, может |
||||
изменяться системой в процессе работы в зависимости от |
||||
текущих условий |
|
|
|
|
|
|
|
||
|
Дескриптор задачи |
адрес ‘X’ |
|
|
|
адрес стека |
|
|
|
|
(TCB) |
|
|
|
приоритет |
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8. Многозадачность, ядро RTOS |
9 |
2002 v.0.4 |
|
Ядро операционной системы
Внешние |
Системные |
Прерывания от |
прерывания |
вызовы (trap) |
таймера |
Обработка
аппаратных
прерываний
case of
create_task suspend_task
create_timer
...
Таймерные
сервисы
Управление задачами
Возврат в задачу
8. Многозадачность, ядро RTOS |
10 |
2002 v.0.4 |
|
|
TCB |
Состояния задачи |
|
|
|
|
|
|
адрес ‘X’ |
|
|
|
адрес стека |
|
|
|
создание задачи |
||
|
|
|
|
|
приоритет |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
состояние |
|
|
|
|
Ready |
|
|
|
||
|
|
|
|
|
|
активизация |
ресурс освободился |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
вытеснение |
|
|
Blocked |
|
|
Running |
|
|
|
ресурс занят
8. Многозадачность, ядро RTOS |
11 |
2002 v.0.4 |
|