tasklet, taskqueue, work-queue, что использовать?

Я прохожу ldd3 в течение последних нескольких месяцев. Много раз перечитывал первые несколько глав.

Эти две ссылки используются по-разному, одна использует рабочую очередь, другая использует очередь задач. Чтобы реализовать нижнюю половину.
http://www.tldp.org/LDP/lkmpg/2.4/html/x1210.html http://www.linuxtopia.org/online_books/linux_kernel/linux_kernel_module_programming_2.6/x1256.html

У меня есть некоторые сомнения по поводу того, что tasklet, taskqueue, work-queue все, кажется, выполняют какое-то задание в свободное время :--

а) В чем именно разница между этими тремя?

б) Что следует использовать для нижней половины обработчика прерываний?

смущенный ...???


person user2090434    schedule 20.02.2013    source источник
comment
пожалуйста ответьте на этот вопрос.   -  person user2090434    schedule 21.02.2013
comment
stackoverflow.com/questions/2147299/   -  person user2090434    schedule 21.02.2013


Ответы (2)


Tasklet и work-queue обычно используются в нижней половине, но их можно использовать где угодно, для них нет ограничений.

По поводу разницы.

1) Тасклет используется в контексте прерывания. Весь код тасклета должен быть атомарным, поэтому к нему применяются все правила, применяемые к атомарному контексту. Например. Они не могут спать (поскольку их нельзя перепланировать) или удерживать блокировку в течение длительного времени.

2) В отличие от Tasklet, рабочая очередь выполняется в контексте процесса, что означает, что они могут спать и удерживать блокировку в течение длительного времени.

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

person duck    schedule 05.03.2013
comment
Это неправильное предположение, которое обычно делают люди, ошибочно называя softirq тасклетом или даже нижней половиной. Как вы сказали, тасклет реализован через softirq (приоритет 5 и 0). Но они оба разные по работе и оформлению. У них есть отдельный интерфейс для регистрации себя. У них есть 4 способа отложить работу в нижней половине: 1. SoftIRQ 2. Tasklet 3. Workqueue (замена очередей задач) 4. Kernel Timer - person duck; 07.03.2013
comment
Softirq похож на тасклет, который запускается в контексте прерывания. Но Softirq необходимо было зарегистрировать во время компиляции, тогда как тасклеты регистрируются динамически. Более того, два softirq одного типа могут работать одновременно, тогда как два тасклета одного типа не могут. - person duck; 07.03.2013

Softirq и тасклет являются тасклетами контекста прерывания, которые выполняются в контексте прерывания, а рабочие запросы выполняются в коде контекста процесса. Коду контекста процесса разрешено приостанавливать выполнение, но код контекста прерывания не может приостанавливаться во время выполнения (только другое прерывание может вытеснить запланированное прерывание). нижняя половина контекста прерывания. )

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

Для экс. Если вы пишете драйвер nw, который отправляет пакеты в и из HW на основе прерывания, вы хотели бы завершить это действие без каких-либо задержек, поэтому доступны только варианты softirq или тасклеты.

Примечание. Лучше прочтите главу 8 «Разработка ядра Linux» Роберта Лава. Я также читал LDD, но все же «Разработка ядра Linux» Роберта Лава лучше подходит для понимания, связанного с прерываниями.

person Nishith Goswami    schedule 08.04.2014