Что такое прерывание потоков? - PullRequest
5 голосов
/ 29 декабря 2010

(Примечание: речь идет не о прерывании потоков Java / .NET, а о прерываниях в режиме ядра.)

Привет,

В Википедии естьскажем о потоках прерываний в обработчике прерываний статья:

потоки прерываний

Несколько операционных систем - Solaris, NetBSD, Mac OS X, WinCE и FreeBSD, дляпример - использовать другую схему, известную как потоки прерываний.Обработчик прерываний, предоставляемый драйвером устройства, является просто высокоприоритетным потоком, который работает с включенными прерываниями и, что более важно, может блокировать мьютекс.Это значительно упрощает блокировку в ядре.Кроме того, поток прерываний может быть вытеснен потоком прерываний с более высоким приоритетом.

Что это за техника потоков прерываний, которую, очевидно, использует FreeBSD (среди прочих)?И где я могу прочитать об этом подробнее?

Заранее спасибо.:)

Ответы [ 2 ]

3 голосов
/ 29 декабря 2010

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

Они обрабатываются ядром.Как правило, когда приходит одно такое прерывание, текущий запущенный код останавливается и вызывается функция ядра.Прерывания должны быть быстро устранены, чтобы получить отзывчивую систему, поэтому они не должны блокировать ядро ​​в ожидании какого-либо ресурса или делать что-то подобное.Классическое решение состоит в том, чтобы иметь функцию немого прерывания, которая просто записывает номер прерывания и возврата, а затем в главном цикле ядра, чтобы проверить, произошло ли какое-либо прерывание и вызвать реальный обработчик.

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

1 голос
/ 29 декабря 2010

В FreeBSD ithread (9) .

есть еще немного технической информации.
...