Система с поддержкой виртуализации GIC v2

Я пытаюсь реализовать какую-то процедуру прерывания.

Это связано с виртуализацией с поддержкой GIC v2 H/W.

Мой вопрос:

 When catch a interrupt number, Hypervisor should distingush if it's for 
own itself or for guests ran on the hypervisor.
But how to check it? if it's for hyp or guest?

это мой вопрос. Пожалуйста, дайте мне знать, если правильно или нет. Мне нужно больше фонов. Спасибо за ваш повтор раньше.


person Jeungwoo Yoo    schedule 29.02.2016    source источник
comment
Вот аналогичный вопрос.   -  person artless noise    schedule 29.02.2016


Ответы (1)


Простейший способ — назначить прерывание FIQ для безопасного мира, а IRQ — для обычного мира. Существует регистр зоны доверия (SCR или регистры безопасной конфигурации), который будет направлять IRQ/FIQ на монитор или прямо в ОС в текущем мире. Сам GIC позволяет всем прерываниям быть либо FIQ, либо IRQ (я думаю, что документация называет это типом 0 и типом 1). Вы всегда можете направить на монитор или вы можете динамически переключаться (на мировом коммутаторе), куда направляются прерывания.

  World | Normal | Secure
  ------+--------+--------
  FIQ   | Monitor| Through
  IRQ   | Through| Monitor

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

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

В случае вашего гипервизора вам придется запретить прерывания FIQ в гостевой ОС. Вероятно, они не будут работать должным образом, поскольку они должны быть БЫСТРЫМИ, а виртуализация будет мешать этому. В этом случае вы можете оставить значение SCR в столбце Обычный (чтобы значение SCR было постоянным).

person artless noise    schedule 29.02.2016
comment
Собственно, мой проект связан с гипервизором. Этот гипервизор должен работать в гиперрежиме, который реализован в ARM с аппаратной поддержкой, и этот режим существует только в обычном мире. (Незащищенный режим) Это означает, что маршрутизация IRQ из безопасного в небезопасный требует довольно больших накладных расходов. Поэтому я думаю, что ваше предложение хорошо, но не подходит для моей ситуации. Но большое спасибо за ответ - person Jeungwoo Yoo; 29.02.2016
comment
Какое прерывание нужно вашему гипервизору? Эти люди используют ловушку и выполняют для дистрибьютора, а виртуальная машина имеет контроллер для каждого процессора. . Вы можете использовать эту схему для многопроцессорных систем. В своем вопросе вы не сказали, что у вас есть расширения ARM VM и есть ли у вас SMP (так что вы зря потратили мое время). - person artless noise; 29.02.2016
comment
Вы должны добавить некоторые детали о том, как именно вы хотите, чтобы все работало. Какие прерывания для гипервизора (или вы просто имеете в виду прерывания для каждой ВМ). Если виртуальной машине назначен ЦП, то распространитель GIC может выполнять маршрутизацию для каждого ЦП. Однако вы, вероятно, скажете: «Моя архитектура работает не так...», если кто-то даст такой ответ. Документ/ссылка с TZ и гипер. Как было сказано, безусловно, уместно запускать задачи управления гипервизором в безопасном мире и использовать FIQ для его прерываний; может не то что ты хочешь. Просьба уточнить. - person artless noise; 29.02.2016
comment
Спасибо за подробные ответы и извините, что расстроил. На самом деле мой гипервизор работает на ARM CortexA15 и работает в гиперрежиме, одном из режимов процессора ARM. И, как вы догадываетесь, виртуальные машины не выделяются на ядро. В этой ситуации я хочу знать, когда возникло прерывание, как определить, принадлежит ли это прерывание кому-либо. Если нет возможности, то я должен дать irq всем виртуальным машинам, которые сопоставили номер irq. В любом случае, это мой подробный вопрос, и я еще раз прошу прощения. И спасибо за статью и ссылку. - person Jeungwoo Yoo; 29.02.2016
comment
Ведь нельзя запускать более одной ОС на ЦП одновременно? Поэтому, когда ОС запланирована на этом ЦП, вы используете распределитель для маршрутизации прерываний. Ваш гипервизор должен вести список назначенных прерываний? Когда ЦП переходит в режим WFi, вам нужен гипервизор, чтобы отслеживать это и планировать миграцию? TZ хорош для нехостингового гипервизора. Вы должны добавить детали к своему вопросу. Нажмите изменить внизу. - person artless noise; 01.03.2016
comment
Да, как вы упомянули, мой гипервизор — это более чем одна ОС, работающая на одном ядре. И ТЗ не поддерживают режим hyp. Чтобы использовать преобразование адресов этапа 2, мой гипервизор должен работать в незащищенном режиме. - person Jeungwoo Yoo; 01.03.2016
comment
Вы можете использовать как ТЗ, так и гиперрежим. Hyper может переключать ОС на ЦП, но TZ может обрабатывать прерывания от имени вашего «гипервизора». TZ поддерживает гипер; они оба могут сосуществовать. Многие люди пытались создать виртуализацию только с помощью TZ; это плохо работает. Вы можете комбинировать их. - person artless noise; 01.03.2016