блок регистрирует новичка

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

7
задан Dnaiel 9 March 2010 в 01:50
поделиться

6 ответов

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

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

вы говорите:

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

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

11
ответ дан 6 December 2019 в 09:19
поделиться

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

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

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

0
ответ дан 6 December 2019 в 09:19
поделиться

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

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

Некоторые процессоры способствуют этому .

1
ответ дан 6 December 2019 в 09:19
поделиться

у вас есть

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

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

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

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

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

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

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

4
ответ дан 6 December 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: