EXAMEN
Corrigé
Matière
:
Systèmes
d’Exploitation
Session
:
principale
Classe
:
2ème
Année
Génie
Electrique
Semestre
:
2
Enseignante
:
Meriem
Kassar
Ben
Jemaa
Date
:
27
Mai
2011
Documents
:
feuille
format
A4
autorisée
Durée
:
1
h
30
Questions
Générales
(6
points)
Question
1
:
Parmi
les
propositions
suivantes
lesquelles
correspondent
aux
fonctionnalités
d’un
système
d’exploitation
?
O
résoudre
les
problèmes
des
utilisateurs.
O
masquer
des
éléments
fastidieux
liés
au
matériel.
O
gérer
les
ressources
telles
que
les
processeurs,
la
mémoire
ou
les
disques.
O
faire
appel
à
des
instructions
de
déplacement
de
données
et
de
calculs.
O
fournir
des
mécanismes
de
synchronisation
entre
les
programmes.
O
fournir
la
base
de
développement
et
d’exécution
des
programmes
d'application.
Question
2
:
Parmi
les
propositions
suivantes
lesquelles
correspondent
aux
tâches
d’un
noyau
Unix
?
O
L’initialisation
du
système.
O
L’établissement
d’une
interface
entre
l’utilisateur
et
le
matériel.
O
La
gestion
des
processus.
O
La
gestion
des
fichiers.
O
La
gestion
des
entrées/sorties.
Question
3
:
Parmi
les
propositions
suivantes
lesquelles
correspondent
à
un
élément
du
contexte
d'exécution
d'un
processus
?
O
le
système
de
fichiers
O
le
compteur
ordinal
O
l'horloge
O
le
flux
d'entrée
standard
O
le
flux
de
sortie
d'erreurs
O
le
réseau
O
le
flux
de
sortie
standard
Question
4
:
Dessinez
le
diagramme
représentant
les
différents
états
possibles
d’un
processus
(et
les
transitions
entre
états)
depuis
sa
création
jusqu’à
sa
terminaison.
Chapitre
3,
page
11
Dessinez l’automate représentant les différents états possibles d’un processus (et les transitions entre états) depuis sa
création jusqu’à sa terminaison. Votre réponse devra mettre en évidence l’état dans lequel se trouve un processus lors
de sa création.
Ecole
Nationale
d’Ingénieurs
de
Tunis
Solution:
Transparent 98.
PRET
«!déblocage!» (eg.,
Élection
fin d"entrée/sortie)
ELU BLOQUE
2
Ecole
Nationale
d’Ingénieurs
de
Tunis
O
Cette
commande
crée
un
fichier
de
nom
fic
contenant
la
somme
du
nombre
de
lignes
des
fichiers,
du
répertoire
courant,
dont
le
nom
ne
commence
pas
par
D
et
se
termine
par
doc.
O
Cette
commande
provoque
une
erreur
à
l'exécution.
O
Cette
commande
crée
toujours
un
fichier
vide
de
nom
fic.
Question
9
:
Donner
la
commande
permettant
de
trouver
la
liste
des
fichiers
d’extension
.h
situés
sous
le
répertoire
/usr/include.
find /usr/include –name “*.h”
Donner
la
commande
qui
permet
d’afficher
les
3
dernières
lignes
de
la
liste
des
fichiers
définie
précédemment.
find /usr/include –name “*.h” | tail –n 3
Question
10
:
Donner
la
commande
permettant
d’afficher
la
chaîne
suivante
:
Examen de Systèmes d’exploitation “Durée : 1H30”
echo “Examen de Systèmes d’exploitation \“Durée : 1H30\””
Question
11
:
Donner
la
commande
permettant
de
copier
la
date
courante
à
la
suite
du
contenu
d’un
fichier
non
vide
nommé
info
du
répertoire
courant.
date >> info
Question
12
: Donner
la
commande
permettant
d’exécuter
la
commande
cat login.txt
à
partir
du
répertoire
de
connexion
(de
login
ou
d’accueil)
d’un
utilisateur
nommé
2age
et
faire
en
sorte
que
la
sortie
standard
et
la
sortie
erreur
soient
écrites
dans
un
nouveau
fichier
nommé
Resultat.
Prompt$ cd
/home/2age $ cat login.txt > Resultat 2>&1
Parallélisme
&
Synchronisation
(4
points)
Soient
les
scripts
ecriture.sh
et
lecture.sh
suivants
:
#!/bin/bash #!/bin/bash
# ecriture.sh # lecture.sh
if [ $# -lt 2 ] if [ $# -ne 1 ]
then then
echo "erreur ecriture" echo "erreur lecture"
exit 1 exit 1
else else
FILE=$1 FILE=$1
shift cat $FILE
echo "$@" > $FILE fi
fi
Expliquez
en
2
lignes
pourquoi
à
la
fin
de
l'exécution
suivante
le
fichier
fic1
peut
ne
pas
exister.
Prompt$ ./lecture.sh fic1 & ./ecriture.sh fic1 message
Le
problème
est
qu’un
processus
lit
dans
un
fichier
et
l’autre
écrit
dans
ce
même
fichier.
Il
faut
que
le
processus
lecture.sh
prenne
la
main
et
fait
sa
lecture
après
que
le
processus
ecriture.sh
ait
écrit
dans
le
fichier
fic1.
Donc
il
faudra
signaler
la
disponibilité
de
la
donnée.
3
Ecole
Nationale
d’Ingénieurs
de
Tunis
Modifiez
les
scripts
de
manière
à
ce
que
lecture.sh
ne
puisse
exécuter
l'instruction
cat
$FILE
qu'après
l'exécution
de
l'instruction
echo "$@" > $FILE
du
script
ecriture.sh.
#!/bin/bash #!/bin/bash
# ecriture.sh # lecture.sh
if [ $# -lt 2 ] if [ $# -ne 1 ]
then then
echo "erreur ecriture" echo "erreur lecture"
exit 1 exit 1
else else
FILE=$1 FILE=$1
SYNC=$1.sync SYNC=$1.sync
shift while [ ! -f $SYNC ]
echo "$@" > $FILE do
echo > $SYNC sleep 1
fi done
cat $FILE
rm $SYNC
fi
Communication
Inter‐processus
(4
points)
Soient
les
3
scripts
suivants
:
#!/bin/bash #!/bin/bash #!/bin/bash
# script1.sh # script2.sh # script3.sh
4
done ./script3.sh
fi
echo Script2 : $i
Ecole
Nationale
d’Ingénieurs
de
Tunis
Donnez
l’affichage produit par la commande ./script1.sh 1 2. Expliquez ce que vous obtenez.
Solution:
Script3 : 2
Script3
:
2
Script2 : 1
Script2
:
1
Script1 : 1
Script1
:
1
Script3 : 4
Script3
:
4
Script3 : 6
Script3
:
6
Script2 : 3
Script2
:
3
Script1 : 2
Script1
:
2
script1.sh
i=1
script2.sh
i=1
script3.sh
i=1
i=2
echo Script3 : 2
echo Script2 : 1
echo Script1 : 1
i=2
script2.sh
i=2
script3.sh
i=2
i=4
echo Script3 : 4
i=3
script3.sh
i=3
i=6
echo Script3 : 6
echo Script2 : 3
echo Script1 : 2
Shell
(6
points)
3
On
souhaite
écrire
un
script
remplace.sh
qui
reçoit
en
paramètre
deux
noms
de
fichiers
(fic1
et
fic2)
et
une
liste
de
répertoires.
Le
fichier
fic1
doit
être
un
fichier
du
répertoire
courant.
Après
l'exécution
du
script,
tout
fichier
fic2
se
trouvant
dans
un
des
répertoires
passés
en
paramètre
doit
avoir
son
contenu
remplacé
par
celui
de
fic1.
Ecrivez
le
script
remplace.sh
correspondant
exactement
à
l'algorithme
suivant.
Tester le nombre de paramètres,
s'il n'est pas correct afficher un message d'erreur et terminer le script.
Début boucle
La boucle doit permettre, à chaque nouveau tour, de récupérer le
paramètre suivant
5
Ecole
Nationale
d’Ingénieurs
de
Tunis
Si l'élément est un répertoire
Si fic2 est un fichier du répertoire remplacer son contenu
par celui de fic1
(Attention : fic2 ne doit pas changer de nom)
Fin Si
Sinon
Afficher que l'élément n'est pas un répertoire
Fin si
Fin boucle
#! /bin/sh
set -x
if [ $# -lt 3 ] ; then
echo Il faut au moins trois parametres
exit 1
fi
fic1=$1
fic2=$2
shift 2
if [ ! -f "$fic1" ] ; then
echo Le deuxieme parametre doit etre un fichier du repertoire
courant
exit 1
fi
for rep in "$@" ; do
if [ -d "$rep" ] ; then
if [ -f "$rep/$fic2" ] ; then
cat "$fic1" > "$rep/$fic2"
fi
else
echo $rep n\'est pas un repertoire
fi
done