Как устроен регистр в CPU - PullRequest
       29

Как устроен регистр в CPU

0 голосов
/ 09 ноября 2019

Я знал, что есть некоторые регистры, принадлежащие процессу.

У меня есть несколько основных вопросов о них:

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

Распределены ли эти регистры между потоками? между процессами? Если нет, то когда ЦП выполняет переключение контекста, как хранятся значения в других регистрах?

1 Ответ

1 голос
/ 09 ноября 2019

Похоже, вам не хватает базовых знаний или работы процессоров. Чтение книги по компьютерной архитектуре, такой как « Организация и проектирование компьютеров: аппаратно-программный интерфейс » Паттерсона и Хеннесси, или просмотр видеофильма Бена Итера «Построение 8-битного компьютера с нуля» скорее всего поможет.

Я вижу, что аргументы функций помещаются в некоторые регистры.

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

То есть у каждой функции есть свои регистры

Нет. Процессор имеет фиксированный набор регистров. Если функция использует, например, $RDI для своего первого аргумента (x86_64 соглашение о вызовах) и хочет вызвать какую-то другую функцию, то может потребоваться временно сохранить значение $RDI в памяти, прежде чем перезаписать его, чтобы передатьаргумент другой функции.

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

Все функции во всех процессах совместно используют один и тот же наборРегистры ЦП (независимо от того, для чего используются регистры).

Эти регистры совместно используются потоками?

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

между процессами?

То же, что и с потоками.

Если нет, когда ЦП выполняет переключение контекста, как хранятся значения в других регистрах?

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

...