ASR6 : Sujet d`examen écrit 1h30min, 10 Novembre 2008 IUT

publicité
e
DUT Informatique 2 année Dec.
Système & Réseaux - ASR6
10 novembre 2008
ASR6 : Sujet d'examen écrit
1h30min, 10 Novembre 2008
IUT Informatique 2, Décalés -- UNSA - 2008
Tous documents (cours, notes personnelles, sujets de TPs, programmes imprimés, etc.)
autorisés
Partie Programmation Concurrente
Exercice 1. Programme multi-thread Java offrant la notion de Semaphore
L'objectif de cet exercice est d'implanter en Java multi-thread l'equivalent de l'API
Semaphore disponible dans le package java.util.concurrent depuis la version 5 de Java, et
d'illustrer la manière d'utiliser un tel outil de synchcronisation généraliste . L'ensemble de
cet exercice devra être résolu en faisant uniquement appel à la notion de Moniteur
disponible dans le langage Java (pas de sémaphores, pas d'attente active, etc).
L'ensemble des méthodes que l'on vous demande de décrire se trouvera dans une seule
classe Java. Commencer par définir le constructeur de la classe. Puis :
1. Donner le code Java permettant d'implanter la méthode acquire() (equivalent du
P())
2. Donner le code Java permettant d'implanter la méthode release() (equivalent du
V())
3. Donner le code Java permettant d'obtenir le nombre de "billes" actuellement
disponibles
Pour toutes ces méthodes, expliquer clairement pourquoi vous avez besoin de les placer
dans un moniteur.
4. A présent, donner une deuxième version pour la méthode acquire(), qui puisse
prendre en paramètre un nombre de billes positif que l'on veut prendre "d'un seul coup"
(soit toutes d'un coup, soit aucune). Bien sur, cette nouvelle méthode a une signature
différente de celle de la première version. A votre avis, ces deux versions de acquire()
doivent elles être implantées par une même méthode dans votre classe, ou peuvent-elles
être clairement séparées ?
5. Pour finir cette classe, donner le code d'une méthode tryAcquire(int nbBilles) qui
permet de tenter d'acquérir le nombre de billes passe en paramètre (ou 1 bille en
l'absence de paramètre). Si le nombre de billes disponibles permet de satisfaire la
requête, le comportement de tryAcquire est exactement similaire a celui d'un
acquire(nbBilles). Autrement, la méthode renvoie une valeur false pour montrer
qu'aucune bille n'a été retirée.
e
DUT Informatique 2 année Dec.
Système & Réseaux - ASR6
10 novembre 2008
Exercice 2. Utilisation de votre classe Semaphore
Cet exercice, malgré les apparences, est indépendant du premier ! Vous pouvez donc
supposer que l'on dispose d'une classe Semaphore qui a la même API que celle
disponible dans le package java.util.Concurrent (et dont vous aurez normalement donne
une implantation dans l'exercice 1, mais que vous allez utiliser dans cet exercice, même si
vous n'avez pas réussi a en faire une implementation dans l'exercice 1).
Le but est d'utiliser un objet semaphore, instance de cette classe Semaphore afin de
résoudre un problème nécessitant de synchroniser des threads entre elles.
Commencer par :
1. écrire une méthode main qui instancie cet objet sémaphore,
2. décrire (le squelette de) deux codes (types) différents pour des threads:
•
•
Le premier type de thread a le comportement suivant : Elle fabrique des objets un a
un, qu'elle dépose en vrac dans une zone de stockage commune, cad une sorte
d'entrepôt. Vous supposerez qu'un entrepôt n'a pas de taille limite, et qu'il
dispose d'une interface très simple comprenant deux méthodes "put" et "get"
que vous utiliserez pour respectivement, déposer un objet, ou en récupérer un.
L'autre type de thread quant a lui, simule le fonctionnement d'une machine qui fait
des lots d'objets, d'une taille prédéfinie (par exemple, des lots de 5 objets identiques
pour une thread, ou de 3 pour d'autres threads de ce type).
3. Modéliser par du code Java ces 2 types de threads.
4. Créer un méthode main et démarrer l'exécution de 2 thread de chaque type,
chacune ayant un de ceux comportement différent dans une boucle de 1000
iteractions
5. Faire se terminer proprement la thread "main"
Partie Admin. Système
Exercice 3 : services et démarrage
Expliquez ce que contient le répertoire /etc/rc.d/init.d
A quoi correspondent les runlevel ?
Quel est l'utilité de la commande /sbin/service ?
Donnez un équivalent de la commande /sbin/service/httpd status
e
DUT Informatique 2 année Dec.
Système & Réseaux - ASR6
10 novembre 2008
Exercice 4 : gestion des utilisateurs
Soit la ligne suivante extraite du fichier /etc/passwd :
john:x:501:501::/home/john:/bin/bash
Que faut-il faire en plus d'insérer cette ligne dans /etc/passwd pour que le login
john soit opérationnel?
Quel est le résultat de la commande suivante ?
cat passwd.liste | /usr/sbin/chpasswd
Quel fichier contient les mots de passe des utilisateurs (dans les mêmes conditions
que les Tps) ?
Exercice 5: partage de fichiers
Donnez la liste des opérations qui permettent de partager par NFS le répertoire /net de la
machine pcsrv avec la machine pcclt.
Partie Programmation Distribué avec RMI
Exercice 6: Une application distribuée avec RMI
Le but de cet exercice est de programmer une application de chat basée sur un serveur
central. Le protocole de l’application est simple: chaque client s’inscrit sur le serveur en
donnant un pseudonyme, et ensuite lorsque un client envoie un message, le serveur le
communique à tous les clients.
1. Faire le schéma de l’application.
2. Soit l’interface utilisateur suivante:
e
DUT Informatique 2 année Dec.
Système & Réseaux - ASR6
10 novembre 2008
public class ClientUI {
public static void main (String[]args){
try{
Client cl = new Client ();
if(args.length != 2){
System.out.println(”Mauvais arguments !”);
System.exit(-1) ;
}
cl.connect(args[0], args[1]) ;
LineNumberReader in = new LineNumberReader (new
InputStreamReader(System.in));
String str = null;
while((str = in.readLine())!= null){
if(str.equals(”x”)){
cl.disconnect();
System.exit(-1) ;
}else{
cl.send(str) ;
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
Remplir la classe Client:
public class Client extends ............ implements ..... {
.......
public Client ( )....
public void connect (String url , String pseudo) throws ...... {
......
}
public void send (String str){
......
}
public void disconnect (){
......
}
}
3. Écrire les classes et les interfaces du serveur, ainsi que celles manquantes pour le
client, en décrivant lesquelles sont nécessaires du côté serveur et lesquelles sont
nécessaires du côté client.
4. Identifiez les objets distants.
5. D'écrire comment compiler et exécuter le programme obtenu.
Téléchargement