Changes between Version 24 and Version 25 of AS6-TME-B6


Ignore:
Timestamp:
Mar 29, 2022, 11:42:08 AM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AS6-TME-B6

    v24 v25  
    2222- **Nous avons donc 3 allocateurs dans kO6** :
    2323  - un allocateur de variables dynamiques pour l'application ;
    24   - un allocateur de piles utilisateurs pour les threads de l'application mais utilisé par le noyau ;
     24  - un allocateur de piles ‘’utilisateurs’’ pour les threads de l'application, mais utilisé par le noyau ;
    2525  - un allocateur de variables dynamiques pour le noyau.
    2626  - L'allocateur de piles utilisateur et l'allocateur de variables doivent partager la zone libre laissée dans le segment `.data`. Ainsi l'allocateur de piles utilise la partie haute du segment `.data` et l'allocateur de variables utilise la partie basse.
     
    2929- **kO6 propose une API nommée `list` permettant de gérer les listes chaînées**
    3030  - Cette API est définie dans le fichier `common/list.h` et elle est utilisable par l'application et le noyau, notamment dans les allocateurs.
    31   - L'API `list` permet de chaîner des éléments de liste de type `list_t`, laquelle est une structure composée d'un double pointeur pointant vers d'autres structures `list_t`.
     31  - L'API `list` permets de chaîner des éléments de liste de type `list_t`, laquelle est une structure composée d'un double pointeur pointant vers d'autres structures `list_t`.
    3232  - Les éléments de liste sont embarqués dans des structures porteuses.
    3333  - Ce sont les éléments de type `list_t` qui sont chaînés entre eux, mais l'API `list` permets de retrouver le pointeur sur la structure porteuse de l'élément.
     
    4646
    4747- **L'allocateur de variables dynamiques pour l'application.**
    48   - Cet allocateur gère un segment d'adresses nommé `heap` placé en bas du segment `.data`, situé juste après les variables globales et aligné sur les lignes de caches.
     48  - Cet allocateur gère un segment d'adresses nommé `heap` placé en bas du segment `.data`, situé juste après les variables globales et alignées sur les lignes de caches.
    4949  - l'adresse limite du `heap` est nommée `heap_end`, c'est un pointeur.
    5050  - L'allocateur gère des blocs (il fallait bien donner un nom...)
     
    7373    - Au départ, toutes les listes d'objets libres sont vides.
    7474    - Lorsqu'une demande d'allocation est faite pour une certaine taille `T` et que la liste des objets libres de cette taille `T` est vide alors l'allocateur alloue une dalle (ou `slab` en anglais) de 4kO.
    75     - Il découpe la dalle en autant d'objets que possible de la taille `T` demandée et il chaine ces objets pour remplir la liste d'objets libres.
     75    - Il découpe la dalle en autant d'objets que possible de la taille `T` demandée et il chaîne ces objets pour remplir la liste d'objets libres.
    7676    - Pour allouer un objet, l'allocateur prend le premier objet de la liste des objets libres de la bonne taille.
    7777  - `void kfree(void *, size_t)`
     
    117117'''
    118118}}}
    119 1. A quoi sert l'allocateur de pile user ? Qui demande l'allocation ? Qui utilise les piles ? Est-ce que ces piles ont une taille variable ?
     1191. À quoi sert l'allocateur de pile user ? Qui demande l'allocation ? Qui utilise les piles ? Est-ce que ces piles ont une taille variable ?
    120120{{{#!protected ------------------------------------------------------------------
    121121'''
     
    129129'''
    130130}}}
    131 1. Est-ce que ces piles peuvent déborder ? Si oui, est-ce vraiment un problème et que propose kO6 pour se problème ?
     1311. Est-ce que ces piles peuvent déborder ? Si oui, est-ce vraiment un problème et que propose kO6 pour ce problème ?
    132132{{{#!protected ------------------------------------------------------------------
    133133'''
     
    141141'''
    142142}}}
    143 1. L'allocateur d'objets (nommés blocs dans le rappel de cours au dessus) pour l'application utilise une politique ''first fit''. Qu'est-ce que cela signifie ? Quels sont les autres ? existe-il une politique meilleure que les autres et pour quel critère ?
    144 {{{#!protected ------------------------------------------------------------------
    145 '''
    146  *
    147 '''
    148 }}}
    149 1. Rappeler le nom des deux fonctions de l'API utilisateur de cet allocateur. Est-ce que ces fonctions font des appels systèmes ? Si oui, quand et pourquoi ?   
     1431. L'allocateur d'objets (nommés blocs dans le rappel de cours au-dessus) pour l'application utilise une politique ''first fit''. Qu'est-ce que cela signifie ? Quels sont les autres ? Existe-t-il une politique meilleure que les autres et pour quel critère ?
     144{{{#!protected ------------------------------------------------------------------
     145'''
     146 *
     147'''
     148}}}
     1491. Rappeler le nom des deux fonctions de l'API utilisateur de cet allocateur. Est-ce que ces fonctions font des appels système ? Si oui, quand et pourquoi ?   
    150150{{{#!protected ------------------------------------------------------------------
    151151'''
     
    165165'''
    166166}}}
    167 1. L'allocateur d'objets du noyau gère des listes d'objets libres. Quel rapport y-a-t-il entre les objets alloués et les slabs ? À quel moment les slabs sont-ils alloués ? À quel moment les slabs sont ils libérés ?
     1671. L'allocateur d'objets du noyau gère des listes d'objets libres. Quel rapport y a-t-il entre les objets alloués et les slabs ? À quel moment les slabs sont-ils alloués ? À quel moment les slabs sont-ils libérés ?
    168168{{{#!protected ------------------------------------------------------------------
    169169'''
     
    189189'''
    190190}}}
    191 1. Le premier usage des allocateurs est fait par la gestion des threads. Sur les trois allocateurs décrits ici, quels sont ceux utilisés ?
     1911. Le premier usage des allocateurs est fait par la gestion des threads. Sur les trois allocateurs décrits ici, quels sont ceux qu’il utilise?
    192192{{{#!protected ------------------------------------------------------------------
    193193'''