Devoir de Systeme d’Exploitation
Japhet Oyie 21p191 3GI
13 décembre 2024
TD:Memoire
Exercice 1
1. Différence entre « adresse logique » et « adresse physique »
• Adresse logique : C’est l’adresse produite par le processeur, utilisée par les
programmes en cours d’exécution. Elle est aussi connue sous le nom d’"adresse
virtuelle".
• Adresse physique : C’est l’adresse réelle située dans la mémoire principale (RAM).
Elle est obtenue après une conversion effectuée par la table des pages.
2. Différence entre le cache et le tampon
• Cache : Mémoire ultra-rapide qui conserve les données fréquemment utilisées pour
optimiser les performances.
• Tampon : Espace de mémoire temporaire qui permet de synchroniser les vitesses
de transfert entre deux dispositifs.
3. Principe du swapping
Le swapping est une technique qui consiste à déplacer temporairement des processus de
la mémoire vive (RAM) vers le disque dur lorsqu’il y a un manque de mémoire disponible.
Cela permet de libérer de l’espace pour d’autres processus en cours.
4. Avantages de la mémoire virtuelle
• Isolation des processus, garantissant leur indépendance.
• Exécution de programmes nécessitant une grande quantité de mémoire.
• Réduction de la fragmentation grâce à des techniques comme la pagination ou la
segmentation.
• Amélioration de la sécurité en empêchant l’accès non autorisé aux données d’autres
processus.
1
5. Pagination avec des pages de 4 Mo et 4 Ko (Pentium 4)
• Taille des pages : 212 pour les pages de 4 Ko, et 222 pour celles de 4 Mo.
• Déplacement :
– Pages de 4 Ko : 12 bits nécessaires.
– Pages de 4 Mo : 22 bits nécessaires.
• Numéro de page :
– Pages de 4 Ko : 20 bits disponibles.
– Pages de 4 Mo : 10 bits disponibles.
6. Espace d’adressage virtuel sur 32 bits avec des pages de 256 Ko
• Taille de la mémoire virtuelle : 232 octets, soit un espace total de 4 Go.
• Calcul du numéro de page et du déplacement :
– Taille de la page : 256 Ko.
– Déplacement : 18 bits nécessaires.
– Numéro de page : 14 bits disponibles.
Exercice 2
1) Accès à l’adresse logique <page 3, déplacement 10>
• Données :
– Table des pages :
∗ Page 1 → Cadre 4,
∗ Page 3 → Cadre 8.
– Adresse logique : <page 3, déplacement 10>.
• Analyse : La page 3 est chargée en mémoire centrale (MC) dans le cadre 8.
L’adresse physique correspondante est donc <cadre 8, déplacement 10>.
• Réponse : c. L’adresse physique générée est <cadre 8, déplacement 10>.
2) Accès à l’adresse logique <page 2, déplacement 24>
• Données :
– Table des pages :
∗ Page 1 → Cadre 4,
∗ Page 3 → Cadre 8,
∗ Page 2 n’est pas chargée en MC.
– Adresse logique : <page 2, déplacement 24>.
2
• Analyse : La page 2 n’est pas chargée en mémoire centrale. Cela entraîne un
défaut de page.
• Réponse : a. Il se produit un défaut de page.
3) Définition d’un défaut de page
• Analyse des options :
– a. Correct : Un défaut de page se produit lorsqu’un processus accède à une
page qui fait partie de son espace d’adressage mais qui n’est pas chargée en
mémoire centrale.
– b. Incorrect : Si une page n’appartient pas à l’espace d’adressage du processus,
cela provoque une erreur de segmentation ou de protection mémoire, et non
un défaut de page.
• Réponse : a. Lorsqu’un processus accède à une page de son espace d’adressage
qui n’est pas en MC.
Exercice 3: Correspondance des adresses logiques et
physiques
Table de pages :
Page logique Page physique
0 4
1 6
2 8
3 9
4 12
5 1
On nous donne que les pages logiques et physiques font 1 Ko (1024 octets). Nous
devons déterminer l’adresse mémoire correspondante pour les adresses logiques suivantes
: 142A16 et 0AF 116 .
1. Adresse logique 142A16 :
• Convertir l’adresse logique en décimal : 142A16 = 518610 .
• Diviser l’adresse par la taille d’une page (1024 octets) :
5186÷1024 = 5 (numéro de page logique) et 5186 mod 1024 = 162 (décalage).
• La page logique 5 correspond à la page physique 1, d’après la table de pages.
• L’adresse physique est donc :
1 × 1024 + 162 = 118610 = 4A216 .
3
2. Adresse logique 0AF 116 :
• Convertir l’adresse logique en décimal : 0AF 116 = 280110 .
• Diviser l’adresse par la taille d’une page (1024 octets) :
2801÷1024 = 2 (numéro de page logique) et 2801 mod 1024 = 753 (décalage).
• La page logique 2 correspond à la page physique 8, d’après la table de pages.
• L’adresse physique est donc :
8 × 1024 + 753 = 879310 = 224916 .
Les adresses physiques correspondantes sont :
142A16 −→ 4A216 et 0AF 116 −→ 224916 .
Exercice 5 : Allocation de mémoire avec différentes straté-
gies
Soit les partitions de mémoire suivantes : 100k, 500k, 200k, 300k, 600k, et les processus
à allouer : 212k, 417k, 112k, 426k.
1. First-fit
• 212k : Place dans la partition de 300k (reste 88k).
• 417k : Place dans la partition de 500k (reste 83k).
• 112k : Place dans la partition de 200k (reste 88k).
• 426k : Place dans la partition de 600k (reste 174k).
2. Best-fit
• 212k : Place dans la partition de 300k (reste 88k).
• 417k : Place dans la partition de 500k (reste 83k).
• 112k : Place dans la partition de 200k (reste 88k).
• 426k : Place dans la partition de 600k (reste 174k).
3. Worst-fit
• 212k : Place dans la partition de 600k (reste 388k).
• 417k : Place dans la partition de 500k (reste 83k).
• 112k : Place dans la partition de 200k (reste 88k).
• 426k : Place dans la partition de 300k (reste 126k).
4
4. Utilisation la plus efficace
Tous les algorithmes allouent de manière similaire dans cet exemple. La différence réside
dans la gestion des restes. En pratique, Best-fit tend à utiliser plus efficacement la
mémoire, car il cherche à minimiser l’espace inutilisé.
Exercice 6 : Structures de données pour les partitions
de mémoire
Pour décrire les partitions de mémoire, on peut utiliser une liste chaînée ou un tableau
de structures. Chaque structure contient :
• La taille de la partition.
• L’adresse de début de la partition.
• Un indicateur pour savoir si la partition est libre ou occupée.
Lorsqu’un bloc de mémoire est libéré, la structure de données met à jour l’indicateur
de la partition pour la marquer comme libre. Si des partitions voisines sont également
libres, elles peuvent être fusionnées (opération de coalescence).
Exercice 7 : Système de pagination avec table de page
en mémoire
1. Temps d’accès sans registres associatifs
Le temps pour une référence mémoire est de 200 nanosecondes. Chaque référence à la
table de pages prend un accès mémoire supplémentaire, donc le temps total sera :
200 ns + 200 ns = 400 ns.
2. Ajout de registres associatifs
75% des accès à la table des pages se font dans les registres associés (aucun temps néces-
saire). Le temps d’accès effectif est donc :
0.75 × 200 ns + 0.25 × 400 ns = 150 ns + 100 ns = 250 ns.
Exercice 8 : Traduction d’une adresse virtuelle
L’ordinateur a une mémoire virtuelle de 232 octets et une mémoire physique de 218 octets.
La taille de la page est de 4096 octets.
5
Calcul de l’adresse physique
L’adresse virtuelle 1112345616 est convertie en décimal :
1112345616 = 28521288010 .
On divise cette adresse par la taille de la page (4096 octets) pour obtenir le numéro de
page :
285212880 ÷ 4096 = 69632 (numéro de page).
Le décalage est :
285212880 mod 4096 = 2856.
Opérations matérielles et logicielles
• Matériel : Recherche dans la table des pages et récupération du numéro de page
physique.
• Logiciel : Gestion de la table des pages, mappage et traduction d’adresses, gestion
des erreurs de page.
Exercice 9 : Défauts de page pour différents algorithmes
de remplacement
Voici les résultats pour les algorithmes de remplacement de pages avec 1 à 7 cadres de
pages :
Chaîne de références : 1, 2, 3, 4, 2, 1, 5, 6, 2, 1, 2, 3, 7, 6, 3, 2, 1, 2, 3, 6
Défauts de page
• LRU :
– 1 cadre : 20 défauts.
– 2 cadres : 19 défauts.
– 3 cadres : 17 défauts.
– 4 cadres : 15 défauts.
– 5 cadres : 13 défauts.
– 6 cadres : 11 défauts.
– 7 cadres : 9 défauts.
• FIFO :
– 1 cadre : 20 défauts.
– 2 cadres : 19 défauts.
– 3 cadres : 17 défauts.
– 4 cadres : 16 défauts.
– 5 cadres : 14 défauts.
6
– 6 cadres : 12 défauts.
– 7 cadres : 10 défauts.
• OPTIMAL :
– 1 cadre : 20 défauts.
– 2 cadres : 19 défauts.
– 3 cadres : 18 défauts.
– 4 cadres : 16 défauts.
– 5 cadres : 14 défauts.
– 6 cadres : 12 défauts.
– 7 cadres : 10 défauts.
Exercice 10 : Limites des défauts de pages
1. Limite inférieure sur le nombre de défauts
La limite inférieure est n, le nombre de pages distinctes, car chaque page référencée une
fois sans répétition avant que la mémoire ne soit pleine provoque un défaut.
2. Limite supérieure sur le nombre de défauts
La limite supérieure est p, le nombre total de références à la mémoire, car dans le pire
des cas, chaque référence à une page différente entraîne un défaut. TD:Processus
Exercice 1 : Questions sur le système UNIX
1. Rôle d’un système d’exploitation et interpréteurs/compilateurs
Le rôle d’un système d’exploitation est de gérer les ressources matérielles de l’ordinateur,
telles que le processeur, la mémoire, le stockage et les périphériques, et de fournir des
services aux programmes utilisateur. Les interpréteurs de commandes et les compila-
teurs ne font pas directement partie du noyau du système d’exploitation, mais sont des
programmes utilisateurs qui interagissent avec lui.
2. Système multi-programmé, par lots et en temps partagé
• Un système multi-programmé exécute plusieurs programmes simultanément, en
utilisant des techniques de gestion du temps processeur.
• Un système de traitement par lots exécute des programmes en séquence sans
interaction utilisateur pendant l’exécution, souvent utilisé pour des tâches longues.
• Un système en temps partagé permet à plusieurs utilisateurs d’interagir si-
multanément avec l’ordinateur, chaque utilisateur ayant l’illusion d’avoir un accès
exclusif aux ressources.
7
3. Appels système dans UNIX
Les véritables appels système dans UNIX sont effectués à partir :
• d’un programme utilisateur via des appels système standards,
• d’une commande shell via des mécanismes d’interaction avec le noyau,
• d’une procédure de la bibliothèque standard qui encapsule les appels système.
Les appels système sont exécutés en mode superviseur (ou noyau), tandis que les
programmes utilisateurs sont exécutés en mode utilisateur.
4. Organisation des fichiers dans UNIX
Dans UNIX, les fichiers sont organisés sous forme d’un arbre de répertoires avec un
répertoire racine (/). Un utilisateur peut accéder aux fichiers d’un autre utilisateur si les
permissions le permettent (par exemple, via la commande chmod).
5. Processus dans UNIX
Chaque processus UNIX a un processus parent. Si un processus perd son parent,
il devient un processus orphelin et est adopté par le processus init. Un processus
devient un processus Zombie lorsque son parent n’a pas encore récupéré son état de
terminaison (via l’appel wait()).
6. Choisir entre fork() et pthread_create()
Le choix entre fork() et pthread_create() dépend de la nécessité de créer des proces-
sus indépendants (fork) ou des threads légers au sein d’un même processus (pthread).
pthread_create() est préférable pour le partage de ressources et une gestion plus légère
des threads.
7. Événements qui interrompent l’exécution d’un processus
Voici quatre événements pouvant interrompre un processus dans UNIX :
• Une interruption matérielle (par exemple, un périphérique).
• Un signal envoyé par un autre processus (comme SIGINT).
• Une demande d’entrée/sortie (I/O).
• Un appel système qui provoque un changement d’état.
8. Rôle de l’ordonnanceur
L’ordonnanceur est responsable de décider quel processus doit s’exécuter à tout moment.
Dans UNIX, l’ordonnanceur utilise une politique de priorités pour gérer les processus. Il
privilégie souvent les processus interactifs (basés sur des priorités et le temps de CPU).
8
9. Problèmes liés au partage de données en temps partagé
Le partage de données dans un système multi-programmé en temps partagé pose des
problèmes de synchronisation. UNIX permet de contrôler l’accès aux données partagées
via des mécanismes comme les verrous. Une section critique est une portion de code
où plusieurs processus peuvent accéder en même temps à des ressources partagées.
Exercice 2 : Création et gestion des processus dans
UNIX
1. Avantages et inconvénients de la duplication
• Avantage : La duplication (fork()) permet au processus fils de recevoir une copie
exacte de l’environnement du parent.
• Inconvénient : Cela peut entraîner une surcharge mémoire et un coût élevé si le
processus parent et fils n’ont pas besoin d’être indépendants.
2. Processus et libération des ressources après exit()
Lorsque exit() est appelé, les ressources du processus ne sont pas immédiatement libérées
car l’état du processus est encore nécessaire pour que son parent puisse le récupérer (via
wait()). Cela permet d’éviter les erreurs de gestion des ressources.
3. Modes de fonctionnement des processeurs
Les processeurs disposent de deux modes :
• Mode noyau : Permet l’accès complet aux ressources matérielles.
• Mode utilisateur : Limité pour protéger les ressources système contre les erreurs
des programmes utilisateurs.
Exercice 3 : Commandes et gestion des processus
1. Vérification de la consommation CPU
La commande top permet de vérifier quel utilisateur consomme la plus grande partie des
ressources processeur.
2. Processus parent
Oui, tous les processus ont un processus parent, sauf le processus init, qui est le premier
processus lancé par le système.
3. Processus enfant sans parent
Si un processus enfant perd son parent, il devient un processus orphelin et est adopté
par le processus init.
9
4. Nom d’un programme ou d’une application active
Le nom d’un programme ou d’une application active peut être vérifié avec la commande
ps.
5. Envoi d’un signal à un processus
La commande kill permet d’envoyer un signal à un processus.
6. Élément nécessaire pour envoyer un signal
Pour envoyer un signal à un processus, il faut connaître le PID (Process ID) du processus
cible.
7. Signal de terminaison de session
Lorsque la session bash se termine, tous les processus reçoivent le signal SIGHUP.
Exercice 4 : Gestion des processus dans les terminaux
1. Lancer deux terminaux
Lancer deux terminaux (tty1 et tty2).
2. Analyse de la ligne de commande
La ligne while true; do echo -n A » /tmp/log; sleep 1; done écrit en continu le
caractère "A" dans le fichier /tmp/log, toutes les secondes.
3. Affichage du contenu du fichier en temps réel
Dans le tty2, utilisez tail -f /tmp/log pour afficher en temps réel les ajouts dans le
fichier.
4. Interruption du processus
Interrompre le processus en utilisant Ctrl+Z met le processus en arrière-plan (en état
suspendu).
5. Vérification du numéro de travail
Vérifiez avec jobs pour connaître le numéro de travail du processus suspendu.
6. Vérification de l’arrêt du fichier log
Dans tty2, vérifiez que l’écriture dans /tmp/log s’est arrêtée.
10
7. Lancer à nouveau le processus en arrière-plan
Relancer le processus suspendu avec bg pour le mettre en arrière-plan.
8. Vérification de l’exécution
Dans tty2, vérifiez que le fichier /tmp/log continue de se remplir.
9. Analyse des commandes en tty1
Les commandes while true; do echo -n B » /tmp/log; sleep 1; done & et Ctrl+B
Ctrl+C exécutent une tâche en arrière-plan et interrompent la deuxième tâche.
10. Vérification des processus en cours
Dans tty2, utilisez ps pour vérifier les processus en cours d’exécution.
11. Utilisation de SIGSTOP et SIGCONT
Dans tty1, utilisez kill -SIGSTOP pour suspendre un processus et kill -SIGCONT pour
le reprendre.
12. Utilisation de SIGTERM
Terminez les travaux en utilisant kill -SIGTERM pour envoyer le signal de terminaison.
13. Vérification de la fin des processus
Utilisez jobs pour vérifier si tous les processus ont été terminés.
11