Что происходит при прерывании, когда гость находится в процессе выполнения? - PullRequest
0 голосов
/ 01 февраля 2011

Мой вопрос касается прерываний и как они передаются, когда гость выполняет в KVM?

Допустим, когда kvm вызывает vmentry или vmresume, начинает выполняться гостевой код. Теперь, когда происходит внешнее прерывание, скажем, прерывание по таймеру, гость вызовет vmexit. После того, как Vmexit выполнит следующую инструкцию в kvm или будет вызван вызывающий прерывание хоста. Если вызывается следующая инструкция в kvm, то kvm может делать все, что захочет, а затем вызывать соответствующий обработчик прерываний хоста.

Спасибо

1 Ответ

2 голосов
/ 01 февраля 2011

В Intel VT-x все прерывания вызывают ловушку в операционной системе хоста.Затем хост определит, является ли прерывание:

  • Для себя (в этом случае он будет обрабатывать его, что может привести к тому, что KVM будет оставаться незапланированным в течение довольно продолжительного времени);или

  • Для гостя, в этом случае он сообщит KVM о прерывании.Затем KVM, в свою очередь, вставит прерывание в гостя.(Обратите внимание, что эта часть KVM работает в режиме ядра; но я полагаю, что вы все равно считаете, что это KVM).

В любом случае операционная система хоста получает управление первой.

Несколько не связано, но одно расширение VT-x, которое сделало бы нас, ребят из виртуализации, более счастливым, если бы определенные прерывания могли быть отправлены непосредственно гостю, избегая при этом ловушки на хост (и связанного с этим снижения производительности).Увы, этого пока еще нет на картах.

...