IUT Nancy-Charlemagne Université de Nancy 2 Syst`eme Automate

Transcription

IUT Nancy-Charlemagne Université de Nancy 2 Syst`eme Automate
I.U.T. Nancy-Charlemagne
Université de Nancy 2
Système Automate Processus – D.U.T. Informatique S3
Mardi 24 octobre 2006
Durée de l’épreuve : 2 heures.
Barème donné à titre indicatif.
Dominique Colnet
Emmanuel Nataf
Denis Roegel
Seules les notes manuscrites prises durant les cours sont autorisées (ni photocopies, ni listing,
ni documents imprimés). Lire complètement le sujet avant de commencer. Il est demandé de faire 3
copies. Indiquez votre nom et votre groupe sur chaque copie.
1
1.1
Copie numéro 1 - (8 points)
Le “.” dans le path. Une bonne idée non ? (2 points)
Avant de répondre aux questions qui suivent, rappelez brièvement à quoi sert la notation "." (un point
seul) utilisée dans une commande. Rappelez également à quoi sert la variable PATH pour le shell (bash ou
csh) lorsque l’on lance une commande.
On peut trouver pratique de mettre le répertoire "." dans sa variable PATH. Expliquez pourquoi cela peut
être pratique. Donnez un exemple d’appel d’une commande avec et sans le "." dans sa variable PATH.
Sachant que vous pouvez aller dans le répertoire d’un autre utilisateur ayant laissé les droits en lecture/exécution avec la séquence suivante :
$ cd ~bond007
$ pwd
/users/etude/deux/bond007
$ ls
filou.c rm ls cp chmod Truand.java echo pwd escroc.h
Pensez vous encore qu’il soit prudent de laisser le "." dans son PATH ? Oui ?, Non ?, seulement au début
du PATH ? seuleument à la fin du PATH ?
Justifiez votre réponse.
1.2
C’est quoi "source" ? Une commande ordinaire ou pas ? (2 points)
Rappel : la commande "cat" affiche un fichier sur "stdout".
$ V=1
$ echo $V
1
$ cat fichier.sh
#!/bin/bash
V=2
$ echo $V
1
$ ./fichier.sh
$ echo $V
1
$ source fichier.sh
$ echo $V
2
1
Est-ce que "source" est une commande ordinaire qu’il est par exemple possible de re-programmer soit
même, en C ou en bash ?
Justifiez votre réponse.
1.3
Fork C (2 points)
Concernant le programme C qui va suivre, indiquez :
1. le nombre total de processus créés,
2. le nombre de "coucou" qui sont affichés sur l’écran.
Voici le programme C en question :
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main (int argc, char* argv[]) {
int pid1 = fork();
int pid2 = fork();
int pid3 = fork();
if ( pid1 > 0 ) printf("coucou\n");
if ( pid2 > 0 ) printf("coucou\n");
if ( pid3 > 0 ) printf("coucou\n");
return 0;
}
1.4
Et si le fils termine avant son père ? (2 points)
Décrire ce qui va se voir de particulier si l’on utilise la commande "top" dans une autre fenêtre lors de
l’éxécution du programme suivant :
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (int argc, char* argv[]) {
int process_counter = 100;
while ( process_counter > 0 ) {
int fork_result = fork();
process_counter--;
if ( fork_result == 0 ) {
// Le fils termine:
exit(0);
}
}
printf("Utilisez la commande \"top\"... puis tapez enter.\n");
{
int juste_pour_attendre_ici = getc(stdin);
}
return 0;
}
2
2.1
Copie numéro 2 - (7 points)
Expressions régulières (2 points)
Sachant que l’on vous rappelle certains aspects de la commande "expr" à l’aide de la session suivante :
2
$
3
$
3
$
2
$
0
$
2
$
0
expr "aaa" : ’a*’
expr "
" : ’ *’
expr "ab" : ’a\+b’
expr "b" : ’a\+b’
expr "11" : ’11$’
expr "11 " : ’11$’
Indiquez ce qui est affiché par le script suivant :
#!/bin/bash
echo "Commande
expr "-019"
echo "Commande
expr " - 0-9 "
echo "Commande
expr " - 123 "
echo "Commande
expr " -1"
2.2
1:"
: ’
2:"
: ’
3:"
: ’
4:"
: ’
*[+-]\? *[0-9]\+ *$’
*[+-]\? *[0-9]\+ *$’
*[+-]\? *[0-9]\+ *$’
*[+-]\? *[0-9]\+ *’
Expression régulière et automate (3 points)
Faire le schéma de l’automate correspondant à l’expression régulière suivante :
’[0-9]*[A-Z]\+54$’
Respectez les conventions de notation des automates vues en cours.
2.3
Codage d’un automate (2 points)
Donner le code C ou le code Java correspondant exactement à l’automate dont voici le schéma :
b
a
S0
S1
S2
c
Pour simplifier, on considère que la chaı̂ne d’entrée n’est pas dans un fichier, mais simplement dans une
chaı̂ne de caractères.
3
3.1
Copie numéro 3 - Questions de cours - (5 points)
Thread Java (2 points)
Sachant que deux threads peuvent partager le même tas (heap) expliquez le rôle du mot clef Java synchronize
lors de la définition d’une méthode. En particulier, indiquez dans quelles conditions un thread peut être
mis en attente.
3
3.2
Simulation guidée par les événements (1 point)
La technique de simulation guidée par les événements (échéancier et événements) présente de nombreux
avantages : changement de contexte rapide et surtout, partage de la mémoire sans risque. Cette technique
de simulation présente néanmoins un inconvénient majeur, quel est-il ? Expliquez ce qui risque de se passer.
3.3
Simulation et liaison dynamique (2 points)
Pour l’implantation d’un simulateur algorithmique guidé par les événements, la liaison dynamique des langages à objets (Java, Eiffel, etc.) est particulièrement utile. Expliquez où et comment on utilise la liaison
dynamique dans un simulateur.
4