Changes between Version 35 and Version 36 of AS6-TME-B6


Ignore:
Timestamp:
Mar 29, 2022, 3:40:22 PM (2 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AS6-TME-B6

    v35 v36  
    208208 * En fait, la réponse est donnée dans la réponse précédente. Les slabs contiennent les objets libres et donc les futurs objets alloués. Notez que quand un objet est alloué, il n'est plus dans le slab, il y retourne quand il est libéré.
    209209 * L'allocateur alloue un slab quand on lui demande un objet d'une certaine taille, mais que la liste des objets libres de cette taille est vide. L'allocateur demande alors un slab (ici, une page de 4kO) pour remplir la listes d'objets libres et en extraire finalement un.
    210  * L'allocateur recherche les slabs entièrement rempli d'objets libres et dans ce cas, il en retire tous les objets et rend le slab. Cette politique n'est pas forcément efficace, il est sans doute préférable d'avoir toujours des listes d'objets libres non vides. On peut donc définir un seuil d'objets libre en dessous duquel ne pas descendre.
     210 * L'allocateur recherche les slabs entièrement rempli d'objets libres et dans ce cas, il en retire tous les objets et rend le slab.
    211211'''
    212212}}}
     
    214214{{{#!protected ------------------------------------------------------------------
    215215'''
    216  *
     216 * La politique de rendre un slab dès qu'il est plein (qu'il ne contient que des objets libres) n'est pas forcément efficace.
     217 * En effet, si on alloue un objet d'une taille T, alors on ouvre un slab (on l'alloue) et si on le libère, alors on ferme le slab (on le libère). Si on fait ça en boucle, l'ouverture/fermeture (allocation/libération) des slabs est une perte de temps.
     218 * Il est sans doute préférable d'avoir toujours des listes d'objets libres non vides. On peut donc définir un seuil d'objets libres en dessous duquel ne pas descendre.
     219 * Pour entrevoir une solution, il faut regarder le code.
     220   * Dans le code, on peut voir qu'il existe un tableau `Objects[]` contenant de cases qu'il existe de taille d'objets possible (mesurée en nombre de lignes).
     221de listes d'objets libres, indexé par les identifiants de slab (l'identifiant de slab est la taille des objets qu'il contient en nombre de lignes). Le tableau `Objects` contient le nombre d'objets alloués. Il faudrait un autre tableau semblable contenant le nombre d'objets libres disponible.
    217222'''
    218223}}}