Université de Chlef Janvier 2020 Département Informatique
Filière : 1 ère Année Master - Ingénierie des Logiciels
Examen semestriel
Module de « Systèmes d’exploitation » Corrigé
Exercice 1 : (7 points)
On considère le système de gestion de fichiers du système Unix.
Question 1/ Qu’est ce que le superbloc et quel est son rôle ? Réponse :
Le superbloc est une structure de métadonnées (données permettant de décrire les données) sur la partition d’un système de fichier de Unix : le type du système de fichiers, la taille d’un bloc, la liste des inodes, l'état d'occupation des secteurs, … etc.
(1 pt)
Question 2/ Qu’est ce que l’inode et quel est son rôle ? Réponse :
L'inode est une structure de données permettant d'accéder aux détails d'un fichier sur le système Unix. Chaque fichier a son propre inode qui contient des métadonnées pour la description du fichier : l'identifiant du propriétaire , l'identifiant du groupe propriétaire , le type de l'inode , les droits d'accès, la date de dernière modification du fichier, ...etc, mais aussi des liens vers les blocs de données composant le fichier.
(1 pt)
On donne les informations suivantes : La taille d'un bloc de données est de 1 ko (kilo-octets). Chaque pointeur (numéro de bloc) occupe 4 octets. Chaque inode comprend 10 liens directs, 1 lien indirect simple, 1 lien indirect double et 1 lien indirect triple.
Question 3/ Combien de blocs de données et de blocs de liens sont nécessaires pour représenter un fichier ayant une taille de 420 Ko ? Et quelle est la taille de la fragmentation occasionnée (espace réservé mais non utilisé) ? Justifiez.
Réponse :
Nombre de blocs de données = 420.
Justification :
Chaque bloc occupe 1 Ko. Pour sauvegarder les données d'un fichier de 420 Ko, il faut donc 420 blocs de données.
(1 pt)
Nombre de blocs de liens = 3.
Justification :
Chaque bloc de liens contient 1024/4, soit 256 liens. Pour assurer les 420 liens nécessaires à ce fichier, on aura besoin de :
10 liens directs (aucun bloc de liens n'est utilisé)
256 liens présents sur le seul bloc de liens indirects simples 154 liens présents sur 2 blocs de liens d'indirection double.
(1 pt)
Fragmentation = 1428 octets.
Justification :
Sur le premier bloc de liens de l’indirection double, nous avons (256 – 1), soit 255 liens inutilisés.
Sur le 2ème bloc de liens de l’indirection double, nous avons (256 – 154), soit 102 liens inutilisés.
Au total, nous avons 357 liens inutilisés, soit 357*4 = 1428 octets.
(1 pt)
Question 4/ Quelle est la taille minimale que doit avoir un fichier pour qu'on soit obligé d'utiliser le lien indirect double ?. Justifiez.
Réponse :
Taille minimale = 272.385 octets.
Justification :
Pour qu'on soit obligé d'utiliser le lien indirect double, il faut que les liens directs et indirects simples soient saturés. Cela donne :
10 liens directs → 10 blocs de données
256 liens indirects simple → 256 blocs de données
Pour qu'on soit obligé d'utiliser le lien indirect double, la taille du fichier doit donc être au minimum égale à :
(10 + 256) x 1024 +1 , soit 272.385 octets.
(2 pt)
Exercice 2 : (8 points)
Un système informatique dispose de 3 types de ressources (R1, R2 et R3) et de 3 processus (P1, P2 et P3).
On donne dans les tableaux suivants, respectivement : Le nombre total d’instances par type de ressources, les ressources effectivement affectées et les demandes de ressources en attente.
Tableau 1 : Le nombre total d’instances par type de ressources
R1 R2 R3
1 2 1
Tableau 2 : Les ressources effectivement affectées aux processus
R1 R2 R3
P1 0 1 0
P2 1 1 0
P3 0 0 1
Tableau 3 : Les demandes de ressources en attente
R1 R2 R3
P1 1 0 0
P2 0 0 1
P3 0 0 0
Question 1/ Dessinez le graphe d’allocation des ressources de ce système.
Réponse :
(1.5 pt)
Question 2/ Montrez que le système n’est pas en situation d’interblocage.
Réponse :
Il n’ya pas de circuit dans le graphe d’allocation. Il n’ya donc pas d’interblocage.
Le processus P3 n’a aucune demande de ressource en attente. Il peut donc terminer son exécution. Après la terminaison de P3, on peut affecter l’instance de la ressource R3 au processus P2 qui pourra terminer son exécution. Après la fin de P2, on pourra affecter l’instance de la ressource R1 au processus P1, qui pourra poursuivre son exécution.
(1.5 pt)
Question 3/ Quelle opération supplémentaire suffirait-elle pour provoquer un interblocage ?.
Justifiez.
Réponse :
Un interblocage survient si le processus P3 fait une demande supplémentaire de la ressource R1 ou R2. En effet, dans ce cas il y’a un circuit qui va apparaitre dans le graphe qui exprime une attente circulaire.
(2 pt)
Question 4/ Expliquez brièvement 3 méthodes (vues en cours) qui peuvent être proposées pour guérir l’interblocage.
Réponse :
• Correction manuelle : L’interblocage est corrigé par une intervention humaine (en relançant le système par exemple).
• Terminaison de processus : On peut éliminer l’interblocage en arrêtant les processus un à un jusqu’à éliminer l’interblocage.
• Réquisition de ressources : Pour éliminer l’interblocage, en procédant à la réquisition d’une ou plusieurs ressources, en les enlevant à un processus et en les donnant à un autre jusqu’à ce que l’interblocage soit éliminé.
(3 pt)
Exercice 3 : (5 points)
Un processus émetteur envoie, via une socket, des entiers lus au clavier à un processus récepteur.
Le processus récepteur reçoit ces entiers un à un, les multiplie par 2 et les affiche. Lorsque le récepteur reçoit la valeur spéciale -1, il ferme la socket et se termine.
3 15
7 11 -1 Emetteur
6 30 14 22
*** Fin ***
Récepteur
Travail à faire : Ecrire en java le code du récepteur.
Soignez votre code.
Réponse :
package java_sockets;
/**
*
* Dr Loukam Mourad
* Examen SE, Janvier 2020 */
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Socket_Recepteur2020 {
//ServerSocket variable
private static ServerSocket server;
//Port réservé au socket private static int port = 8080;
public static void main(String args[]) throws IOException, ClassNotFoundException{
int x;
boolean Arret;
Arret=false;
//Créer un socket coté Serveur server = new ServerSocket(port);
//Boucle d'écoute des données de l'émetteur while(!Arret){
System.out.println("Attente d'un nombre ...");
//Attente d'une connexion du client Socket socket = server.accept();
//Création d'un flux de données d'entrée associé au socket
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
//Lire le message envoyé par l'émetteur (Client) String message = (String) ois.readObject();
x = Integer.parseInt(message);
if (x!= -1)
System.out.println("Nombre : "+x*2);
else Arret=true;
ois.close();
socket.close();
}
System.out.println("***Fin***");
//Fermer le socket server server.close();
} }
(5 pt)