[SOS] Gestion de la mémoire, physique, paginée, virtuelle...

Bombela bombela at free.fr
Sam 25 Mar 14:37:34 CET 2006


Salut tout le monde !

J'ai quelques questions sur la gestion de mémoire dans un OS.
Mais tout d'abord, laissez moi vous décrire cette gestion comme je l'ai 
comprise actuellement.
Corrigez moi si nécessaire.

Premièrement, on trouve le gestionnaire de mémoire physique.
Par simplicité avec la paginiation, ce gestionnaire gère la mémoire 
physique par
pages de 4ko.

Ce gestionnaire doit :
  * Maintenir un compteur de référencement sur chaque page physique.
  * Savoir quels sont les pages non référencée et celle qu'il le sont au 
moins une fois rapidement.

Ce gestionnaire exporte les méthodes :
  * Référencement, déférencement d'une page par son adresse.
  * Référencement d'une page quelconque. (Un peu comme malloc).


En deuxième, nous avons le gestionnaire de mémoire paginée.
Il exploite la pagination grâce à la MMU, et doit être programmé soignement
à cause de la gestion de la mémoire paginée... dans le mémoire paginée !

Ce gestionnaire doit :
  * Maintenir les dossiers de table de page et les tables de pages en état.
  * Toujours s'assurer de pouvoir modifier les tables de pages & Co dans 
la mémoire paginée (miroring).
  * Gérer l'exception page fault.

Ce gestionnaire exporte les méthodes :
  * D'allocation / désallocation de page virtuelle.
  * D'allocation par l'adresse de page virtuelle.
  * Un callback non dépendant de l'architecture sur l'exception page fault.

Le mémoire paginée ne gérant que de manière fictive la mémoire, c'est au 
gestionnaire
de mémoire virtuelle de gérer l'allocation d'une page physique pour une 
page virtuelle,
en utilisant le gestionnaire de mémoire physique et le gestionnaire de 
mémoire paginée.

De plus, je crois que c'est ce gestionnaire qui doit gérer l'allocation 
de plus petit objet
(allocateur slab etc...).

Ce gestionnaire doit :
  * Permettre une relation entre le gestionnaire de mémoire paginée
        et le gestionnaire de mémoire physique.
  * Gérer le callback de page fault de la mémoire paginée pour gérer le 
swap, mappage de fichier
       ou erreur de programmation.

Ce gestionnaire exporte les méthodes :
  * D'allocation automatique (malloc) et son contraire (free).
  * De création de cache d'objet, pour les allocations importantes dans 
le système.

Pour allouer de la mémoire qui s'étale sur plusieurs page, on se base 
sur la mémoire
paginée qui pourra avoir des pages virtuelle alignée, mais pointer sans 
aucun problème
vers des pages physique dispersée.

Et j'ai du en oublier...

Maintenant, je me dis, c'est bien beau tout ça, j'ai une belle couche 
d'abstraction,
une gestion des débordement mémoire etc.

Mais ! Comment faire pour allouer des pages physique alignée pour le dma 
par exemple ?
Les périphérique PCI ? La mémoire vidéo (Si on change de framebuffer par 
défaut)
De plus, on ne peut pas allouer n'importe quel endroit de la ram !
Dans le cas du DMA, c'est en dessous des 16 mo...

Pour le cas ou la ram physique est déjà utiliser, le gestionnaire de 
mémoire virtuelle peut s'en occuper.
En effet, il peut allouer des pages physique ailleur dans la mémoire, 
recopier dedans la page à libérer,
et "déplacer" la page de mémoire paginée dessus. SOS le fait très bien 
dans un exemple.

Mais une question : Comment le gestionnaire de mémoire virtuelle fait 
pour allouer
des pages physique "ailleur" ? On doit donc ajouter une méthode dans 
notre gestionnaire de mémoire
physique, qui permet de définir une adresse minimum d'allocation... 
(Dite moi si je me trompe)

Bien, maintenant que l'allocation physique d'une zone mémoire n'est plus 
un problème, comment allouer
des pages physiques alignée ???

C'est le gestionnaire de mémoire virtuelle qui alloue, mais pour cause 
d'abstraction, il n'est pas sensé
s'occuper lui même des structures du gestionnaire de mémoire physique...

Là, je sèche...

Ah puis autre chose... J'ai lut qu'il faut gérer une correspondance 
adresse physique - linéaire (virtuelle).
Donc, gérer l'inverse de la MMU.
Mais pour quel raison ? J'ai pas d'idée en tête.

Voilà voilà !
Mon premier (et pas le dernier ;) ) message sur la liste SOS !

@+ et merci à tous de m'avoir lut !


Plus d'informations sur la liste de diffusion Sos