0x03 - La mémoire
Maintenant que nous avons une structure de projet saine, nous pouvons continuer à développer le noyau lui-même. Puisque nous sommes le noyau, théoriquement, nous pouvons utiliser n’importe quelle partie de la mémoire à tout moment. Pour imposer un peu d’ordre et éviter de nous tirer une balle dans le pied, nous devons organiser l’utilisation de cette mémoire en un système sain et clair. Le meilleur moyen de le faire est de diviser la mémoire en blocs de 4 Ko appelés pages. Les pages nous permettent d’allouer des blocs de mémoire qui ne sont pas insignifiants, mais qui ne sont pas si grands qu’ils absorbent une fraction significative de la mémoire.
Obtenir la taille de la mémoire
Si nous voulons organiser la mémoire, nous devons d’abord savoir combien de mémoire nous avons réellement. Nous pouvons le faire en accédant aux atags.
Nous pouvons faire correspondre la disposition de la mémoire des atags en définissant certains types de C:
|
|
Ensuite, nous pouvons parcourir la liste Atag jusqu’à ce que nous trouvions l’attribut MEM:
|
|
Si vous développez pour une machine virtuelle, cette fonction ne fonctionnera pas. La VM n’émule pas le bootloader qui configure les atags. Puisque vous déterminez la taille exacte de la mémoire à travers les options QEMU, vous devriez simplement avoir cette fonction pour retourner cette quantité de mémoire. Notre Makefile définit la mémoire à 128 Mo, donc cette fonction devrait retourner 1024 * 1024 * 128.
La répartition de la mémoire
Maintenant que nous pouvons obtenir la taille totale de la mémoire. Nous pouvons diviser cette mémoire en plusieurs pages. Le nombre de pages est simplement la taille de la mémoire divisée par la taille de la page.
Ces pages vont avoir besoin de métadonnées. Ils devront par exemple garder la trace s’ils ont été alloués ou non, et dans quel but. Ils auront besoin de plus de métadonnées plus tard lorsque nous activerons la mémoire virtuelle. Pour le moment, voici notre type de métadonnées:
|
|
Afin de contenir toutes les métadonnées, nous réservons une grande partie de la mémoire juste après l’image du noyau pour un tableau de métadonnées de page. Nous pouvons obtenir cette adresse en utilisant le symbole __end que nous avons déclaré dans le script du linker. De plus, nous allons créer une liste chaînée pour garder une trace des pages qui sont libres.
Une fois cela fait, tout ce que nous devons faire est de parcourir les pages et d’initialiser leurs métadonnées et de les ajouter à la liste libre.
Voici le code:
|
|
Attribution de pages
Maintenant que nous avons toutes les pages sous contrôle, il serait bien que nous puissions allouer et libérer des pages dynamiquement. Cela peut être fait très simplement. Puisque les pages ont toujours 4 Ko, il suffit de trouver une page qui n’a pas été allouée et de renvoyer un pointeur vers la mémoire. Pour libérer, tout ce que nous devons faire est d’ajouter les métadonnées de la page à la liste libre.
Puisque les pages ont une taille constante de 4 Ko, nous pouvons obtenir la mémoire de page à partir des métadonnées de la page en multipliant l’index des métadonnées de la page par 4096. De même, nous pouvons obtenir les métadonnées de la page en divisant par 4096 cela comme un index dans le tableau de la page.
|
|
La possibilité d’allouer des pages est agréable, mais la taille stricte de 4 Ko est un peu restrictive pour la plupart des cas d’utilisation de la mémoire dynamique. Ensuite, nous allons ajouter à ce code pour implémenter un allocateur de mémoire dynamique qui peut vous donner n’importe quelle allocation à la taille que vous voulez!
Le code est publiquement disponible sur GitHub.
Articles Similaires
Ubuntu 24.04 LTS - Une version qui fait débat entre déception et enthousiasme
Ubuntu 24.04 LTS, “Noble Numbat”, a récemment été déployée, apportant son lot de nouveautés et de changements. Cette version suscite à la fois de l’enthousiasme et de la déception au sein de la communauté des utilisateurs et des développeurs.
Lire la SuiteLe concours de beauté Miss AI : un cauchemar dystopique ou le futur de la beauté ?
Dans un monde où la technologie et la beauté fusionnent, le concours de beauté Miss AI fait son apparition. Ce concours, organisé par The World AI Creator Awards, récompense les créateurs d’images et d’influenceurs générés par intelligence artificielle (IA).
Lire la SuiteLe gouvernement du Salvador prend un coup dur : les hackers divulguent le code source et les accès VPN du portefeuille bitcoin national Chivo !
Le programme bitcoin du gouvernement du Salvador, Chivo , a été victime d’une série d’attaques informatiques ces derniers jours. Les hackers ont déjà divulgué les données personnelles de plus de 5 millions de Salvadoriens.
Lire la Suite