Синхронизация и взаимодействие программных потоков в операционной среде реального времени. Дорогов А.Ю. - 13 стр.

UptoLike

Составители: 

13
еще одним параметром спорадической дисциплины диспетчеризацииK.
Как только число отложенных восстановлений достигнет значения K, при-
оритет потока будет снижен до значения L и поток будет находиться в этом
состоянии до тех пор, пока не закончится период восстановления.
1.6. Управление приоритетами и дисциплиной диспетчеризации
В процессе своего исполнения приоритет потока может изменяться ли-
бо по инициативе самого потока, либо при получении сообщения от более
приоритетного потока. Также может быть изменена дисциплина диспетче-
ризации. В табл. 1.1 приведены системные вызовы, позволяющие выпол-
нить данные операции.
Таблица 1.1
POSIX-вызов Microkernel-вызов Описание
sched_getparam() SchedGet() Получить параметры диспетчеризации
sched_setparam() SchedSet() Установить параметры диспетчеризации
sched_getscheduler() SchedGet() Получить политику диспетчеризации
sched_setscheduler() SchedSet() Установить дисциплину диспетчеризации
В графе POSIX-вызовы представлены системные вызовы, соответст-
вующие международному стандарту POSIX. В графе Microkernel-вызовы
представлены системные вызовы ядра операционной системы QNX-
Neutrino. Эти вызовы обладают обычно большими возможностями, и их
можно рассматривать как расширения стандарта POSIX.
Существует такое понятие, как «масштаб диспетчеризации». POSIX
определяет 2 масштаба: процесса и системы. При диспетчеризации в мас-
штабе процесса ресурсы процессора делятся между процессами, а уже
внутри процесса «разыгрываются» между потоками. При диспетчеризации в
масштабе системы диспетчеризация выполняется на уровне потоков неза-
висимо от процессов, которым они принадлежат. В QNX реализован только
масштаб системы.
1.7. Управление потоками
Под управлением потоком понимаются процедуры создания, уничто-
жения и изменения его атрибутов. В табл. 1.2 перечислены системные вы-
зовы микроядра, которые используются для управления потоками.
Системный вызов создания потока имеет следующий формат:
int pthread_create( pthread_t* thread, // идентификатор потока
const pthread_attr_t* attr , // атрибуты потока
void* (*start_routine)(void* ), // программный код
void* arg ); // список параметров