Как разделить временной интервал между потоками в процессе? - PullRequest
5 голосов
/ 22 февраля 2012

Знает ли ядро ​​Linux о pthreads в адресном пространстве пользователя (что я не думаю, что это ... но я не нашел никакой информации об этом).Как меняется указатель инструкции при переключении потока .. ??

Ответы [ 3 ]

5 голосов
/ 22 февраля 2012

Собственный NPTL (нативная библиотека потоков posix), используемая в Linux, отображает pthreads в «процессы, которые совместно используют ресурсы и, следовательно, выглядят как потоки» в ядре.Таким образом, планировщик ядра напрямую управляет планированием pthreads.

«Переключатель pthread» выполняется точно таким же кодом (в ядре), который обрабатывает переключение процессов.Упрощенно, это было бы что-то вроде «сохранить предыдущее состояние процесса; если следующий процесс использует другое виртуальное адресное пространство, то переключите виртуальные адресные пространства; загрузите следующее состояние процесса;»(где «состояние процесса» включает указатель инструкции для процесса / потока).

2 голосов
/ 22 февраля 2012

Что ж, ядро ​​Linux не знает о пользовательских потоках (pthread делает в пользовательском пространстве, более того, ядро ​​на самом деле не заботится о них, за исключением того, что ему просто нужно знать, что планировать).

Указатель инструкцийизменяется в ядре во время того, что называется переключением контекста.Во время этого переключения ядро ​​по существу спрашивает планировщик, что дальше?планировщик передаст ему структуру task_struct, которая содержит всю информацию о потоке, а обработчик прерываний для переключения контекста продолжит работу и соответствующим образом установит значения в ЦП (таблицы страниц, указатель инструкций и т. д.) и, когда этот кодэто делается, процессор просто начинает оттуда запускаться.

1 голос
/ 22 февраля 2012

1) Ядро не знает о потоках пользовательского уровня. Тем не менее, NPTL не пользовательский уровень

2) Это действительно широкий вопрос. Вы должны посмотреть на книгу ОС. Он углубится в эту проблему и все остальные, связанные с переключением контекста.

...