[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