| 72 | |
| 73 | |
| 74 | L’espace d’adressage est découpé en segments d'adresses contiguës : |
| 75 | * Les registres de contrôle des périphériques |
| 76 | * Les segments de RAM (ROM) réservé au système |
| 77 | * Les segments de RAM (ROM) de l'utilisateur |
| 78 | |
| 79 | |
| 80 | Les informations sur les segments mémoire dépendent de la plate-forme matérielles. Le système les connait par l'intermédiaire du fichier segmentation.h (dans le répertoire arch_soclib). |
| 81 | |
| 82 | |
| 83 | Les propriétés (caché / non caché), (système / utilisateur) sont codées dans les adresses, La lecture d'une donnée dans un segment caché est d’abord recherché dans le cache du processeur. |
| 84 | * En cas de hit, le contrôleur du cache fournit la donnée au processeur évitant ainsi de réaliser un accès à la mémoire. |
| 85 | * En cas de miss, le contrôleur du cache réalise la mise à jour d'une ligne de cache avant de fournir la donnée au processeur. |
| 86 | Si un cache contient la copie du contenu d'une adresse mémoire et que cette adresse est modifiée par un autre processeur, alors le cache n'est pas à jour. |
| 87 | |
| 88 | |
| 89 | Conséquence de ce comportement |
| 90 | * Les variables globales de l'application et du système doivent êtres mappées dans un segment de type non caché. |
| 91 | * La structure de la pile d'un Threads est mappée dans un segment de type caché (puisque aucun Thread ne modifie pas la pile d'un autre Thread !). |
| 92 | * L'échange de données entre threads passe par de la mémoire non caché ou une invalidation partiel du cache. |
| 93 | |