как KVM обрабатывает прерывания

Я занимаюсь KVM и у меня есть пара вопросов, которые я не могу понять.

1> как мы знаем, обычно внешнее прерывание вызывает VMexit и гипервизор вводит виртуальное прерывание, если оно для гостя. Тогда какой irq будет введен (я имею в виду вектор прерывания для индексации гостевого IDT)? Как KVM узнает об этом (связывает IRQ хоста с гостевым виртуальным IRQ)?

2> если для устройства, назначенного гостю, гипервизор доставит этот IRQ гостю. проследив код, я обнаружил, что IRQ хоста отличается от IRQ гостя (я имею в виду вектор прерывания). как настроить KVM, какой вектор прерывания должен использовать гость?

3> если мы настроим не выходить на внешнее прерывание, установив какое-то поле в VMCS, что будет происходить во время физических прерываний? будет ли ЦП использовать гостевой IDT для прерывания ответа? Если да, то может ли KVM перенаправить ЦП на использование другого IDT для гостя (при условии изменения IDTR)?

4> где находится гостевая IDT? Это настроено qemu при инициализации vcpu и регистров (включая IDTR)?

Я очень надеюсь, что кто-нибудь ответит на мои вопросы. Я буду очень признателен.

Спасибо

6
задан user1073939 7 June 2012 в 02:55
поделиться