[SYS1] Systemes d’exploitation (3)

Mapping memoire

void *mmap(void *addr, size_t sz, int prot, int flag, int fd, off_t offset); : Faire des mapping memoire

/dev/zero : En ecriture n’ecrit rien, en lecture lit les n bytes demandes, tous a 0

munmap(addr, sz); mprotect(addr, sz, prot); : Change les permissions sur les mappings

void *mremap(void *addr, size_t old_size, size_t new_size, int flag, … /*void *new_addr*/); : Etendre ou reduire un mapping existant

Garde la memoire physique, cree une nouvelle zone d’addresse virtuelle qui pointe sur l’ancien bloc de memoire physique

On veut pouvoir allouer de la memoire dans la page (allocateur a grains fins)

Algorithmes d’allocation

First fit

Probleme : Recherche de place libre et suppression : complexite lineaire
Probleme : Grosses metadonnees
Solution : On alloue plusieurs pages, contenant chacune des allocations de taille fixe identique (Buckets)

Page begin

Retrouver le debut de la page quand on a un pointeur random sur un bloc random dans cette page :

Cast en uintptr_t addr & 0xFFFFF000

Metadonnees

On stocke les metadonnees a l’exterieur, qui pointe sur notre bloc de taille 4K, et sur la prochaine metadonnee

Pas de temps constant sur la suppression

-> On utilise une hashmap