Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРВ_09_18_01_Диспетчеризация.pptx
Скачиваний:
5
Добавлен:
20.06.2023
Размер:
72.7 Кб
Скачать

9. Диспетчеризация

События t

Диспетчер

 

 

 

 

 

 

 

t

Задача 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

Задача 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

События

Очереди блокированных

BQ1

 

 

 

 

 

 

 

 

 

 

 

Исполняемая

 

 

. . .

 

 

 

ДИСПЕТЧЕР

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

задача

 

 

 

 

 

 

 

 

 

 

 

 

BQn

 

 

 

 

 

 

 

 

 

 

 

 

RQ1

. . .

RQn

Очереди готовых

9. Диспетчеризация 2015 v.01

1

Смена состояний по событиям

создание задачи

событие

Ready

активизация ресурс освободился

 

вытеснение

Blocked

Running

ресурс занят

действие диспетчера

9. Диспетчеризация

2015 v.01

2

Состояние Running, дисциплины переключения

Разделение времени (Time clicing)

Тик Таймера (событие)

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

Диспетчер

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

Задача 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

Задача 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

При ограничениях жесткого реального времени применение проблематично

Вытеснение (preempting)

Событие

 

 

 

 

 

 

 

 

t

(Не только тик таймера)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Диспетчер

 

 

 

 

 

 

 

 

t

Задача 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

Задача 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9. Диспетчеризация

2018 v.01

3

Типы событий, вызывающих переключение

Внешние

 

 

прерывания,

Системные

Исключения - аппаратные

прерывания от

таймера

вызовы

сбои (interrupt), деление на

(interrupt)

(trap)

0 (trap)

Обработка

аппаратных

прерываний

Диспетчер

case of i

create_task suspend_task

create_timer

...

Управление задачами

Обработка

исключительных

ситуаций

Возврат в задачу

9. Диспетчеризация 2015 v.01

4

Состояние Ready, очереди «готовых»

Приоритеты

реального

времени

K

. .

i

. .

0

 

 

Нитки реального времени

 

 

 

 

 

 

 

 

 

. . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TCB

 

TCB

 

TCB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

Очереди задач реального

 

 

 

 

времени (preempting)

 

 

 

 

 

 

 

 

Real-time threads

 

 

 

 

 

 

. . .

 

 

 

 

 

 

TCB

 

TCB

 

 

TCB

 

 

 

 

 

 

 

¨

Вытеснение на основе

.

 

 

 

 

 

 

 

 

 

 

 

 

приоритетов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Нитки «нереального времени»

 

Non real-time threads

 

 

 

 

 

 

. . .

 

 

 

 

 

TCB

 

TCB

 

TCB

 

¨

Time slicing в соответствии с

 

 

 

 

 

 

приоритетами «нереального»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

1

 

 

 

 

 

N

 

 

времени

 

 

 

Очередь задач

 

 

 

 

«нереального» времени (time-slicing)

9. Диспетчеризация 2015 v.01

5

Инициирование переключения

События вызывают прерывания

Аппаратные (interrupt)

сигналы от аппаратуры – готовность АЦП, таймер, нажатие кнопки

на функцианальной клавиатуре ...

Программные (trap)

обращение к функциям, реализующим API (системные вызовы) – создание задачи, завершение задачи, приостановка задачи, вызов семафорной операции ....

Прерывания инициируют переключение задач

9. Диспетчеризация 2014 v.01

6

 

 

Состояния потока QNX

CONDVAR

Waiting for a condition variable to be signaled.

DEAD Dead. Kernel is waiting to release the thread's resources.

INTR

Waiting for an interrupt.

JOIN Waiting for the completion of another thread.

MUTEX

Waiting to acquire a mutex.

NANOSLEEP Sleeping for a period of time.

NET_REPLY Waiting for a reply to be delivered across the network.

NET_SEND

Waiting for a pulse or message to be delivered across the network.

READY

Not running on a CPU, but is ready to run

 

(one or more higher or equal priority threads are running).

RECEIVE

Waiting for a client to send a message.

REPLY

Waiting for a server to reply to a message.

RUNNING

Actively running on a CPU.

SEM Waiting to acquire a semaphore.

SEND

Waiting for a server to receive a message.

SIGSUSPEND

Waiting for a signal.

SIGWAITINFO

Waiting for a signal.

STACK

Waiting for more stack to be allocated.

STOPPED

Suspended (SIGSTOP signal).

WAITCTX

Waiting for a register context (usually floating point)

 

to become available (only on SMP systems).

WAITPAGE

 

Waiting for process manager to resolve a fault on a page.

WAITTHREAD

Waiting for a thread to be created.

9. Диспетчеризация 2015 v.01

7

Дисциплины диспетчеризации (POSIX)

SCHED_FIFO — диспетчеризация с постоянными приоритетами потоков; поток работает до конца, если не будет заблокирован или вытеснен более приоритетным потоком

SCHED_RR — аналогично SCHED_FIFO, с той разницей, что потоку выделяется временной квант, по истечению которого его вытесняет поток равного приоритета

SCHED_OTHER — в настоящее время идентично SCHED_RR. SCHED_SPORADIC — «спорадический сервер».

main() { }

tid 1 p=10

thread 2

tid 2 p=12

pid 1

thread 1 tid 1 p=12

thread 2 tid 2 p=10

thread 3 tid 3 p=12

pid 2

Диспетчеризация определяется на уровне потоков

Диспетчеризация вытесняющая (preempting)

«Принудительное вытеснение» - функция sched_yield()

Функции «пассивной задержки» - sleep(), nanosleep(), delay() вызывают вытеснение

9. Диспетчеризация

2015 v.01

8