В ARMv8-A система регистрирует системные регистры на процессор? - PullRequest
0 голосов
/ 14 марта 2020

Системные регистры записываются в банк на процессор в ARMv8? Я думал, что это не так, поэтому их называли system регистры, но я сейчас растерялся.

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

Например, я читал о виртуализации для школьного проекта и увидел некоторый открытый исходный код, и я вижу, как системные регистры сохраняются и восстанавливаются как часть контекстов потока «vCPU». Если одно ядро ​​выполняет поток vCPU, а другое - нет, не будут ли у них конфликтующие состояния системного регистра?

1 Ответ

1 голос
/ 14 марта 2020

Я бы не стал использовать работу «в банке» в этом контексте - регистр в ручном ядре был бы «в банке» в случае, если будут доступны разные копии одного и того же регистра в зависимости от состояния ядра.

Например, в ядре Armv8-A, TTBR0_EL1 доступен из EL1, EL2 и EL3. TTBR0_EL2 доступно из EL2 и EL3 - это способ моделирования факта, что концептуальный системный регистр TTBR0 находится в банке.

Но все системные регистры, как определено в Регистры Armv8, для профиля архитектуры Armv8-A Документация присутствуют в ядре Armv8-a.

То есть в многоядерной системе каждое ядро ​​имеет свой собственный набор системных регистров. как определено в документации, упомянутой выше: «Системные регистры» могут быть более конкретно названы «Базовыми системными регистрами» в этом контексте.

Если подумать, выполняются инструкции MSR и MRS. в конкретном c ядре влияют на общие и системные регистры одного и того же ядра:

MRS  x0, TTBR0_EL1          // Move TTBR0_EL1 into x0
MSR  TTBR0_EL1, x0          // Move x0 into TTBR0_EL1
...