1 Shell UNIX (4 points) 2 Questions de cours (4 points)
Transcription
1 Shell UNIX (4 points) 2 Questions de cours (4 points)
Université Pierre Mendès France U.F.R. Sciences de l’Homme et de la Société Master IC2A DCISS – AST 6 janvier 2010 UE Systèmes et Réseaux Examen de Systèmes Durée : 1h30 Documents autorisés Si vous avez un doute sur la syntaxe d'une commande où sur le caractère qui remplit un certain rôle dans le langage de commande, utilisez votre propre syntaxe, ou un autre caractère, mais ajoutez un commentaire explicatif. 1 Shell UNIX (4 points) Analyser la session suivante : $ echo $PATH /usr/bin:/usr/local/bin $ ls -l total 24 -rw-rw-r-- 1 toto dciss 4209 oct 10 16:03 outils.java -rw-rw-r-- 1 toto dciss 2121 oct 10 15:58 outils.class -rw-r----- 1 toto dciss 1590 oct 13 10:05 prog.c -rw-r----- 1 toto dciss 346 nov 8 2009 Makefile -rwxr-xr-- 1 toto dciss 147 oct 10 16:15 testprog $ testprog bash: testprog: not found a) Quelle est la cause du message d’erreur ? Proposer une méthode permettant de lancer testprog. b) Quel(s) utilisateur(s) peuvent modifier les fichiers outils.java et prog.c ? c) Quels utilisateurs peuvent : Lire le fichier testprog ? Modifier le fichier testprog ? Exécuter le fichier testprog ? d) Quelle(s) commande(s) faut-il faire pour que seul toto puisse avoir accès aux fichiers outils.java et outils.class ? 2 Questions de cours (4 points) 2.1 – Algorithme du tourniquet Dans un algorithme de type tourniquet, quels sont les inconvénients et les avantages d’un quantum court ? Examen Système Master IC²A – DCISS et AST Page 1 sur 3 2.2 - Gestion des processus Pour chacune des transitions suivantes entre les états possibles d’un processus, indiquez si la transition est possible. Si c’est le cas, donnez un exemple d’un élément qui pourrait en être à l’origine, si la transition n’est pas possible, dites pourquoi. a) en cours d’exécution (actif) → prêt b) en cours d’exécution (actif) → bloqué c) prêt → terminé d) bloqué → en cours d’exécution (actif) e) bloqué → terminé f) prêt → en cours d’exécution (actif) 3 Scripts Shell Windows (7 points) 3.1 - On considère le fichier de commande suivant nommé faire.bat : @echo off if "%1"=="" goto noparam if "%1"=="/?" goto usage if "%2"=="" goto usage set r=%1 set d=%2 pushd %r% FOR %%A in (*.*) DO type %%A>..\%d%\%%A popd goto fin :noparam echo Aucun parametre ! :usage echo format de la commande : faire repsource repdest goto fini :fin echo c est fini :fini Cette commande a deux paramètres qui sont des répertoires. a) Indiquez ce qu’affiche la commande faire b) Indiquez ce qu’affiche la commande faire r1 c) Indiquez ce qu’affiche la commande faire r1 r2 d) Indiquez précisément ce que fait la commande faire r1 r2 3.2 - Ecriture d’un script Windows Ecrire le fichier de commande RECUP.BAT, permettant de copier des fichiers passés en paramètres, de la racine d’une clé USB vers un répertoire donné : La commande RECUP.BAT est appelée de la manière suivante : RECUP K: C:\Documents\photos img001.jpg img003.jpg img004.jpg - le premier paramètre K: représente la lettre associée à la clé usb ; - le second paramètre est le répertoire destination dans lequel doivent être copiés les fichiers; - les autres paramètres, d’un nombre variable, sont les fichiers à copier, s’ils existent sur la racine de la clé usb. L’exemple ci-dessus correspond à la copie des fichiers img001.jpg img003.jpg img004.jpg du répertoire K:\ vers le répertoire C:\Documents\photos Examen Système Master IC²A – DCISS et AST Page 2 sur 3 La commande proposera une aide d’usage de la commande si le premier paramètre est /? Si le répertoire destination n’existe pas, on crée ce répertoire. La commande affichera un message d’erreur dans les cas suivants : - moins de 3 paramètres, - la création du répertoire destination (si le cas se présente) a échoué, - un fichier à copier n’existe pas dans le répertoire racine de la clé usb : un message d’erreur par fichier manquant, - si une copie de fichier ne s’est pas déroulée correctement. 4 Processus Unix (5 points) Soit le programme C / Unix suivant : #include <stdlib.h> /* Pour exit */ #include <unistd.h> /* Pour fork, getpid, getppid, sleep */ #include <sys/types.h> /* Pour pid_t (fork, getpid, getppid) */ int main(void) { pid_t id1; pid_t id2; id1 = fork(); if (id1 == -1) { perror("fork"); return EXIT_FAILURE; } printf("Bonjour!\n"); if (id1 == 0) { sleep(2); printf("Ca va toi ?\n"); } else { sleep(1); printf("Et toi ?\n"); } id2 = fork(); if (id2 == -1) { perror("fork"); return EXIT_FAILURE; } printf("Pas mal, je suis %i\n",getpid()); return EXIT_SUCCESS; } On suppose que fork() ne renvoie jamais -1. a) Combien de processus sont créés par ce programme ? b) Faire la trace d'exécution de ce programme : écrire ce qu'il va afficher sur l'écran, dans le bon ordre, en justifiant votre réponse. Pour cela, on suppose que le processus qui exécute ce programme (le père) porte le numéro 1000 et que les processus créés prendront les numéros suivants (1001, 1002, …). c) Il y a plusieurs traces d’exécution différentes possibles. Pourquoi ? Examen Système Master IC²A – DCISS et AST Page 3 sur 3