Skip to content
Snippets Groups Projects
Commit e00b2534 authored by Florent Gluck's avatar Florent Gluck
Browse files

Initial commit

parents
No related branches found
No related tags found
No related merge requests found
course/images/platform_virt.png

389 KiB

course/images/vmentry_vmexit.png

224 KiB

include ../lab.mk
---
title : Virtualisation avancée
solutions : false
author :
- "Professeur : Florent Gluck"
date : \today
papersize : A4
geometry : "left=2.5cm,right=2cm,top=1.5cm,bottom=2cm"
colorlinks : urlcolor
fontsize : 11pt
---
# Introduction à KVM
## Objectif
Le but de ce travail est de vous familiariser avec l'API KVM.
Pour cela, vous programmerez un micro hyperviseur (VMM) utilisant l'API KVM de Linux.
Ce VMM exécutera simplement le code d'un OS guest extrêmement minimaliste (7 lignes de code). Le but de ce travail pratique est de vous aider à mieux comprendre l'API KVM et le fonctionnement d'un hyperviseur via un exemple le plus simple possible.
## Cahier des charges
Voici ce que vous devez réaliser :
1. Lisez l'article "Using the KVM API" à l'url [https://lwn.net/Articles/658511/](https://lwn.net/Articles/658511/)
1. Etudiez et exécutez le code de l'article
1. Expliquez le comportement observé
1. Répondez aux questions suivantes :
1. De combien de RAM (mémoire physique) dispose la VM créée\ ?
1. A quelle adresse, dans l'espace d'adressage de la VM, se trouve la RAM de la VM\ ?
1. A quelle adresse, dans l'espace d'adressage du VMM, se trouve la RAM de la VM\ ? (à vous de modifier le code fourni pour obtenir cette information)
1. A quelle adresse, dans l'espace d'adressage de la VM, est localisé le code de l'OS guest\ ?
1. Selon vous, si le code de l'OS guest contient uniquement des instructions réalisant des calculs, combien de VMexits seront générés\ ?
1. Que se passerait-il si l'instruction `hlt` (0xf4) n'était pas présente à la fin du code du guest\ ?
1. Créez un nouveau fichier avec le contenu du code de l'OS guest (OS est ici un grand mot\ !)
- ce fichier contient donc le code machine de l'OS guest
1. Investiguez le code assembleur de l'OS guest afin de précisément comprendre son fonctionnement
1. Modifiez le code du VMM afin que celui-ci prenne un argument\ : un fichier contenant le code de l'OS guest à exécuter
- si aucun argument n'est passé, alors affichez la syntaxe de votre VMM
- assurez-vous que votre code est robuste, p.ex. si le fichier passé n'existe pas
1. Créez un Makefile avec au minimum 3 cibles :
- une cible permettant de compiler le VMM
- une cible permettant d'exécuter le VMM
- une cible permettant d'effacer les fichiers produits
SRCS=$(wildcard *.md)
PDFS=$(SRCS:%.md=%.pdf)
PDFS_CORR=$(SRCS:%.md=%_corr.pdf)
UID=$(shell id -u)
GID=$(shell id -g)
all: doc
doc: $(PDFS)
corr: $(PDFS_CORR)
%.pdf: %.md
docker run --user $(UID):$(GID) --rm --mount type=bind,src="$(PWD)",dst=/src thxbb12/md2pdf build_lab $<
%_corr.pdf: %.md
docker run --user $(UID):$(GID) --rm --mount type=bind,src="$(PWD)",dst=/src thxbb12/md2pdf build_lab_corr $<
clean:
rm -f $(PDFS) $(PDFS_CORR)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment