You are on page 1of 30

Cours Systmes Distribus

Mlle Amal GASSARA / M. Tarek CHAARI

Anne universitaire: 2014-2015

Plan
Introduction aux systmes distribus

Pr-requis pour la programmation distribue


Les flux en Java
Outils pour la programmation distribue
Les sockets en Java

Introduction aux systmes distribus

Dfinition dun systme distribu


Dfinition [Tanenbaum]: Un ensemble dordinateurs indpendants qui
apparat un utilisateur comme un systme unique et cohrent.
Dfinition (pour ce cours) Un systme distribu est un ensemble dentits
autonomes de calcul (ordinateurs, PDA, processeurs, etc.) interconnectes
et qui peuvent communiquer.
Les diffrents lments du systme ne fonctionnent pas indpendamment
mais collaborent une ou plusieurs tches communes.
Les lments ont des fonctions de traitement, de stockage.

Pourquoi des systmes distribus


Besoin de communication et de partage dinformation

Partage de ressources (programmes, donnes, services)


Travail collaboratif

Puissance de calcul : aucune machine centralise peut raliser


Aspects conomiques: (rapport prix/performance) plusieurs processeurs
bas prix

Exemples des systmes distribus


WEB
Systme de fichiers distribu
Accs aux fichiers de l'utilisateur quelque soit la machine utilise
Machines du dpartement informatique
Clients : infXXX
Un serveur de fichiers
Physiquement : fichiers se trouvent uniquement sur le serveur
Virtuellement : accs ces fichiers partir de n'importe quelle
machine cliente en faisant croire que ces fichiers sont stocks
localement

Exemples des systmes distribus


Super calcul distribu: Calculs scientifiques

Plusieurs architectures matrielles gnralement utilises


Cluster: Ensemble de machines identiques, localises, organises en
grappe et relies entre elles par un rseau ddi et trs rapide
Grille: Ensemble de machines htrognes (ordinateurs, serveurs,..)
connectes dans un rseau local ou bien encore par Internet

Principe gnral
Un serveur distribue des calculs aux machines clients
Un client excute son calcul puis renvoie le rsultat au serveur

Avantage: Utilisation d'un maximum de ressources de calcul

Objectifs des systmes distribus


Transparence:
L'utilisateur ne connat pas o sont situes les ressources.
Lutilisateur ne se soucie pas du format de reprsentation des donnes et
comment il accde au ressources.
Mise l chelle (scalability): fonctionne efficacement dans diffrentes
chelles
Un systme est scalable sil reste performant lors dune augmentation
importante du nombre dutilisateurs et de ressources grs
Fiabilit :
Disponibilit
Scurit

Architecture des applications distribues


Deux architectures des applications distribues: client/serveur et pair--pair (P2P)

Architecture client/serveur
Le client demande lexcution dun service ; le serveur ralise le service
Modle Client/Serveur : Communication par messages
Requte : paramtres dappel, spcification du service requis
Rponse : rsultats, indicateur ventuel dexcution ou derreur

Architecture des applications distribues


Architecture pair--pair

Principe : Dcentraliser les services fournis par un serveur.

Sans contrle centralis


Symtrie fonctionnelle des nuds

10

Pr-requis pour la programmation distribue


Les Flux en java

11

Notion de flux
Un programme a souvent besoin d'changer des informations, que ce soit
pour recevoir des donnes d'une source ou pour envoyer des donnes vers un
destinataire.
- Lecture du clavier
- Affichage sur la console
- Lecture/Ecriture dans un fichier
- Echange de donnes rseaux avec les Sockets
Les changes de donnes sont gres en java par les flux (streams en anglais)

12

Notion de flux
Un flux est une srie d'informations envoy sur un canal de communication.
Lordre dans lequel linformation est transmise est respect.

Un flux peut tre :


- flux dentre (input stream): donnes vers le programme
- flux de sortie (output stream): donnes issues du programme
Il existe 3 flux standards:
- Flux de sortie vers lcran pour indiquer une information standard: System.out
System.out.println("voici le texte afficher");

- Flux de sortie vers lcran pour indiquer une information derreur: System.err
- Flux dentre partir du clavier : System.in
13

Notion de flux
Exemple de lecture du clavier :
import java.io.IOException;
public class Lecture {
public static void main(String[] args) throws IOException{
System.out.println("Entrez un entier");
int n= System.in.read();
System.out.println("Vous avez saisi:" +n);
//affichage du code ASCII
}
}

14

Notion de flux
Il existe des flux de bas niveau et des flux de haut niveau :
- Les flux doctets: Ils transportent des donnes sous forme d'octets.
Les flux de ce type sont capables de traiter toutes les donnes.

- Les flux dcors: Ils transportent des donnes sous forme de type
primitifs, caractres, objets.

15

Les flux doctets


Les classes qui grent les flux d'octets hritent d'une des deux classes
abstraites InputStream ou OutputStream.
La classe InputStream : Un InputStream est un flux de lecture doctets
Il existe de nombreuses sous-classes pour traiter les flux d'octets:

La hirarchie des flux doctets


en entre

16

Les flux doctets


Les mthodes principales qui peuvent tre utilises sur un InputStream sont :
int read() : envoie la valeur de l'octet lu ou -1 si la fin du flux est atteinte.
int read(byte[] b) : remplit un tableau doctets et retourne le nombre doctets
lus.
int read(byte[] b, int off, int len): remplit un tableau doctets partir dune
position donne (off) et sur une longueur donne (len). Elle renvoie le
nombre d'octets lus ou -1 si aucun octet n'a t lu.
int available() : retourne une estimation du nombre d'octets qu'il est encore
possible de lire dans le flux.
void close() : ferme le flux et libre les ressources qui lui taient associes.
En effet, un flux ouvert consomme des ressources du SE qui sont en nombre
limit.

17

Les flux doctets


La classe OutputStream : Un OutputStream est un flux dcriture doctets

La hirarchie des flux doctets


en sortie

Les mthodes principales qui peuvent tre utilises sur un OutputStream sont :
abstract void write (int n) : crit loctet pass en paramtre.
void write (byte[] b) : crit les octets lus depuis un tableau doctets.
void write (byte[] b, int off, int len) : crit les octets lus depuis un tableau
doctets partir dune position donne (off) et sur une longueur donne (len).
void close() : ferme le flux.
18

Les flux doctets avec un fichier


Les classes FileInputStream et FileOutputStream permettent de grer des flux
d'octets avec des fichiers.

Les flux doctets en lecture sur un fichier :


Il faut instancier un objet de la classe FileInputStream.
Constructeur : FileInputStream(String)
Ouvre un flux en lecture sur le fichier dont le nom est donn en paramtre
FileInputStream in= new FileInputStream("monfichier.dat");
int octet = 0;
while (octet != -1 ) {
octet = in.read();
}

19

Les flux doctets avec un fichier


Les flux doctets en criture sur un fichier :
Il faut instancier un objet de la classe FileOutputStream.
Constructeur : FileOutputStream(String)
Si le fichier prcis n'existe pas, il sera cr. Sil existe et qu'il contient des
donnes, celles-ci seront crases
FileOutputStream out= new FileOutputStream("monfichier.dat");
int x=54;
out.write(x);

Exercice:
Ecrire une classe Copy qui ralise la copie dun fichier dans un autre.

20

La dcoration de flux
La dcoration est l'art de traiter une srie d'octets avant de les transmettre
l'application demandeuse.
Il existe 4 familles de dcorations
- Data : permet de convertir les bytes en structure primitive (long,
boolean, double...)
- Character : permet de convertir les bytes en texte
- Object : permet de convertir les bytes en structure objet
- Service : buffer, gzip permet d'appliquer des fonctions spcifiques sur
la lecture

21

Les flux des donnes


Le dcorateur de flux Data permet de traiter les octets sous forme de type
primitive (long, boolean, double...)
DataInputStream: permet de lire directement des types primitifs grce des
mthodes comme readDouble(), readInt()
DataOutputStream: permet dcrire le contenu d'lments de types primitifs
dans le flux grce des mthodes comme writeDouble(), writeInt().
Instanciation de dcorateur:
DataInputStream dis=new DataInputStream((new FileInputStream(fich.dat));

22

Les flux des donnes


Cet exemple permet de lire et d'crire des types primitifs sur des flux:
FileInputStream fis = new FileInputStream("source.txt");
DataInputStream dis = new DataInputStream(fis);
int i = dis.readInt();
double d = dis.readDouble();
String s = dis.readLine();
FileOutputStream fos = new FileOutputStream("cible.txt");
DataOutputStream dos = new DataOutputStream(fos);
dos.writeInt(123);
dos.writeDouble(123.456);
dos.writeChars("Une chaine");
23

Les flux de caractres


Les InputStream et OutputStream se basent sur la lecture et lcriture
doctets (bytes)
Les flux de caractres utilisent le codage de caractres Unicode (un
caractre est cod sur 2 octets)
Utilisation des deux classes Reader et Writer la place de InputStream et
OutputStream
Ecriture facile des caractres UNICODE (avec accents par exemple)

24

Les flux de caractres


Flux de caractres par le clavier:
InputStreamReader in = new InputStreamReader(System.in);

Flux de caractres partir dun fichier:


FileInputStream fis=new FileInputStream("monFich.txt");
InputStreamReader in = new InputStreamReader(fis);

//ou en condens:
InputStreamReader in = new InputStreamReader(new
FileInputStream("monFichier.txt"));

25

Les flux de caractres


Pour lire des caractres sous forme texte, on peut utiliser un tampon
La mise en tampon des donnes lues permet de traiter un ensemble de
caractres reprsentant une ligne plutt que de traiter les donnes caractres
par caractres.
BufferedReader: permet d'avoir un tampon disposition dans la lecture du
flux. En gros, les donnes vont tout d'abord remplir le tampon, puis, le
programme accde aux donnes.
BufferedReader br= new BufferedReader(in);
String line= br.readLine();

26

Les flux de caractres


Flux de caractres en sortie vers un fichier:
FileOutputStream fos=new FileOutputStream("monFich.txt");
OutputStreamWriter out = new OutputStreamWriter(fos);

//ou en condens:
OutputStreamWriter out= new OutputStreamWriter(new
FileOutputStream ("monFich.txt"));

27

Les flux de caractres


Pour crire des chaines de caractres sous forme texte, on utilise la classe
PrintWriter
PrintWriter: possde toutes les oprations print classiques: print() et
println()
PrintWriter pw=new PrintWriter(out);
pw.println("texte crire");

Pour lire et crire directement des caractres unicode dans un fichier, il est
conseill dutiliser FileReader et FileWriter la place de FileInputStream et
FileOutputStream

28

Les flux dobjets


La srialisation est le processus de transformation dun objet dans un flux
doctets et la dsrialisation est le processus inverse.
La srialisation est un procd introduit dans JDK qui permet de rendre un
objet persistant pour stockage ou change. En effet, cet objet est mis sous une
forme sous laquelle il pourra tre reconstitu lidentique.
En java, la classe ObjectOutputStream permet la srialisation dun objet. Elle
propose la mthode writeObject() pour crire le rsultat de srialisation.
La classe ObjectInputStream propose la mthode readObject() pour crire le
rsultat de srialisation.
La classe de lobjet quon veut srialiser doit implmenter linterface
java.io.Serializable. Tous les attributs doivent tre srialiss (si le type dun
attribut est un objet, sa classe doit implmenter linterface java.io.Serializable).

29

Les flux dobjets


Exemple de srialisation dun objet dans un fichier:
Date d= new Date("10/10/2014");
FileOutputStream fos= new FileOutputStream("fich.ser");
ObjectOutputStream os= new ObjectOutputStream(fos);
Os.writeObject(d);

Exemple de dsrialisation dun objet partir dun fichier:


FileInputStream fis= new FileInputStream("fich.ser");
ObjectInputStream is= new ObjectInputStream(fis);
Date d=(Date)is.readObject();

Exercice:
1. Ecrire une classe WriteLog qui permet dcrire des logs. Chaque log
reprsente une ligne dans un fichier. Utiliser une classe Log ayant pour
attributs: la date dcriture, lidentifiant de lcrivain et son commentaire.
2. Ecrire une classe ScanLog qui permet de lire les logs enregistrs.
30

You might also like