Changes between Version 18 and Version 19 of AS6-TME-B6
- Timestamp:
- Mar 28, 2022, 9:28:38 AM (3 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AS6-TME-B6
v18 v19 7 7 8 8 Vous pouvez lire les [htdocs:cours/Archi-2-B6-alloc-2p.pdf slides de cours] pour voir les détails, mais voici le résumé des principes en quelques lignes. 9 10 - **kO6 propose une API nommée `list` permettant de gérer les listes chaînées**11 - Cette API est définie dans le fichier `common/list.h` et elle est utilisable par le noyau et par l'application.12 - 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`.13 - Les éléments de liste sont embarqués dans des structures porteuses.14 - 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.15 - L'API `list` permets l'ajout et l'extraction d'éléments de liste au début, au milieu ou à la fin d'une liste.16 - L'API `list` permets aussi l'ajout d'élément en utilisant une relation d'ordre choisie par l'utilisateur pour obtenir des listes triées.17 - L'API `list` permets le parcours de tous les éléments d'une liste.18 9 19 10 - **L'application et le noyau ont besoin d'allouer dynamiquement de la mémoire**. … … 28 19 - D'un autre côté, les piles des threads sont certes dans l'espace utilisateur, mais elles sont allouées par le noyau au moment de la création des threads. Leur taille est standard et fixe (dans un vrai système, on peut choisir leur taille à la création du thread, mais pas pour kO6). 29 20 21 30 22 - **Nous avons donc 3 allocateurs dans kO6** : 31 23 - un allocateur de variables dynamiques pour l'application ; … … 33 25 - un allocateur de variables dynamiques pour le noyau. 34 26 - 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. 27 28 29 - **kO6 propose une API nommée `list` permettant de gérer les listes chaînées** 30 - 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`. 32 - Les éléments de liste sont embarqués dans des structures porteuses. 33 - 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. 34 - L'API `list` permets l'ajout et l'extraction d'éléments de liste au début, au milieu ou à la fin d'une liste. 35 - L'API `list` permets aussi l'ajout d'élément en utilisant une relation d'ordre choisie par l'utilisateur pour obtenir des listes triées. 36 - L'API `list` permets le parcours de tous les éléments d'une liste. 37 35 38 36 39 - **L'allocateur de piles pour les threads.** … … 40 43 - Quand une pile est libérée et qu'elle est celle placée à l'adresse la plus basse, alors la place qu'elle occupait est rendue au noyau. 41 44 - Le tri des piles libres permet d'augmenter la probabilité d'usage des piles placées en haut du segment `.data` et donc la libération des piles placées plus bas. 45 42 46 43 47 - **L'allocateur de variables dynamiques pour l'application.** … … 60 64 - Elle marque le bloc pointé comme `vide`, c'est-à-dire non alloué. 61 65 66 62 67 - **L'allocateur de variables dynamiques pour le noyau.** 63 68 - Le noyau alloue des structures ou des tables pour rendre ses services, pour les threads, les devices drivers, les ressources de synchronisation, le système de fichiers, etc.