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