Accueil M.A.S.I.

Cours de Systèmes d'Exploitation

Licence MIAGE


Université d'Evry Val d'Essonne

Questions pour le projet 2010-2001 : Copie de fichiers en parralèle avec reprise si interruption

ATTENTION : Ce ne sont juste que des questions, pas des impératifs. Vous n'êtes pas obligés de répondre dans la programmation à ces nouvelles demandes.
Il suffit que votre projet soit cohérent, avant tout, complet dans les fonctionnalités qu'il propose.

Voici les QUESTIONS destinées à vous faire réfléchir :
Pour chaque réponse, que vous devez me fournir, donnez aussi le temps nécessaire à réaliser la demande.
Le client ou bien la personne qui cautionne (financièrement) le projet a besoin de savoir.

- Est-ce que les dates de création, modification seront les mêmes pour la copie que pour l'original. Justifier vos choix.

- Lors d'une reprise, si le support (par exemple une clé USB) est absent, que proposez-vous ?

- Prenez-vous en compte le changement de la lettre unité de la clé USB destination ?

- Que faudrait-il prendre en compte, dans votre programme, pour permettre le déplacement et non plus seulement la copie ?

- Lorsque les fichiers existent dans le répertoire cible, avez-vous prévu une option "ok pour all" afin de ne pas monopoliser la présence de l’utilisateur ?

- Lorsque le support de destination est plein, qu'avez prévu comme stratégie ? Il se pourrait que le support destination soit destiné à être vidé au fur et à mesure et à en fait servir de tampon entre 2 PC.

- Si le fichier destination existe mais qu'il est impossible de le supprimer, que faites-vous ?

- Pourquoi à votre avis ce fichier destination existant pourrait-il ne pas être supprimé ou bien modifié dans son contenu?

- Quels messages avez-vous prévu dans ce cas pour informer l’utilisateur du problème ?

- Est-ce que les droits d'accès sont conservés ?

- Comment avez-vous prévu de gérer les notions de propriétaires et de groupe ? (Cf. commande tar)

- Le travail de copie est-il prioritaire ou de priorité de type iddle ? peut-on changer la  priorité ponctuellement ?

- Si un fichier source n'existe plus, que doit faire le programme ?

- Si le programme de copie est  lancé 2 fois, que se passe-t-il ?

- Lorsque vous avez besoin de trouvez des solutions à vos question de programmation que faites-vous ? Quelles sont les sources d'informations que vous comptez utiliser ?

- Lors d'une copie d'un même fichier relancée plusieurs fois, quel message d'information et quel conseil pouvez-vous donner ?

- Lorsque le fichier destination existe quelles informations comptez-vous donner afin que l'utilisateur puisse prendre une décision et et quelles décisions proposez-vous ?

- Quelles questions vous vous êtes posés (pour lesquelles vous avez une réponse ou non ) manquent à cette liste ?




Documents Généraux (compléments au cours):

Introduction à UNIX

Introduction à MS-DOS

Support de cours

Systèmes d'exploitation

Les Processus

Ordonnancement de l'Unité de Traitement

Gestion de la Mémoire Centrale (MC et MS)

Les Disques (document à paraître)

Pour vérifier les programmes chargés en mémoire, il faut utiliser la commande MEMMAP.EXE fournie dan le fichier TPE.ZIP.

Ne pas utiliser la commande TURBO : Cet environnement de programmation permet lemise au point mais détourne les interruptions.
Il est donc impossible de tester les routines de traitement des interruptions proposées dans les programmes.

Les programmes des TD sont le fichier TD_SE.zip.

N.B. La commande RUNTIME.EXE permet de connaître les messages d'erreur d'exécution. On peut aussi utiliser l'environnement TURBO.EXE.

TD - Interruptions sous UNIX  et Gestion des Processus en C

- Lancer la commande "sleep 2000" en arrière-plan (&)

- Lancer la commande "sleep 1000" en arrière-plan (&)

- Visualiser les processus en arrière-plan (background) avec la commande jobs.

- Visualiser tous les processus en cours avec la commande ps.

 

- Ramener la commande "sleep 2000" en avant-plan (foreground) avec la commande fg (fg %1).

- La remettre en arrière-plan (CTRL+Z)  et vérifier avec la commande jobs.

 

- Lancer la commande "sleep 3000 en arrière-plan.

- Ramener la commande sleep 1000 en avant-plan et l'interrompre par CTRL+C.

- Stopper le processus "sleep 2000" à l'aide de la commande kill.

 

Tester différents signaux (Cf. kill -l) sur uen commande "sleep xxxx".

 

- Récupérer les programmes PS_EXEC.CPS_FORK.C qui ont été préparés sous Windows.

 

- Compiler avec la commande make (faire attention aux extensions C et C++)

- Expliquer le fonctionnement de ces programmes.

 

[TD]# ls -l

-rw-r--r-- 1 root root 523 oct 11 10:03 PS_EXEC.C

-rw-r--r-- 1 root root 1203 oct 11 10:03 PS_FORK.C

-rw-r--r-- 1 root root 550 oct 11 10:03 PS_SIG1.C

-rw-r--r-- 1 root root 759 oct 11 10:03 PS_SIG2.C

-rw-r--r-- 1 root root 1556 oct 11 10:03 PS_SIG3.C

 

[TD]# make PS_EXEC

g++ PS_EXEC.C -o PS_EXEC

PS_EXEC.C:12: " argc " n'a pas été déclaré dans cet horizon

PS_EXEC.C:12: " argv " n'a pas été déclaré dans cet horizon

PS_EXEC.C:13: ISO C++ interdit la déclaration de " main " sans type

PS_EXEC.C:13: liste d'initaliseurs a été traité comme une expression

composée

PS_EXEC.C:13: erreur de syntaxes avant " int "

PS_EXEC.C:14: erreur d'analyse syntaxique avantle jeton " { "

PS_EXEC.C:16: ISO C++ interdit la déclaration de " printf " sans type

PS_EXEC.C:16: " printf " redéclaré comme une sorte différente de symbole

/usr/include/stdio.h:300: déclaration précédente de "int printf(const

char*, ...)"

PS_EXEC.C:16: conversion invalide de " const char* " vers " int "

PS_EXEC.C:17: " getpid " n'a pas été déclaré dans cet horizon

PS_EXEC.C:17: ISO C++ interdit la déclaration de " printf " sans type

PS_EXEC.C:17: redefinition of `int printf'

PS_EXEC.C:16: "int printf" précédemment défini ici

PS_EXEC.C:17: liste d'initaliseurs a été traité comme une expression

composée

PS_EXEC.C:18: " argc " n'a pas été déclaré dans cet horizon

PS_EXEC.C:18: ISO C++ interdit la déclaration de " printf " sans type

PS_EXEC.C:18: redefinition of `int printf'

PS_EXEC.C:17: "int printf" précédemment défini ici

PS_EXEC.C:18: liste d'initaliseurs a été traité comme une expression

composée

PS_EXEC.C:21: erreur d'analyse syntaxique avant " for "

PS_EXEC.C:21: " argc " n'a pas été déclaré dans cet horizon

PS_EXEC.C:21: erreur d'analyse syntaxique avantle jeton " ; "

PS_EXEC.C:21: erreur de syntaxes avantle jeton " ++ "

PS_EXEC.C:25: ISO C++ interdit la déclaration de " printf " sans type

PS_EXEC.C:25: redefinition of `int printf'

PS_EXEC.C:18: "int printf" précédemment défini ici

PS_EXEC.C:25: conversion invalide de " const char* " vers " int "

PS_EXEC.C:26: ISO C++ interdit la déclaration de " exit " sans type

PS_EXEC.C:27: erreur d'analyse syntaxique avantle jeton " } "

make: *** [PS_EXEC] Erreur 1

 

[TD]# mv PS_EXEC.C ps_exec.c

[TD]# mv PS_FORK.C ps_fork.c

 

[TD]# make ps_exec

cc ps_exec.c -o ps_exec

[TD]# ./ps_exec a b c

ps_exec> Debut execution

ps_exec> Numero PID = 10960

ps_exec> Nb arguments = 4

ps_exec> argv[ 0 ] = ./PS_EXEC

ps_exec> argv[ 1 ] = a

ps_exec> argv[ 2 ] = b

ps_exec> argv[ 3 ] = c

 

[TD]# make ps_fork

cc ps_fork.c -o ps_fork

 

[TD]# ./ps_fork

ps_fork > Debut execution : pid = 10978

ps_fork > Code execute par les 2 ! mais : getpid() = 10978

PS_FORK(p)> Valeur retournee par le fork = 10979

ps_fork > Code execute par les 2 ! mais : getpid() = 10979

ps_fork(f)> Valeur retournee par le fork = 0

ps_fork(f)> PID( avant exec ) = 10979

ps_exec> Debut execution

ps_exec> Numero PID = 10979

ps_exec> Nb arguments = 1

ps_exec> argv[ 0 ] = liste des arguments

PS_FORK(p)> PID du fils se terminant = 10979

ps_fork > Fin Processus : 10978

TD - Interruptions sous MS-DOS

SE_BREAK.PASSE_CLICK.PASSE_ITIME.PASSE_HALT.PAS

Les programmes utilisant les interruptions, il faut compiler avec TPC.EXE puis lancer la commander hors environnement TURBO-P.

TD - Gestion des signaux (interruptions) dans les programmes C

- Récupérer les programmes  PS_SIG1.C, PS_SIG2.C, PS_SIG3.C qui ont été préparés sous Windows.

 

- Chercher les numéros de signaux 

1) avec kill -l,

2) dans /usr/include (man signal)

- Compiler avec la commande make (faire attention aux extensions C et C++)

 

- Expliquer le fonctionnement de ces programmes

 

Manuel de wait sous UBUNTU

TD - Gestion des Sémaphores en langage C

Les sémaphores :  sema1.c, sema2.c

et préparation du projet (recherche su Internet de technologies)

TD - Allocation Mémoire en Turbo-Pascal  / MS-DOS (ou en langage C...)

SE_AVAIL.PAS, SE_DIR.pas, SE_DIRT.pas

et préparation du projet

TD - Entrées / Sorties en Turbo-Pascal

CP_CHAR.pas, CP_TEXT.pas, CP_BLOC.pas, CP_BNCH.exe

TD  - Client Serveur 

Les exemples proviennent de http://cui.unige.ch/java/exemples (2006)

Application Serveur

- Serveur.java

- Connexion.java

Application Client

- Client.java

Tester  ces programmes entre 2 machines ayant si possible des systèmes d'exploitation différents : Linux et  Windows par exemple.

On pourra obtenir l'adresse locale (Nom de la Machine / numéro IP) par programmation java.

try {

InetAddress adresse = InetAddress.getLocalHost();

System.out.println("Adresse IP locale : " + adresse);

} catch ( Exception e ) {

System.err.println( e.getMessage() );

}

Sous Windows, utiliser  la commande ipconfig.exe  sous l'interpréteur de commandes cmd.exe

Sous Windows, voir aussi procexp.exe pour la gestion des processus.

Sous Linux et sous Windows essayer la commande ping pour tester la présence dans le réseau de la machine où se trouve le serveur. 

 

TD  - Télé discussion sur Internet

Les exemples proviennent de http://cui.unige.ch/java/exemples (2006)

Application Serveur

- ServeurTD.java

- ConnexionTD.java

- Nettoyeur.java

Application Client

- AppliClient.java

- Ecouteur.java

Sous Windows, visualiser l'activité UDP et TCP avec TcpView.exe.

 TD  - MPI

Installation sous Window

mpich2-1.1.1p1.tar.gz

TD-MPI.zip

Liens JAVA

http://cui.unige.ch/~billard/systemeII/cours15.html - SE RPC

http://www.club-java.com

http://www.cs.technion.ac.il/~cs236370/recitations/java2.html

http://www.doc.ic.ac.uk/~jnm/book/index.html
http://www.doc.ic.ac.uk/~jnm/book/book_applets/concurrency.html

http://www.ecs.soton.ac.uk/~dem/teaching/proginjava/s12.html

http://www.isr.umd.edu/~austin/ence489c.d/threads.html

Liens LINUX

http://www.linux-france.org/prj/edu/archinet/systeme/index_monopage.html

 

Projet L3 MIAGE en Apprentissage 2009 / 2010

Que j'aime à faire connaître ce nombre utile aux sages,
Immortel Archimède, artiste, ingénieur,
Qui, de ton jugement, peut priser la valeur
Pour moi, ton problème eut de pareils avantages.


Quelques liens

http://fr.wikipedia.org/wiki/Pi
http://fr.wikipedia.org/wiki/Pi#.C3.80_la_conqu.C3.AAte_des_d.C3.A9cimales
http://fr.wikipedia.org/wiki/Programmation
http://fr.wikipedia.org/wiki/Simon_Plouffe

http://fr.wikipedia.org/wiki/Formule_BBP
http://maths83.free.fr/themes/plouffe.pdf

http://www.nombrepi.com/


Le 31 décembre 2009 :
Fabrice Bellard publie sur son site web personnel son nouveau record du calcul des décimales de π.

Ce record de 2 700 milliards de décimales du nombre π
bat l'ancien record de Daisuke Takahashi (2 577 milliards de décimales). 

Fabrice Bellard a établi ce record avec un ordinateur personnel de moins de 2 000 € !

http://fr.wikipedia.org/wiki/Fabrice_Bellard
http://bellard.org/pi/
http://bellard.org/pi/pi.c


Quelques formules


>>> Machin

Pi := 4*ArcTan(1/5) - ArcTan(1/239);
Pi := Pi*4;

>>> Machin par Takano

Pi := 12*ArcTan(1/49) + 32*ArcTan(1/57) - 5*ArcTan(1/239) + 12*ArcTan(2/110443);
Pi := Pi*4;

>>> Machin par Stormer

Pi := 44*ArcTan(1/57) + 7*ArcTan(1/239) - 12*ArcTan(1/682) + 24*ArcTan(1/12943);
Pi := Pi*4;

>>> BBP originale

For k := 0 to INF do
Pi := Pi + (1/power(16,k))*( (4/(8*k+1))-(2/(8*k+4))-(1/(8*k+5))-(1/(8*k+6)))

>>> Ramajunan

For k := 0 to INF do
Pi := Pi + ((4*Fact(k))*(1103+26390*k))/(power(Fact(k),4)*power(396,4*k));
Pi := Pi * ((2*sqrt(2))/9801);

>>> Chudnovsky

For k := 0 to INF do
Pi := Pi + ( (Power(-1,k)*Fact(6*k)*(13591409+545140134*k)) )
         / ( Fact(3*k)*power(Fact(k),3)*power(640320,(3*k+3)/2));
Pi := Pi * 12;

>>> Bellard

For i := 0 to INF do begin
   i10:= 10*i;
   i4 := 4*i;
   Pi := Pi + ( power(-1,i)/power(2,10*i) *
              (-(32/i4+1)-(1/i4+3)-(256/i10+1)-(64/i10+3)-(4/i10+5)-(4/i10+7)+(1/i10+9)));
end;
Pi := Pi * (1/64);

>>> Archimede

Pi := 223/71;

:-> http://www.delphifr.com/codes/PETIT-PROGRAMME-DELPHI-CALCULER-NOMBRE-PI-AVEC-APPROXIMATION_36464.aspx


Projet L3 MIAGE en Apprentissage 2008 / 2009

Objectif : Réaliser une application communicante utilisant des processus en parallèle. Apprendre à monter un projet informatique, Analyse des besoins client. Proposition de réalisation. Remise d'un état d'avancement  (1ert lot) du projet.

Sujet : Recherche de fichiers selon différents critères. L'élève doit définir une application permettant la recherche en parallèle de fichiers répondant à certains critères : sur le nom du fichier, sur le contenu du fichier, sur tout autre aspect à définir....

Remarque : on doit  pouvoir observer le parallélisme au fur et à mesure du traitement.

Premier travail (à rendre le 26  janvier 2009 !!! )

L'élève devra proposer des critères de recherche intéressants et innovants, expliquer l'intérêt de ces critères et proposer des réalisations possibles permettant leur mise en oeuvre.

Mots clés : minuscules, majuscules, texte, fichier html, binaire, ASCII, UNICODE, client/serveur, thread, ...

Il devra produire une note décrivant les fonctionnalités vues de l'extérieur destinée aux non informaticiens.

Il devra produire une autre note plus technique décrivant les fonctionnalités vues de l'intérieur destinée aux informaticiens. Une spéciale attention sera donnée aux explications permettant la mise en oeuvre du parallélisme.

Il décrira bien entendu l'environnement nécessaire à la mise en exploitation de l'application (systèmes d'exploitation...),  ainsi que l'environnement nécessaire à la programmation (langage de programmation, bibliothèques...) et mise au point de l'application (tests de validité et de non régression... ). Ses choix devront être commentés et argumentés : que ce soit du point de vue du potentiel d'utilisation future que du point de vue des moyens informatiques disponibles pour la réalisation actuelle de l'application.

Il définira un premier lot de fonctionnalités à réaliser en expliquant pourquoi il est intéressant de les réaliser en premier. Ce premier lot devra contenir un maximum de fonctionnalités de technique de recherche parallèle. Des indications précises devront être données quant à la programmation des fonctionnalités retenues pour ce premier lot.

ET bien évidemment avec UNE CONCLUSION !!!   

 

Projet L3 MIAGE en Apprentissage 2007 / 2008

Objectif : Réaliser une application communicante utilisant des processus en parallèle. Apprendre à monter un projet informatique, Analyse des besoins client. Proposition de réalisation. Remise d'un état d'avancement  (1ert lot) du projet.

Sujet : Réalisation d'une commande de copie récursive de fichiers d'un dossier vers un autre.

 

Projet L3 MIAGE en Apprentissage 2005 / 2006

Objectif : Réaliser une application communicante utilisant des processus en parallèle. Apprendre à monter un projet informatique, Analyse des besoins client. Proposition de réalisation. Remise d'un état d'avancement  (1ert lot) du projet.

Sujet : Réalisation d'une page WEB avec un traitement parallèle sur une image.  

Autres infos:

 "Le client final a un traitement compliqué mais ne veut pas donner les sources de son algorithme...."

On prendra donc  prendre des traitements simples que l'on ralentira pour observer le parallélisme:

Traitements sur les pixels : négatif, permutation de deux composantes RVB ( Rouge / Vert, Vert / Bleu.. )

Traitements géométriques : retournement horizontal / vertical ou gauche / droite , rotation ...

Effets de transition entre deux images : les pixels de la deuxième image s'affichent  sur la première.

Effets de déplacement: la seconde image apparaît en se déplaçant, s'agrandissant ....

 

Exemples de pages sans parallélisme ni communication entre animations :

Animation de texte : Effet de Zoom  ( source java )

Animation d'image : Effet de vague   ( voir site http://www.anfyteam.com )

Animation d'image : Effet psychédélique   ( source java )

Animation 3D : Cube avec photos   ( voir site http://www.anfyteam.com )

Si rien ne se passe dans les exemples (après l'ouverture grandissante de la fenêtre), il vous manque peut-être le Runtime Environment J2RE de Java. Utilisez alors les liens suivants:

http://www.univ-bechar.dz/Boutiche/Logiciels.htm

http://java.sun.com/j2se/1.4.2/download.html

Projet pour les redoublants

Objectif : Approfondir  un sujet connexe aux techniques de systèmes d'exploitation : parallélisme, communication, performances, entrées / sorties ...

A rendre au format HTML....dans un fichier archive (exemple ZIP)

Exemples de Sujets:

 

OUTILS Système

http://www.spybot.info/fr/download/

http://www.microsoft.com/technet/sysinternals/default.mspx

http://www.microsoft.com/technet/sysinternals/Processesandthreadsutilities.mspx?wt.svl=featured

 

 

Testez la vitesse de votre connexion Internet avec
http://www.abeltronica.com/PagInstrucoes/fr/index.html

 

Autres Tests ADSL

http://www.alaide.com/outils_testbandepassante.php?con=14&vdown

http://mire.ipadsl.net

http://www.journaldunet.com/vitesse/9803947016/1428/resultat_adsl.shtml

http://www.linternaute.com/vitesse/6999802301/1096/resultat_adsl.shtml

http://www.sos-adsl.com/modules/debit

 

Éligibilité ADSL

http://www.ariase.com/fr/observatoire/vitesse-connexion.html
( Attention : plugin java à installer )

http://www.pcentraide.com/test-connexion.html

 

Liens Université Évry Val d'Essonne

http://informatique.lami.univ-evry.fr/Emploi_du_temps