Linux Kernel (Ядро линукса) (часть 1)


Системные вызовы, относящиеся к процессам реального времени

Здесь мы представим читателю группу системных вызовов, позволяющих процессу менять его дисциплину планирования и, в частности, становиться процессом реального времени. Как всегда, процесс должен иметь способность CAP SYS NICE, чтобы Модифицировать значения полей rt_priority и policy у дескриптора любого процесса, включая собственный.

Системные вызовы sched_getscheduler и sched_setscheduler

Системный вызов sched_getscheduler о запрашивает политику планирования, действующую в отношении процесса, идентифицируемого параметром pid. Если pid равен 0, считывается политика вызвавшего процесса. В случае успеха системный вызов возвращает политику sched fifo, sched rr или sched normal (последняя также называется sched other). Соответствующая служебная процедура sys_sched_getscheduier о вызывает функцию f ind process by pid , которая находит дескриптор процесса по переданному значению pid и возвращает значение его поля policy.

Системный вызов sched_setscheduier о устанавливает как политику планирования, так и соответствующие параметры для процесса, идентифицируемого параметром pid. Если pid равен 0, устанавливаются параметры планировщика, применяемые к вызвавшему процессу.

Соответствующая служебная процедура sys_sched_setscheduler о просто вызывает функцию do_sched setscheduler . Эта функция проверяет ДОПуСТИ- мость политики планирования, определяемой параметром policy, и нового приоритета, определяемого параметром param->sched_priority. Она также проверяет, есть ли у процесса способность cap sys nice, или наличие прав суперпользователя у его владельца. Если все в порядке, она удаляет процесс из очереди на выполнение (если он выполняемый), обновляет статический и динамический приоритеты и приоритет реального времени у процесса, возвращает процесс в очередь на выполнение и, если необходимо, вызывает функцию resched tasko для вытеснения текущего процесса, принадлежащего данной очереди.

Системные вызовы sched_getparam и sched_setparam

Системный вызов sched getparamo читает параметры процесса, идентифицируемого параметром pid. Если pid равен 0, считываются параметры процесса current. Соответствующая служебная процедура sys_sched_getparam, как и следует ожидать, находит указатель на дескриптор процесса по параметру
pid, сохраняет поле rt priority в локальной переменной типа sched param и вызывает функцию copy to user , чтобы скопировать это значение в адресное пространство процесса, по адресу, заданному параметром рагаш.

Системный ВЫЗОВ sched_setparam аналогичен вызову sched setscheduler . Различие состоит в том, что sched setparamo не позволяет вызвавшему процессу задавать значение поля policy. Соответствующая служебная процедура sys_sched_setparam вызывает функцию do_sched_setscheduler практически с теми же параметрами, что и служебная процедура sys_sched_ setscheduler.

Системный вызов sched_yield

Системный вызов sched yieido позволяет процессу добровольно освободить процессор без приостановки своего выполнения. Процесс остается в состоянии task running, а планировщик заносит его либо в набор процессов с истекшими квантами времени (если это обычный процесс), либо в конец списка в очереди на выполнение (если это процесс реального времени). Затем вызывается функция schedule о. В результате у других процессов с тем же динамическим приоритетом появляется возможность поработать. Данный вызов используется, в основном, процессами реального времени, принадлежащими классу SCHED_FIFO.

Системные вызовы sched_get_priority_min и sched_get_priority_max

Системные ВЫЗОВЫ sched_get_priority_min И sched_get_priority_max ВОЗвращают, соответственно, минимальный и максимальный статический приоритет реального времени, который может быть использован при проведении политики планирования, идентифицируемой параметром policy.

Служебная процедура sys_sched_get_priority_min возвращает 1, если current является процессом реального времени, и 0 в противном случае.

Служебная процедура sys_sched_get_priority_max возвращает 99 (наивысший приоритет), если current является процессом реального времени, и О в противном случае.

Системный вызов sched_rr_get_interval

Системный вызов sched_rr_get_intervai о записывает в структуру, хранящуюся в адресном пространстве режима пользователя, квант времени, соответствующий круговому принципу работы, для процесса реального времени, идентифицируемого параметром pid. Если pid равен 0, системный вызов записывает квант времени текущего процесса.

Как обычно, соответствующая служебная процедура sys_sched_rr_get_ interval вызывает функцию find_process_by_pid(), Чтобы ПОЛуЧИТЬ деСКриптор процесса по значению pid. Затем она преобразует базовый квант времени выбранного процесса в секунды и наносекунды и копирует эти числа в структуру пользовательского режима. В соответствии с соглашением, временной квант процесса реального времени, принадлежащего классу "первым вошел — первым вышел", равен нулю.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...