Вопрос

Итак, в последнее время я немного разбираюсь в сборке, и я новичок, поэтому мне было интересно, может ли кто-нибудь что-нибудь прояснить.Я так понимаю, каждый процесс имеет свой собственный набор регистров, и каждый поток может изменять эти регистры, верно?.Как же тогда несколько потоков используют одни и те же регистры, не вызывая конфликтов?Или у каждого потока есть свой собственный набор регистров?

Это было полезно?

Решение

Переключение контекста потока включает в себя сохранение регистров текущего контекста выполнения и загрузку регистров с сохраненными значениями из контекста выполнения, на который переключается begin.(среди прочего).Таким образом, каждый поток фактически имеет свой собственный набор регистров.Также свой собственный стек, поскольку ESP является одним из регистров.

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

ты говоришь:

Я так понимаю, каждый процесс имеет свой собственный набор регистров, и каждый поток может изменять эти регистры, верно?

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

Другие советы

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

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

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

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

  • функция, которая сохранит состояние всех регистров в вашем процессоре (SP: стек указатель, значение внутреннего регистра, ПК: Счетчик программ и т.д. ...) в другом пространстве памяти для переключения на новый поток.
  • функция для загрузки потоковой среды в среду вашего процессора, восстановления ранее сохраненного значения внутреннего регистра в регистре вашего процессора.

В зависимости от процессора существует только один набор регистров.Не по одному набору на поток.

Существуют способы сохранить состояние всех регистров, чтобы поток мог продолжить с того места, на котором он остановился.

Некоторые процессоры облегчают это.

у вас есть

  • a набор процессов это относится к вашей операционной системе,
  • каждый процесс имеет область памяти, которая содержит динамически выделяемая память, статические данные и сборка кода,
  • каждый процесс имеет список Ветки
  • каждый Нитки имеет свой собственный набор регистров, счетчик программ и стек

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

Обычно a процесс тяжелее, чем Нитки и существуют различные подходы к планированию:

  • выполнение переключений контекста только внутри компании (зеленые нити) к вашей программе (ваша ОС будет просто рассматривать это как единый процесс, поэтому:жесткий многоядерный)
  • вы можете назначить несколько реальных процессов, чтобы иметь гибридный подход, позволяющий легко проводить многоядерную оптимизацию.

Каждый поток имеет свой собственный контекст, который включает в себя набор регистров, флаги процессора, стек и т.д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top