2013-07-16 2 views
4

Может кто-то помочь прояснить мое понимание потоков ядра. Я слышал, что в Linux/Unix потоки ядра (например, системные вызовы) выполняются быстрее, чем потоки пользователей. Но разве эти пользовательские потоки не запланированы ядром и выполняются с использованием потоков ядра? может кто-то, пожалуйста, скажите мне, в чем разница между потоком ядра и пользовательским потоком, отличным от того, что они имеют доступ к различным адресным пространствам. какая разница между ними? Верно ли, что на одном процессорном поле, когда пользовательский поток запущен, ядро ​​будет приостановлено?пользовательские темы v.s. Ядровые потоки

Спасибо заранее,

Alex

ответ

7

Я слышал, что на Linux/Unix, потоки ядра (такие как системные вызовов) получить выполняются быстрее, чем пользовательские нити.

Это неточное заявление.

  • Нити ядра используются для «фоновых» задач, внутренних для ядра, таких как обработка прерываний и сброс данных на диск. Основная часть системных вызовов обрабатывается ядром в контексте процесса, который их вызвал.

  • Потоки ядра запланированы более или менее точно так же, как пользовательские процессы. Некоторые потоки ядра имеют более высокий приоритет по умолчанию (в некоторых случаях до приоритета в реальном времени), но говорят, что они «выполняются быстрее» вводят в заблуждение.

Верно ли, что на одном блоке процессора, когда пользователь поток выполняется, ядро ​​будет приостановлено?

Конечно. За один процессор может работать только один процесс.

Это, как говорится, есть целый ряд ситуаций, в которых ядро ​​может прервать выполняемую задачу и переключиться на другой (который может быть поток ядра):

  • Когда срабатывает прерывание таймера. По умолчанию это происходит 100 раз в секунду.
  • Когда задача выполняет системный вызов блокировки (например, select() или read()).
  • Если в задаче возникает исключение ЦП (например, ошибка доступа к памяти).
+0

Таким образом, на одном процессоре необработанные циклы ЦП распределяются по времени во многих очередях выполнения для потоков ядра. некоторые из этих очередей дополнительно нарезаны для запуска многочисленных пользовательских потоков. Я прав? – techie11

+0

Иерархия, которую вы предполагаете (пользовательские потоки под потоками ядра), не существует. Такая же иерархия приоритетов процессов используется как для пользовательских задач, так и для потоков ядра. Кроме того, при каждом квантовании планирования центральный процессор выбирает подходящую задачу для запуска - при условии, что существует хотя бы один выполняемый процесс, CPU не работает. – duskwuff

+0

Вы пропустили самый важный из них - когда прерывание ввода-вывода к драйверу готовит ожидающий поток. Это основная причина использования упреждающего ядра мититаскинга - хорошая производительность ввода-вывода. –

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