Exercice Corrigé – Gestion de la mémoire – Partie 1

La gestion de la mémoire est à la base des systèmes d’exploitation. Parmi les techniques fondamentales, la pagination et la segmentation jouent un rôle crucial dans l’optimisation de l’utilisation de la mémoire physique et virtuelle. La pagination permet de diviser la mémoire en blocs de taille fixe, facilitant ainsi le partage et l’allocation efficace des ressources. En parallèle, la segmentation offre une approche plus flexible en organisant la mémoire en segments de taille variable, reflétant la structure logique des programmes. Ensemble, ces mécanismes permettent d’implémenter la mémoire virtuelle, qui étend l’espace d’adressage disponible et améliore la performance des applications. Ici, nous allons voir des exercices corrigés qui illustreront ces concepts clés, en vous aidant à mieux comprendre comment la gestion de la mémoire contribue à la performance des systèmes d’exploitation.

 

Exercice 1: Questions de base

1.1) Citez deux différences entre les adresses logiques et physiques.

Voici deux différences entre les adresses logiques et physiques:

Définition et origine:

  • Adresse logique: C’est l’adresse générée par le processeur lors de l’exécution d’un programme. Elle est utilisée par le programme pour accéder à des données et instructions dans sa mémoire.
  • Adresse physique: C’est l’adresse réelle dans la mémoire physique (RAM). Elle correspond à l’emplacement où les données et instructions sont stockées dans le matériel.

Utilisation dans la mémoire virtuelle:

  • Adresse logique: Elle permet d’abstraire l’accès à la mémoire, facilitant la gestion des programmes multi-tâches et la protection de la mémoire. Les programmes ne voient qu’un espace d’adressage qui leur est propre.
  • Adresse physique: Elle est utilisée par le matériel pour accéder effectivement aux données. La conversion des adresses logiques en adresses physiques est gérée par le système d’exploitation et le matériel via des mécanismes comme la table de pages.

1.2) Expliquer la différence entre fragmentation interne et fragmentation externe.

  • Fragmentation interne: La fragmentation interne se produit lorsque des blocs de mémoire alloués sont plus grands que la quantité de mémoire réellement nécessaire par un processus. Cela crée des espaces inutilisés à l’intérieur de ces blocs. Exemple: Si un programme demande 30 Ko de mémoire et que le système d’exploitation alloue un bloc de 40 Ko, les 10 Ko restants dans ce bloc ne peuvent pas être utilisés par d’autres processus, entraînant une perte de mémoire.
  • Fragmentation externe: La fragmentation externe survient lorsque l’espace libre total en mémoire est suffisant pour satisfaire une demande, mais que cet espace est divisé en plusieurs blocs non contigus, rendant impossible l’allocation d’un bloc de mémoire contigu nécessaire. Exemple: Si la mémoire contient plusieurs blocs libres de 10 Ko, 15 Ko et 20 Ko, et qu’un programme demande 25 Ko, même si la mémoire totale disponible est suffisante (10 + 15 + 20 = 45 Ko), il n’y a pas assez d’espace contigu pour satisfaire cette demande.

1.3) Lorsqu’un processus est retiré de la mémoire, il perd sa capacité à utiliser l’unité centrale (au moins pendant un certain temps). Décrivez une autre situation dans laquelle un processus perd sa capacité à utiliser le processeur, mais où le processus n’est pas retiré de la mémoire.

Une autre situation où un processus perd sa capacité à utiliser le processeur, sans être retiré de la mémoire, est lorsqu’une interruption se produit ou lorsqu’il est mis en attente en raison de l’attente d’une ressource, comme une opération d’E/S. Par exemple, si un processus demande la lecture d’un fichier et que ce fichier n’est pas immédiatement disponible, le processus sera suspendu jusqu’à ce que l’opération d’E/S soit terminée, même s’il reste en mémoire.

1.4) Pourquoi la taille des pages est-elle toujours une puissance de 2 ?

La taille des pages est toujours une puissance de 2 pour des raisons d’efficacité et de simplicité dans la gestion des adresses. Explication:

  • Décomposition d’adresse: La pagination divise une adresse en un numéro de page et un numéro de décalage(offset). Utiliser des puissances de 2 permet de représenter ces deux parties avec un découpage en bits, facilitant ainsi la gestion.
  • Accès direct: Chaque bit représente une valeur binaire (0 ou 1), ce qui rend le calcul des numéros de page et des décalages plus simple et rapide, évitant des opérations arithmétiques complexes.

En résumé, choisir des tailles de page en puissances de 2 optimise le traitement des adresses et simplifie la conception du système de pagination.

1.5) Considérons un espace d’adressage logique de huit pages de 1024 mots chacune, mappé sur une mémoire physique de 32 cadres.

  • A. Combien de bits y a-t-il dans l’adresse logique ?
  • B. Combien de bits y a-t-il dans l’adresse physique ?

Pour résoudre ce problème, procédons étape par étape:


A. Bits dans l’adresse logique
  • Nombre de pages: 8 pages
  • Taille de chaque page: 1024 mots

Calcul des bits pour l’adresse logique:

  • Pour adresser 8 pages, nous avons besoin de log⁡2(8) = 3 bits (pour le numéro de page).
  • Pour adresser 1024 mots, nous avons besoin de log⁡⁡2(1024) = 10 bits (pour le décalage au sein de la page).

Total des bits dans l’adresse logique: 3(pour les pages) + 10(pour le décalage) = 13 bits


B. Bits dans l’adresse physique
  • Nombre de cadres: 32 cadres
  • Taille de chaque cadre: Équivalente à la taille d’une page, donc 1024 mots.

Calcul des bits pour l’adresse physique:

  • Pour adresser 32 cadres, nous avons besoin de log⁡⁡2(32)=5 bits (pour le numéro de cadre).
  • Pour adresser 1024 mots, nous avons besoin également de 10 bits (pour le décalage au sein du cadre).

Total des bits dans l’adresse physique: 5(pour les cadres) + 10(pour le décalage) = 15 bits


Résumé des réponses:
  • A. 13 bits dans l’adresse logique.
  • B. 15 bits dans l’adresse physique.

1.6) Sur un système avec pagination, un processus ne peut pas accéder à la mémoire qui ne lui appartient pas ; pourquoi ? Comment le système d’exploitation pourrait-il autoriser l’accès à d’autres mémoires ? Pourquoi devrait-il le faire ou non ?

Pourquoi un processus ne peut-il pas accéder à la mémoire qui ne lui appartient pas ?

Dans un système avec pagination, une adresse est composée d’un numéro de page logique et d’un décalage. Le numéro de page physique correspondant est obtenu en consultant une table des pages, qui associe les numéros de pages logiques aux pages physiques. Le système d’exploitation contrôle cette table, ce qui lui permet de restreindre l’accès d’un processus aux seules pages qui lui sont allouées. Par conséquent, un processus ne peut pas référencer une page physique qui ne lui appartient pas, car celle-ci ne figurera pas dans sa table des pages.

Comment le système d’exploitation pourrait-il autoriser l’accès à d’autres mémoires ?

Pour permettre un tel accès, le système d’exploitation peut ajouter des entrées dans la table des pages d’un processus pour inclure des pages qui appartiennent à d’autres processus ou à des zones de mémoire partagées. Cela pourrait se faire, par exemple, en utilisant des mécanismes de partage de mémoire, où plusieurs processus peuvent accéder à des régions de mémoire physique communes.

Pourquoi devrait-il le faire ou non ?

Pourquoi le faire:

  • Communication interprocessus (IPC): L’accès partagé à la mémoire permet une communication rapide et efficace entre les processus, en leur permettant d’échanger des données sans passer par des mécanismes d’E/S lents.
  • Performance: Partager des données en mémoire peut réduire la surcharge liée à la duplication des informations entre plusieurs processus.

Pourquoi ne pas le faire:

  • Sécurité: Autoriser l’accès à la mémoire d’autres processus peut entraîner des problèmes de sécurité, où un processus malveillant pourrait altérer ou lire des données sensibles d’un autre processus.
  • Stabilité: Une mauvaise gestion des accès partagés peut provoquer des instabilités, des fuites de mémoire ou des corruptions de données si les processus n’interagissent pas correctement.

En résumé, la gestion de l’accès à la mémoire est essentielle pour garantir la sécurité, la stabilité et l’efficacité des systèmes d’exploitation multitâches.

1.7) Considérons un système de pagination dans lequel la table des pages est stockée en mémoire.

  • A. Si une référence mémoire prend 200 nanosecondes, combien de temps prend une référence mémoire paginée ?
  • B. Si nous ajoutons des registres associatifs et que 75 % de toutes les références à la table des pages sont trouvées dans les registres associatifs, quel est le temps de référence mémoire effectif ? (Supposons que la recherche d’une entrée de table de pages dans les registres associatifs ne prend pas de temps, si l’entrée existe).
A. Temps de référence mémoire paginée

Dans un système de pagination, lorsque nous accédons à une adresse mémoire, il y a deux étapes principales:

  • Accès à la table des pages: Cela prend 200 nanosecondes.
  • Accès à la mémoire physique: Cela prend également 200 nanosecondes.

Total pour une référence mémoire paginée:

200 nanosecondes(table des pages) + 200 nanosecondes(mémoire) = 400 nanosecondes

B. Temps de référence mémoire effectif avec registres associatifs
  • Pourcentage de références trouvées dans les registres associatifs: 75% (0,75).
  • Pourcentage de références qui nécessitent un accès à la table des pages: 25% (0,25).

Calcul du temps d’accès effectif:

  • Si l’entrée est trouvée dans les registres associatifs, le temps d’accès est simplement de 200 nanosecondes.
  • Si l’entrée n’est pas trouvée, il faut 400 nanosecondes (200 pour la table des pages + 200 pour la mémoire).

Formule du temps d’accès effectif:

Temps d’accés effectif = 0,75 * (200 nanosecondes) + 0,25 * (400 nanosecondes)

Calcul:

Temps d’accés effectif = 0,75 * 200 + 0,25 * 400
                       = 150 + 100 = 250 nanosecondes
                       = 150 + 100 = 250 nanosecondes
Résumé des réponses:
  • A. 400 nanosecondes pour une référence mémoire paginée.
  • B. 250 nanosecondes pour le temps de référence mémoire effectif.

1.8) Quel est l’effet de permettre à deux entrées d’une table de pages de pointer vers le même cadre de page en mémoire ? Expliquez comment cet effet pourrait être utilisé pour réduire le temps nécessaire pour copier une grande quantité de mémoire d’un endroit à un autre. Quel effet la mise à jour d’un octet sur une page aurait-elle sur l’autre page ?

Effet de partager un cadre de page

Permettre à deux entrées d’une table de pages de pointer vers le même cadre de page en mémoire facilite le partage de code et de données entre différents processus. Cela est particulièrement utile dans les cas suivants:

  • Économie d’espace mémoire: En partageant des sections de code (comme des bibliothèques ou des exécutables), on réduit la duplication en mémoire. Par exemple, des programmes tels que des éditeurs de texte, des compilateurs et des systèmes de bases de données peuvent utiliser le même code tout en ayant leurs propres données.
Utilisation pour réduire le temps de copie

Lorsqu’il s’agit de copier une grande quantité de mémoire, au lieu de faire une véritable copie de tous les éléments en mémoire (ce qui pourrait être long et coûteux), il suffit de faire pointer les tables de pages de destination vers les mêmes cadres de pages que les tables de pages source.

Cela signifie que les deux processus (ou le processus source et celui de destination) accèdent au même cadre de mémoire sans duplication. Par conséquent, la copie de mémoire devient une opération beaucoup plus rapide, car il n’y a pas de données réelles à transférer, seulement des modifications des tables de pages.

Impact de la mise à jour d’un octet sur une page

Si une page partagée contient des données non réentrantes (c’est-à-dire des données qui peuvent être modifiées), toute mise à jour d’un octet sur cette page affectera tous les processus qui pointent vers ce cadre de page. Cela signifie que:

  • Modifications réfléchies: Si un processus modifie une valeur dans la mémoire partagée, cette modification sera visible pour tous les autres processus utilisant le même cadre de page. Cela peut être problématique si les processus ne devraient pas interagir ou si des données critiques sont en jeu.
  • Gestion de la concurrence: Dans le cas de données non réentrantes, il est essentiel de gérer l’accès concurrent pour éviter des problèmes d’intégrité des données. Cela peut impliquer l’utilisation de mécanismes de verrouillage ou d’autres techniques de synchronisation.
Résumé

En résumé, permettre à plusieurs entrées de table de pages de pointer vers le même cadre de page favorise le partage de mémoire, réduisant ainsi l’espace requis et le temps nécessaire pour « copier » des données. Cependant, cela nécessite des précautions particulières pour gérer les mises à jour de données partagées afin d’éviter des effets indésirables sur d’autres processus.

1.9) Pourquoi la segmentation et la pagination sont-elles parfois combinées en un seul système ?

La segmentation et la pagination sont combinées pour:

  • Efficacité de la mémoire: La segmentation réduit la taille de la table des pages en regroupant les pages non utilisées, optimisant ainsi l’utilisation de la mémoire.
  • Allocation simplifiée: Cela facilite l’allocation de mémoire en gérant des segments logiques tout en utilisant des pages de taille fixe, ce qui accélère les opérations d’allocation et de libération.
  • Protection et flexibilité: La combinaison offre une meilleure protection des accès mémoire, permettant des permissions spécifiques pour chaque segment et chaque page.

En résumé, cette approche hybride améliore la gestion de la mémoire tout en optimisant l’espace et la sécurité.

1.10) Décrivez un mécanisme par lequel un segment peut appartenir à l’espace d’adressage de deux processus différents.

Un mécanisme permettant à un segment d’appartenir à l’espace d’adressage de deux processus différents repose sur le partage de segments via leurs tables de segments.

Mécanisme de partage de segments:

  • Entrées de la table de segments: Chaque processus a une table de segments qui contient des entrées définissant les adresses de base et les limites des segments.
  • Pointeurs de base partagés: Pour permettre le partage, les deux processus doivent avoir des entrées de table de segments qui pointent vers le même emplacement physique en mémoire. Cela signifie que les pointeurs de base (adresse de début) pour le segment partagé doivent être identiques dans les deux tables.
  • Numéro de segment commun: Les deux processus doivent également utiliser le même numéro de segment pour identifier le segment partagé. Cela garantit que les deux tables de segments font référence au même segment logique.

Résumé:

Ainsi, en configurant les tables de segments de manière à ce que certaines entrées partagent des pointeurs de base identiques, un segment peut être accessible à la fois par deux processus, facilitant le partage de code ou de données tout en maintenant l’isolation nécessaire.

1.11) Considérons le tableau de segments suivant:

+-------------+-------------+-------------+
|   Segment   |    Base     |    Taille   |
+-------------+-------------+-------------+
| 0           | 219         | 600         |
+-------------+-------------+-------------+
| 1           | 2300        | 14          |
+-------------+-------------+-------------+
| 2           | 90          | 100         |
+-------------+-------------+-------------+
| 3           | 1327        | 580         |
+-------------+-------------+-------------+
| 4           | 1952        | 96          |
+-------------+-------------+-------------+

Quelles sont les adresses physiques correspondant aux adresses logiques suivantes ?

A. 0,430
B. 1,10
C. 2,500
D. 3,400
E. 4,112

A. (430 < 600) => True => Adresses physique = 219 + 430 = 649
B. (10 < 14) ) => True => Adresses physique = 2300 + 10 = 2310
C. (500 < 100) ) => False => Référence illégale, erreur dans le système d’exploitation
D. (400 < 580) ) => True => Adresses physique = 1327 + 400 = 1727
E. (112 < 96) => False => Référence illégale, erreur dans le système d’exploitation
 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *