Vous êtes sur la page 1sur 6

Ecole
Nationale
d’Ingénieurs
de
Tunis



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

«!blocage!» (eg., entrée/sortie)




Fin solution
Question
5
:
Quelle
est
la
différence
entre
l’ordonnancement
et
la
synchronisation
des
processus
?

La
synchronisation
est
nécessaire
lorsqu'on
veut
que
certaines
instructions
d'un
des
processus

Questions'effectuent
toujours
après
certaines
instructions
d'un
autre
processus.
Elle
permet
d'assurer
un

2 – 4 points
Comment ordre
sur
les
exécutions.


s’appellent :
L’ordonnancement
permet
le
partage
du
processeur
entre
plusieurs
processus.
Après
un
temps

1. leprédéterminé

service système chargé
(ou
 de choisir
lorsqu'une
 le processus
instruction
 auquel le processeur
particulière
 est attribué,
est
 exécutée),
 l'ordonnanceur
 interrompt

2. lel'exécution

mécanisme du
matériel permettant
processus
 actif
au
et
système de “reprendre
en
 choisit
 un
 autre.
la Il
main”
assure
régulièrement ? du
 contexte
 du

la
 substitution

premier
par
celui
du
deuxième.

Solution:

1. ordonnanceur (ou scheduler)
Question
 6
 :
 Qu'est‐ce
 qu'un
 PID
 ?
 Comment
 un
 utilisateur
 peut‐il
 connaître
 la
 valeur
 d'un
 PID
 ?

2. Interruption horloge (transparent 105).
Citez
deux
commandes
pouvant
prendre
un
PID
comme
paramètre.


Fin solution
Le
PID
est
l'identifiant
que
le
système
attribue
à
chaque
processus
lors
de
sa
création.


L'utilisateur
peut
connaître
la
valeur
d'un
PID
en
utilisant
la
commande
ps
(ou
la
variable


Question$$
 dans

3 – 3un
 script
 shell)
 et
 il
 peut
 l'utiliser
 pour
 identifier
 un
 processus
 lors
 de
 l'exécution
 de

points
Donnezcertaines

les lignescommandes.

de commandeLes
 commandes

permettant fg,
 bg

de lancer leet
 kill
 ont

script pour
 effet
 la
 mise

mon_script.sh en
 arrière

se trouvant dansplan,
 la

le répertoire
mise
au
premier
plan
et
l'envoi
d'un
signal
au
processeur.

courant :

Question
 7
 :
 À
 quoi
 sert
 la
 variable
 d’environnement
 PATH
 lors
 de
 l'exécution
 d'une
 commande

1
par
le
système
?



O
Elle
sert
à
identifier
les
répertoires
dans
lesquels
la
commande
à
exécuter
sera
récupérée.

O
Elle
sert
à
identifier
le
chemin
du
répertoire
de
login

O
Elle
sert
à
lister
les
chemins
des
répertoires
contenant
des
commandes
à
exécuter.

O
Elle
sert
à
identifier
le
chemin
du
répertoire
courant.

O
Elle
sert
à
identifier
le
login
de
l’utilisateur.


Question
 8
 :
 Cocher
 l’(ou
 les)
 affirmations
 correspondantes
 à
 l’exécution
 de
 la
 commande

suivante
:
(On
rappelle
que
ls –1 (le
chiffre
un)
affiche
un
fichier
ou
un
répertoire
par
ligne)


Prompt$ ls –1 D* | grep –v "^D" | grep "doc$" | wc –l > fic 


O
Cette
commande
crée
un
fichier
de
nom
fic
contenant
le
nombre
de
fichiers
et
répertoires,
du

répertoire
courant,
dont
le
nom
ne
commence
pas
par
D
et
se
termine
par
doc.


O
 Cette
 commande
 crée
 un
 fichier
 de
 nom
 fic
 contenant
 le
 nombre
 de
 fichiers
 et
 répertoires,

dont
le
nom
ne
commence
pas
par
D
et
se
termine
par
doc,
contenus
dans
les
répertoires
dont
le

nom
commence
par
D
et
se
trouvant
dans
le
répertoire
courant.



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

export i if [ "$i" -eq 1 ] i=‘expr $i \* 2‘


for i in "$@" then echo Script3 : $i
do ./script3.sh
./script2.sh elif [ "$i" -eq 2 ]
echo Script1 : $i then
done ./script3.sh
i=‘expr $i + 1‘
./script3.sh
fi
echo Script2 : $i
On
rappelle
que
la
commande
export
permet
l’utilisation
de
la
variable
en
paramètre
dans
les

scripts
shell
ultérieurs.
Chaque
script,
dans
son
environnement
d’exécution,
lui
seul
pourra
lire
et

modifier
la
variable
qui
aura
comme
valeur
initiale
la
valeur
qu’elle
a
dans
l’environnement
du

père
au
moment
de
la
création
du
fils.


Donnez
l’affichage
produit
par
la
commande
:
./script1.sh 1 2

Expliquez
ce
que
vous
obtenez
(indication
:
Vous
pouvez
l’expliquer
par
un
schéma)


L’exportation
d’une
variable
est
valable
pour
toute
la
sous‐arborescence.
Chaque
processus
créé

par
l’exécution
de
la
commande
./script1.sh
1
2
aura
donc
dans
son
environnement
d’exécution

une
variable
i
que
lui
seul
pourra
lire
et
modifier
et.
Les
évolutions
des
différentes
variables
i

sont
illustrées
par
le
schéma
suivant.



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.

Donner à la variable fic1 la valeur du premier paramètre.


Donner à la variable fic2 la valeur du deuxième paramètre.
Décaler des deux premiers paramètres dans la liste des paramètres

Tester que le premier paramètre est un fichier du répertoire courant.


Si ce n'est pas le cas, 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





















Vous aimerez peut-être aussi