VMM типа 1 и кольцо 1

Недавно я делаю домашнее задание по виртуализации. У меня вопрос, как VMM передает управление гостевому ядру и запускает этот код в кольце 1?

VMM типа 1: это классический VMM с ловушкой и эмуляцией. VMM работает непосредственно на оборудовании, действует как «операционная система хоста» в кольце 0. Гостевое ядро ​​и гостевые приложения запускаются в VMM в кольце 1 и кольце 3 соответственно.

  1. Когда гостевые приложения выполняют системный вызов, он перехватывает Ring 0 VMM (ЦП предназначен для этого).

  2. VMM затем определит, что это системный вызов, а затем передаст управление системному обработчику гостевого ядра и выполнит его в кольце 1.

  3. Когда это будет сделано, гостевое ядро ​​выполняет syscall-return, это привилегированный вызов, который снова перехватывается в VMM.

  4. Затем VMM выполняет реальный возврат в гостевое пространство пользователя в кольце 3. (ЦП также предназначен для этого).

Мой вопрос касается шага 2. Как VMM передает управление гостевому ядру и заставляет ЦП звонить 1? Это не может быть простым «вызовом», поскольку тогда код гостевого ядра будет запускаться в кольцо 0. Это должно быть что-то вроде "syscall-return" или какие-то особые инструкции переключения контекста.

Есть идеи? Спасибо!


person Steinway Wu    schedule 15.10.2012    source источник
comment
О каком гипервизоре вы говорите? Это может отличаться от одного VMM к другому.   -  person Gupta    schedule 26.10.2012
comment
@hsalimi Спасибо! Но на самом деле у меня нет конкретного VMM. В общем, сколько существует подходов к этому?   -  person Steinway Wu    schedule 29.10.2012


Ответы (2)


Просто запустить гостевую ОС с селектором CS с RPL = 1 (хотя на x86). Возврат с более привилегированного кольца на более низкий обычно выполняется с помощью iret.

person answer    schedule 01.10.2013

Xen является одним из VMM, которые запускают гостевые ОС в кольце 1. В Xen такие инструкции, как инструкция HLT (инструкция в кольце 1, где запускаются гостевые ОС) заменены гипер-вызовом. В этом случае вместо вызова инструкции HLT, как это в конечном итоге делается в ядре Linux, вызывается метод xen_idle (). Вместо этого он выполняет гипервызов, а именно гипервызов HYPERVISOR_sched_op (SCHEDOP_block, 0), который управляет переключением кольца привилегий. Для получения дополнительной информации см .:

http://www.linuxjournal.com/article/8909

person Gupta    schedule 29.10.2012