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