Allocation de mémoire pour le noyau

Implémentation du VMM

Allouer un range

On utilise le premier emplacement qui convienne (first fit) et on applique l'algorithme suivant  :

Initialiser les ranges

Initialisation des zones mémoire

On va donc appeler la fonction create_range sur toutes les zones de la mémoire qu'on souhaite organiser. On va ainsi marquer libre ou occupée chaque zone de mémoire de la machine. (sos/kmem_vmm.c:220)

La zone entre le début de la RAM et la mémoire vidéo est disponible :

create_range(TRUE,
	       SOS_KMEM_VMM_BASE,
	       SOS_PAGE_ALIGN_INF(BIOS_N_VIDEO_START),
	       NULL);

On n'écrit pas dans la mémoire vidéo :

create_range(FALSE,
	       SOS_PAGE_ALIGN_INF(BIOS_N_VIDEO_START),
	       SOS_PAGE_ALIGN_SUP(BIOS_N_VIDEO_END),
	       NULL);

La zone entre la mémoire vidéo et le code du noyau est libre :

create_range(TRUE,
	       SOS_PAGE_ALIGN_SUP(BIOS_N_VIDEO_END),
	       SOS_PAGE_ALIGN_INF(kernel_core_base),
	       NULL);

On ne touche pas au code noyau, etc. :

create_range(FALSE,
	       SOS_PAGE_ALIGN_INF(kernel_core_base),
	       SOS_PAGE_ALIGN_SUP(kernel_core_top),
	       NULL);
...

Partie suivante