Назад | Перейти на главную страницу

Что вызывает переключение контекста в Windows?

В Linux переключение контекста может происходить из-за того, что приложение выполняет системный вызов или потому, что планировщик переключает процессы из ЦП на другой процесс.

В Windows каковы возможные причины переключения контекста? В частности, из литературы, которую я прочитал, большое количество потоков - единственная причина высокого переключения контекста, с которой я до сих пор сталкивался. Есть другие?

Наконец, отличается ли стоимость замены двух потоков одного и того же процесса стоимостью замены двух разных процессов?

Возможность переключения контекста является важным компонентом любой многозадачной ОС. Тот же тип вещей, который вызывает переключение контекста в Linux, вызовет переключение контекста и в Windows.

Большое количество потоков означает, что ЦП будет вынужден чаще переключать контексты, чтобы выполнить требования планировщика к обработке.

Наконец, отличается ли стоимость замены двух потоков одного и того же процесса стоимостью замены двух разных процессов?

Да, это другое. Два потока внутри процесса используют одно и то же виртуальное адресное пространство, поэтому переключение контекста между htread внутри одного процесса не должно делать недействительным преобразование виртуального в физический. Переключение контекста между потоками различных процессов должно сделать недействительным текущее отображение преобразования VA-PA. Этот перевод происходит в процессоре TLB регистры и традиционно переключение контекста приводило к сбросу TLB, что является дорогостоящим, поскольку новый процесс начнет медленно восстанавливать записи TLB, генерируя программные ошибки страниц. Современные процессоры имеют более умные стратегии решения этой проблемы, см. Параграф «Переключение контекста» по ссылке в Википедии выше.

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

Диспетчер ядра выполняет планирование потоков и переключение контекста. Диспетчер может вызывать переключатели потоков по разным причинам:

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

Из Книга о внутреннем устройстве Windows, 5-е издание:

переключатель контекста Процедура сохранения изменчивого состояния машины, связанного с запущенным потоком, загрузки изменчивого состояния другого потока и запуска выполнения нового потока.

обработать Виртуальное адресное пространство и управляющая информация, необходимая для выполнения набора объектов потока.

нить Сущность в процессе, который Windows планирует для выполнения. Поток включает в себя содержимое набора энергозависимых регистров, представляющих состояние процессора; два стека, один для потока, который будет использоваться при выполнении в режиме ядра, а другой для выполнения в пользовательском режиме; частное хранилище для использования подсистемами, библиотеками времени выполнения и DLL; и уникальный идентификатор, называемый идентификатором потока (также внутренне называемый iD клиента).

Если вы хотите глубже погрузиться в это, есть глава, доступная для скачивания в формате PDF. Глава 5: Процессы, потоки и задания.