bios-OS/doc/API_MEMORY.md
2026-02-10 16:16:55 +01:00

38 lines
1.3 KiB
Markdown

# API Gestionnaire de Mémoire (Heap)
## Description
Ce module fournit un gestionnaire de mémoire dynamique (Heap) simple pour le mode réel x86. Il utilise un algorithme **First-Fit** avec fusion des blocs libres (coalescing) lors de l'allocation pour minimiser la fragmentation.
Le segment de mémoire utilisé est défini par `MEM_HEAP_SEG` (par défaut `0x2000`, soit l'adresse physique `0x20000`).
## Structure des Données
Chaque bloc mémoire est précédé d'un en-tête de 6 octets (aligné sur 16 bits) :
| Offset | Taille | Champ | Description |
| :--- | :--- | :--- | :--- |
| +0 | 1 octet | Status | `0` = Libre, `1` = Alloué |
| +1 | 1 octet | Padding | Réservé pour l'alignement |
| +2 | 2 octets | Size | Taille des données utiles (en octets) |
| +4 | 2 octets | Next | Offset du prochain bloc (0 = Fin de liste) |
| +6 | ... | Data | Données utilisateur |
## Utilisation
L'interaction se fait principalement via la macro `MEM`.
```nasm
%include "./common/memory.asm"
; Initialisation (Obligatoire au démarrage)
MEM MEM_INIT
; Allocation de 100 octets
MEM MEM_ALLOC, 100
; AX contient le handle (offset) ou 0 si erreur
; Utilisation du pointeur
mov bx, ax ; Sauvegarde du handle
MEM MEM_RESOLVE, bx
; ES:DI pointe maintenant vers les données
; Libération
MEM MEM_FREE, bx