Недавно я делаю домашнее задание по виртуализации. У меня вопрос, как VMM передает управление гостевому ядру и запускает этот код в кольце 1?
VMM типа 1: это классический VMM с ловушкой и эмуляцией. VMM работает непосредственно на оборудовании, действует как «операционная система хоста» в кольце 0. Гостевое ядро и гостевые приложения запускаются в VMM в кольце 1 и кольце 3 соответственно.
Когда гостевые приложения выполняют системный вызов, он перехватывает Ring 0 VMM (ЦП предназначен для этого).
VMM затем определит, что это системный вызов, а затем передаст управление системному обработчику гостевого ядра и выполнит его в кольце 1.
Когда это будет сделано, гостевое ядро выполняет syscall-return, это привилегированный вызов, который снова перехватывается в VMM.
Затем VMM выполняет реальный возврат в гостевое пространство пользователя в кольце 3. (ЦП также предназначен для этого).
Мой вопрос касается шага 2. Как VMM передает управление гостевому ядру и заставляет ЦП звонить 1? Это не может быть простым «вызовом», поскольку тогда код гостевого ядра будет запускаться в кольцо 0. Это должно быть что-то вроде "syscall-return" или какие-то особые инструкции переключения контекста.
Есть идеи? Спасибо!