1

Давайте предположим, что планировщик предоставляет процесс в центральный процессор с одноядерным процессором, и давайте предположим, что этот процесс имеет 10 потоков. Кто решает, какой из десяти потоков получит процессор?

Другими словами, есть ли два отдельных планировщика в ОС? Один для процессов и один для их потоков?

1 ответ1

3

В Windows планировщик планирует потоки. То есть все решения относительно того, "что должно выполняться следующим", на самом деле "какой поток должен выполняться следующим" и принимаются на основе атрибутов потока (его приоритета, его настройки сродства, (иногда), как долго он последний раз выполнялся и т.д. .). Не процессов.

Да, диспетчер задач позволяет изменить приоритет или родство процесса. Но эти изменения просто распространяются - то есть наследуются - всеми его потоками. И приоритет потока, аффинность и т.д. Можно изменить от того, что он унаследовал от своего процесса.

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

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

Изменение контекста процесса, кстати, включает в себя чуть больше, чем загрузка регистра CR3 физическим номером страницы таблицы страниц верхнего уровня нового процесса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .