2016-12-19 4 views
1

Мы пытаемся оценить, лучше ли выполнять какую-либо связанную с hw задачу в пользователе или в ядре. Задача должна реагировать на прерывание и выполнять некоторую задачу, которая должна копировать данные в физическое (отображаемое) пространство памяти.приоритеты потоков ядра и приоритеты пользовательских потоков

По моему мнению, одна и та же задача должна выполняться как в пользовательском пространстве, так и в ядре.

Единственная открытая проблема заключается в том, что приоритет потока ядра выше приоритета потоков пользователей.

Мы используем pthread для пользователей или kthread для потока ядра.

Итак, мой вопрос:

Когда два потока будет готов, это поток ядра имеет более высокий приоритет по сравнению с пользовательским потоком?

EDIT: Если kthread_create была создана с SCHED_FIFO и приоритет отдается й, и pthread_create было создано с SCHED_FIFO и с учетом приоритетов у, и приоритета PTHREAD выше KTHREAD, будет по-прежним KTHREAD попасть в планировщик перед пользовательский поток?

Спасибо!

ответ

1

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

Kernel Thread имеет более высокий приоритет, чем пользовательский поток, поскольку потоки ядра используются для предоставления привилегированных услуг приложениям.

Помимо этого они также используются ядром для отслеживания того, что все работает в системе, сколько ресурсов выделено для какого процесса и для их планирования.

Как вы знаете, для каждого потока, который существует в пользовательском пространстве, есть соответствующий поток ядра. Поэтому, если потоки процесса в области системы (Ядро) имеют достаточно высокие приоритеты, они будут запланированы на нескольких процессорах в то же самое время время. Средства других потоков ядра будут вытеснены этим потоком ядра, который выполняется от имени пользовательского пространства.

+0

Спасибо, я отредактировал сообщение выше, с вопросом о ценах: «Если pthread выше, чем kthread, все равно kthread попадет в планировщик перед потоком пользователя?» – ransh

+0

@ransh Я изменил свой ответ, но вкратце CPU заплатит более приоритетные потоки в первую очередь. –

+0

Спасибо, так что если пользовательский поток имеет более высокий приоритет, чем поток ядра, он будет запланирован первым, если я правильно пойму. Thx – ransh

0

Процессы в системе Linux представлены структурами struct task_struct. Теперь для потока ядра p-> mm, который является адресным пространством процесса, является NULL, а его активное адресное пространство представлено p-> active_mm. Поэтому, когда поток ядра запланирован, тогда его next->active_mm будет установлен в prev->active_mm запланированной задачи. Это помогает минимизировать сбросы TLB при переключении адресных пространств.

Константа, специфичная для арка PROC_CHANGE_PENALTY, которая определяет аффинность cpu, предоставляющую преимущества процессам в одном процессоре, также отдает предпочтение потокам ядра над пользовательскими потоками (которые имеют -> mm! = NULL и требуют накладных расходов).

Смежные вопросы