IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

pagination - buddy system - slab allocator


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut pagination - buddy system - slab allocator
    Bonjour,

    J'essaie de comprendre les différents mécanismes de gestion de la mémoire et je bloque un peu sur ces points.

    Au commencement il y a la pagination qui permet de découper la mémoire centrale en cadre de page qui devront contenir les différentes régions mémoires du processus (code, pile, tas) .

    L'intérêt de la pagination c'est qu'il n'est pas nécessaire que les cadres de page soient contigus et qu'ils peuvent contenir des bouts des différentes régions mémoires.

    La MMU (memory management unit) se chargera de faire la correspondance entre les adresses virtuelles qui sont manipulées par le processus et contiguës pour une même région mémoire et les adresses physiques (qui adresse réellement les cadres de page en mémoire centrale). La MMU fera la correspondance à l'aide du registre Rc3 et du répertoire de page ...

    Est ce que j'ai bon jusque là?


    Le buddy system est un mécanisme dont l'objectif est de ranger des ensembles de cadre de page contigu (et donc en mémoire centrale) ensemble. On a par exemple un groupe de 2, 4, 8 ... 1024 cadres de pages contigus. L'intérêt c'est que lorsque le processus va avoir besoin d'allouer de la mémoire, il suffira de se pointer dans un groupe qui a le nombre de page nécessaire ou plus pour récupérer les cadres de page nécessaire.

    Le restant des cadres de page non utilisés étant rangés dans le groupe qui lui correspond.

    Un autre mécanisme est le slab allocator , on a des caches en mémoires centrales et dans ces caches il y a des slabs. Un slab est une sorte de table contenant plusieurs exemplaires d'un type d'objet.

    Cela est utile car souvent les processus créent les mêmes types d'objets comme par exemple des tampons réseaux. Et on a donc déjà des objets créés, pas besoin de réaliser une allocation mémoire avec malloc(). Il suffit juste de se rendre dans le bon slab.

    D'après ce que j'ai compris c'est que le slab se situe plutôt du côté de la mémoire physique (tout comme le buddy system), il s'occupe de l'organisation de la mémoire centrale.

    Je voudrais avoir confirmation qu'il y a bien un cache par type d'objets et qu'un cache contient plusieurs slab. D'ailleurs pourquoi un cache contient plusieurs slab? c'est pour gérer l'évolution de sa taille: en cas de demande de création de nouveaux objets, de nouvelles pages lui sont allouées et donc de nouveaux slabs sont créés?


    Merci d'avance.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Up.

  3. #3
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    J'ai pas l'impression que le slab ait quelque chose à voir avec la pagination.
    De ce que j'ai compris, c'est plutôt un mécanisme de gestion mémoire à la malloc... Qui pourrait d'ailleurs être implémenté en userspace au dessus de malloc (ou de mmap). Wikipedia dit même que le compilateur de perl 5 utilise ce mécanisme.
    Ce mécanisme pourrait aussi être utilisé comme implémentation de malloc.
    Il en va de même pour le buddy system.

    Toujours de ce que j'ai compris de wikipedia à propos de slab :
    - Un cache est associé à un seul type de données.
    - Un cache contient plusieurs slabs.
    - Un slab est un tableau d'objets du type du cache auquel il est associé.

    Genre tu vas avoir un cache pour les struct toto_s.
    Et quand tu demandes à un cache de pouvoir stocker un objet de type struct toto_s, il va chercher dans ses slabs s'il a une place libre. S'il n'en a pas, il va allouer un nouveau slab (== un tableau d'objets de type struct toto_s) et te réserver un emplacement dans ce slab.

    Ici un tableau c'est juste une zone de mémoire virtuellement contiguë capable de stocker n objets d'un type donné. n étant une constante.
    Et j'insiste sur le virtuellement parce qu'on n'a aucune idée de la disposition en mémoire physique.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci pour l'explication.

    Ça remonte à un peu plus d'un mois donc c'est plus très clair dans mon esprit , en ce moment je me casse la tête avec TCB (Trusted Computing Base) qui n'a pas la même définition d'un site à l'autre. Un coup on le définit comme une base contenant les différents attributs d'un certain nombre de fichier du système à des fins de vérification de leur intégrité. Et un autre coup c'est défini comme l'ensemble des composants matériels, logiciels ... en rapport avec la sécurité dans un système.

    En ce qui concerne slab j'avais trouvé un article intéressant du linux magazine, qui explique en détail les mécanismes d'allocation de mémoire (page 4) :

    http://desvigne.org/cours/NSY-103/bi...7-dec_2004.pdf

    Ici un tableau c'est juste une zone de mémoire virtuellement contiguë capable de stocker n objets d'un type donné. n étant une constante.
    Il est notamment dit que "les caches utilisent des structures de données contiguës en mémoire" ça doit être le slab cette structure de donnée.

    Et un peu plus bas lors de la description de l'allocation d'un nouveau slab, on nous fait remarquer que sa taille est de l'ordre de celle d'une page (ou du moins d'un multiple d'une page).

  5. #5
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Bien, oui, c'est plus simple d'allouer une page complète que de gérer des fragments de page.

Discussions similaires

  1. [MySQL] resumer un systeme de pagination
    Par kayne dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/01/2009, 09h28
  2. [MySQL] systeme de pagination
    Par kayne dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/01/2009, 21h51
  3. Allocation de la mémoire paginée
    Par Immobilis dans le forum Windows Serveur
    Réponses: 12
    Dernier message: 25/01/2008, 12h47
  4. Réponses: 2
    Dernier message: 09/02/2004, 08h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo