Похоже, вам не хватает базовых знаний или работы процессоров. Чтение книги по компьютерной архитектуре, такой как « Организация и проектирование компьютеров: аппаратно-программный интерфейс » Паттерсона и Хеннесси, или просмотр видеофильма Бена Итера «Построение 8-битного компьютера с нуля» скорее всего поможет.
Я вижу, что аргументы функций помещаются в некоторые регистры.
Существует много различных соглашений о вызовах. Загрузка аргументов в определенные регистры (вы не можете вставлять что-либо в регистр) или вставка аргументов в стек являются общими.
То есть у каждой функции есть свои регистры
Нет. Процессор имеет фиксированный набор регистров. Если функция использует, например, $RDI
для своего первого аргумента (x86_64
соглашение о вызовах) и хочет вызвать какую-то другую функцию, то может потребоваться временно сохранить значение $RDI
в памяти, прежде чем перезаписать его, чтобы передатьаргумент другой функции.
Или все функции в одном и том же процессе совместно используют одни и те же регистры для своих аргументов?
Все функции во всех процессах совместно используют один и тот же наборРегистры ЦП (независимо от того, для чего используются регистры).
Эти регистры совместно используются потоками?
Регистры являются общими, но каждый поток имеет свой собственный значений регистров. ОС (или в некоторых случаях библиотека потоков) сохраняет и восстанавливает значения при переключении между потоками.
между процессами?
То же, что и с потоками.
Если нет, когда ЦП выполняет переключение контекста, как хранятся значения в других регистрах?
ЦП не выполняет переключение контекста (ЦП не имеютконцепция контекста) ОС делает это, сохраняя текущий набор значений в одном месте в памяти и загружая другой набор из другого места.