Существуют ли два отдельных планировщика в основных операционных системах, один для процессов и один для их потоков?
Давайте предположим, что планировщик предоставляет процесс в центральный процессор с одноядерным процессором, и давайте предположим, что этот процесс имеет 10 потоков. Кто решает, какой из десяти потоков получит процессор?
Другими словами, есть ли два отдельных планировщика в ОС? Один для процессов и один для их потоков?
1 ответ
В Windows планировщик планирует потоки. То есть все решения относительно того, "что должно выполняться следующим", на самом деле "какой поток должен выполняться следующим" и принимаются на основе атрибутов потока (его приоритета, его настройки сродства, (иногда), как долго он последний раз выполнялся и т. Д..). Не процессов.
Да, диспетчер задач позволяет изменить приоритет или родство процесса. Но эти изменения просто распространяются - то есть наследуются - всеми его потоками. И приоритет потока, аффинность и т. Д. Можно изменить от того, что он унаследовал от своего процесса.
Поскольку поток является частью процесса, а выполняемый поток должен отображать свой процесс, было бы бессмысленно планировать процессы независимо.
Когда планировщик выбирает новый поток для выполнения, то, если новый поток находится в процессе, отличном от предыдущего, который работал на процессоре, который "переключается", переключение контекста процесса выполняется как часть переключения контекста потока. Это степень, в которой процессы "запланированы".
Изменение контекста процесса, кстати, включает в себя чуть больше, чем загрузка регистра CR3 физическим номером страницы таблицы страниц верхнего уровня нового процесса.