Académique Documents
Professionnel Documents
Culture Documents
( Durée : 4<li»i«
Documents de Cours sont autorisé *
Etcjrck'c |
.
I. Dans les systèmes UNIX, ton! processus a t H un père ? Quc « Passc 1
—
processus devient orphelin 7
- ^
7
Qu'est ce qu'un processus zombie et quand un processus M onh ccl
^
1
,
« Que c« le rtte de h primitive Sys ,L * » T est ce qu elle bloc* le P » aui
qu ,
, *
«
“ •
' « »1«rumen le système va bloquer ic proceMus
^ ^^
' SSEKSS
' ^^
5 . Quelle est lu différence entre un tube anonyme et un tube nomme i Indiquer p<mr chaque
Exercice 2
type les processus qui peuvent l ' utiliser.
r ..
\
—
E *crc!ce 1
. nt c,<* to •*Ï* ***
#
COintiie
chacun dsi progrArtimeSi î uivanlv jïTi iiW ï
ç
—
PQUJ '
1 K
de cesdernitfs : J > L-
*
^
IÎA
I
7
\ - r ï (Ufeu
okO
1. i sit manlO (
1
W,
^ l 'i
^ forM )i. 'T
)
ini Tiuni
^Ü
iftfUo *0)
* \X
}
$
Î. im mainO 1
im tpr=0:
^ N^ Vc y 11 •
L
3B
B a
w
M
13A)4/2<}|S
-I Un processus zombi
peut tuer son père . peut seulement recevoir SIGC11!1)
devient orphelin quand son père se termine j disparaî t quand son père fait waitpid
,
LSW G '
I
,
-
5 , J .'exécution de execlp('‘echo” T n”tT marron”TNULL); printffvert ”)
affiche "' vert" . affiche "marronverf '
affiche “marron ” ü n 'affiche rien
Système
Contrôle : Programmation
Durée : 45 min
Documents (fe cours sont
autorisés
Excrcfce1
Créer un script qui vous propose le menu suivant
:
Kxcrcke2
fichier contenant le nom des
Créer un script qui prend en param è tre ou en saisie le nom d un é èves, puis calculer et
*
.
i
V
1
'
élè ves et leurs trois notes. Le script devra : afficher les noms des
afficher la moyenne de chaque él è ve
l
Ejtereice3
\
Écrire un script qui compte le nombre de fichiers et de ré pertoires dans le ré pertoire courant cl
b
affiche le résultat sous forme :
Fichiers : 12
Répertoires : 9
Exercice 4
--
3
î 3/04/201J
Systè me
Kxaincn : Programmation
Dur é e ; 1 H 30 min
autorisés
Documents de cours sont
Lx recite î
. nt tue concises et clsuea.
1 épendra aux questions suivantes. I O» ré ponses doive
sus sous Ü NIX est r éalisée par duplication. Le processus fils
I U cré ation de proces
jarlagc 1« donn ées de son pire. Vrai ou faux
7 Justifie/ voire réponse.
MyCodefh Cette
4;. Un programme crée trois threads qui exécutent la meme fonction
de 1 d ’un m ê me
fonction consiste en un traitement local et une incrémentation
compteur (global). Le programme attend ensuite la fin des trois
threads, affiche la
videur du compteur puis sc termine. La valeur initiale du compt eur est 0.
e à Fécran par ce
-
Le programme est il déterministe ? Si oui, donne / la valeur affich é
age.
programme. Si vous ré pondez non, donnez les valeurs possibles du compteur à l affich
’
-
Et be ( pipe) anonyme. Est ce possible 7 Expliquez.
Exercice 1
On suppose écrits des programmes plus, moins, fois, div, mod prenant deux arguments
( supposés entiers) et affichant le résultat (entier) de l ' opération correspondante si elle est
vblidc Ces programmes retournent 0 en cas de succès, 1 en cas d’ échec (en particulier en cas
,
d ; division par 0) ,
I srirc un programme calcule prenant trois arguments formant une opération arithmétique (par
exemple calcule 3 + 4), lance un fils chargé d’effectuer l ’opération, et affiche éventuellement
un message d ’erreur si F opération a échoué.
i
iTOons
t onlré tc : Program
' Sysiwnt
Puree : ihJOui ïn
.
Doru menti de cour* j om auiorue »
.1
F-iercice t
Ecnvei un script shell qui réalise la
compilation drun fichier source C dontte nom est passe
dc rn vérifier.
en argument. SMS extension Cette commande ^
I que le fichier existe.
langage C ( on supposera pour cela qu un
'
corresp ond bien ù un fichier source écrit en
2 . qu il
'
Exercice 2
Exercice 3
si i ' utilisat eur rentre 0 ou plusieu rs param è tres, indique à rutiUsateur qu ’ il doit rentrer
>
exactement un param è tre et quitte en renvoyant une erreur de
,
code 1 S
signe aucun fichier dans le SGF. affiche " Attention le nom du fichier
* si le chemin ne d é
n’existe pasH, et quitte avec le code 19
avec droit en lecture, affiche le contenu du fichier.
* si le chemin désigne un fichier r gulier
é
si !e chemin d ésigne un fichier avec droit en exécution, retire ce droit et aîTichc Druii en
"
*
exécution est retiré sur le fichier : nom du fichier".
4
Système
Contrôle : Programmation
Durée : 45 min
autorisés
Documents de cours sont
Exercice
ètres sont autorisés à se
Ecrire un script qui vérifie si les noms qu’on lui passe en param
és , il donne les informations
connecter sur la machine ou non. Pour ceux qui sont autoris
effectivement connectés .
diverses sur l utilisatcur ( uid , gid, home) puis il affiche s’ils sont
( •/)
Créer un script calculette dans lequel deux nombres opérandes et un' signe opé rateur +
*
devront ê tre donné s en param ètres, ou saisis. Le script doit réaliser l opération souhaitée .
Le résultat est : ! 1
v
I
J "
21/03/2013
Exercice2
Gréer un script qui prend en param ètre ou en saisie le nom d’un fichier contenant le nom des
él èves et leurs trois notes. Le script devra : afficher les noms des élèves, puis calculer et
afficher la moyenne de chaque élève
Voici comment se présente le fichier :
Ali 12 9 14
Ahmed 8 114
Fatima 9 12 1
ï
Exercice3
Écrire un script qui compte le nombre de fichiers et de répertoires dans le répertoire courant et
affiche le résultat sous forme :
Fichiers : 12
Répertoires : 9
Exercice 4
Contr ô le : Programmat io n S ys t è m e
Exercice 1
pi la ti on d ’ u n fi ch ie r so u rc e C do nt le n o m es t p as sé
Ecrivez un script sh el l q u i réal is e la co m
m m an de d ev ra v é ri fi er,
en argument , sans extension . C et te co
<
. 1 . que le fichier existe,
Exercice 2
un sc ri pt b as h af fi ch an t la li st e de s n o m s de lo g in d es u ti li sa te u rs d éfi n is da ns
Ecrire
/etc/passwd ayant un UID supérieur à 100.
Exercice 3
É crivez un sc ri pt qu i p re n d en p ar am è tr e u n ch em in et :
8 return i ;
9 }
re
On suppose que tout appel à la primitive fork ne nvoie pa s un co de d’er re u r.
—
1 . Dire combien de processus ce pr og rmme en ge nd re (on ne co m pt e pa s le père).
Exercice 5
Ecrire un programme Cqm prenden P une Isérie de fichiers source .c, les compile
exécutable. Ce
chacun séparément et
^ ^
programme doit :
• pr
lancer un ocessus fi ls po ur ch ac un de s no m s de fi ch ie rs pa ssé s en pa ra m è tr e;
• chaque fils do it ex é cu te r le p ro g ra m m e gc c - c su r le fi ch ie r do nt il s 'oc cu pe ;
• le re
p è do it at te nd re la te rm in ai so n de to us se s fi ls ;
• si l'ensemble des fils on t te rm iné s sa ns er re ur , le p è re ré al is e l'é di ti on de li en s en
cu
ex tant
é gc c su r le s fi ch ie rs .o pr od ui ts pa r le s fi ls .
18/04/2013
Examen : Programmation Systè me
Durée : 1H 30min
Documents de cours sont autorisés
Exercice 1
P .épondez aux questions suivantes. Les réponses doivent être concises et claires.
1. La création de processus sous ÜNIX est réalisée par duplication. Le processus fils
partage les données de son père. Vrai ou faux ? Justifiez votre réponse.
c 2. Donnez deux événements qui permettent à un processus bloqué de passer à l ’état prêt. Peut-
+
VJ 3. Quel est le nombre maximal de processus créés par la séquence suivante (supposez que le
code de « f ï le.exe » ne crée pas de nouveaux processus et que les appels système ne
retournent pas d’erreur) :
f )rk(); forkQ; exec ("f ïle.exe”, corn) ; forkQ; forkQ;
/'1 vjp
4. Un programme crée trois threads qui exécutent la même fonction MyCodeO. Cette
fonction consiste en un traitement local et une incrémentation de 1 d’un même
c jmpteur (global). Le programme attend ensuite la fin des trois threads, affiche la
v rieur du compteur puis se termine. La valeur initiale du compteur est 0.
Le programme est-il déterministe ? Si oui, donnez la valeur affichée à l’écran par ce
p :ogramme. Si vous répondez non, donnez les valeurs possibles du compteur à l’affichage .
5 On veut faire communiquer deux threads Thl et Th2 d’un même processus au moyen d’un
ü tube (pipe) anonyme. Est-ce possible ? Expliquez.
ircicc 2
On suppose écrits des programmes plus, moins, fois, div, mod prenant deux arguments
(: upposés entiers) et affichant le résultat (entier) de l’opération correspondante si elle est
v ilide. Ces programmes retournent 0 en cas de succès, 1 en cas d’échec (en particulier en cas
db division par 0).
Ecrire un programme calcule prenant trois arguments formant une opération arithmétique (par
exemple calcule 3 + 4), lance un fils chargé d’effectuer l’opération, et affiche éventuellement
un message d’erreur si l’opération a échoué.
v
1
*•<
f SSI
WwW ttB s
m
*>
Ê ^ & " mrn
^ «
Exercice 3
On voudrait que 3 processus communiquent au moyen d’un seul tube (pipe), selon le
ichéma suivant :
v ;
STDIN
STDOUTV ( clavier )
Plpel
E STDIN
c B STDIN
(clavier )
1 STDOUT STDOUT
( Flch )
Le processus principal PO crée 2 processus fils (PI et P2) et un tube anonyme Pipel . Le
processus PO lit, caractère par caractère, des données du tube Pipel en utilisant le
descripteur 0. Les données lues sont sauvegardées dans le fichier Fich en utilisant le
,
descripteur 1. Les processus Plj et P2 lisent, caractère par caractère, des données du
clavier, pour les déposer, en utilisant leurs descripteurs 1, dans le tube Pipel .
On vous donne le code à compléter suivant :
int main ( )
{ 1* 0*1
if( fork()=0)
{ 1* 1*1
} else
if (fork 0=0)
{ 1* 2*1
_
} else { int f = open ("Fich",0 WRONLY);
1*3*1
while (wait(NULL)>0);
}
return 0;
}
Exercice 4
Ecrire un programme dans lequel un processus crée un fils et initialise un handler (afficher
BONJOUR) sur SIGUSR1. Le fils affiche des informations à l'écran puis envoie le signal
: SIGUSR1 à son père. Attention le programme fils doit se terminer avant le processus père. La
I sortie (les messages sur l'écran) du programme devra ressembler à ceci :
2
n
'i
13/04/2015
iC
Examen : Programmation Système >
Durée : 1 H 30min
Documents de cours sont autorisés r> w
$
Exercice 1 :
Cochez les réponses correctes ( peut-être plusieurs; L
1. Un appel à fork () retourne 0 î
dans le père dans le fils dans les deux en cas d ' erreur k
K
2. Processus appelant les primitives wait se met en é tat
endormi zombi prê t
£
3. La commande shell pour afficher le nombre d 'erreur de compilations dans le fichier test .c
c'est
-
[ i gcc test .c | grep err | wc 1
wc -1 err
gcc test.c | wc -1
4. Un processus zombi
peut tuer son père peut seulement recevoir SIGCHLD
devient orphelin quand son pè re se termine disparaî t quand son pè re fait waitpid
_
7. Après l 'appel à dup2 open(“test’\0 RDWR ),1 )
(
la sortie standard est redirigée vers le fichier test
1 l 'écriture dans test est redirigée vers la sortie standard
descripteur de fichier pour test est fermé
le processus n 'a plus de terminal
Exercice 2
Combien de processus engendre l’évaluation du code (
fork() && ( fork() || fork() ) ;
2. Dessiner l ’arbre gé néalogique des processus engendres par cette ligne.
Exercice 3
Voici la source d ’ un programme lanceur.c destiné à créer un certain nombre de processus
reliés par des tubes.
Int maln(lnt arge, char ** argv[] )
:
Int 1 = 0;
Int tube[2];
Int ln = STDIN_FILEN0;'
Int OUt = STDOUT_ FILENO;.
Int nb = atol (argvtl]);
do {
pipe(tube);
lf (fork() == 0) (
cloBe(tube[l]); ln = tube( O);
} else {
close(tube [0]); out = tube (1];
break;
}
1+ + ;
} while(1 < nb -1);
prlntf('Processus %d \n *, 1);
return 0;
?
Exercice 4
commande avec ses arguments aprè s avoir protég é le
Ecrire un programme C qui exé cute une
SIGHUP ( envoy é par le noyau quand le terminal auquel le processus est
processus du signal
attaché, se déconnecte ) .
:
Exercice 2
Dans les programmes suivants, rajouter les wait () et les éventuels instructions de sorte que la fin
d ' exé cution de chaque processus fils est dé tect é par son pè re .
1. intmain() {
int result, a=0;
result = fork();
if (result > 0)
a=5;
}
2. int mainQ {
ni int resultl, result2, result3;
result 1 = fork();
result2 = fork();
result3 = fork();
}
3. int main() {
int resultl, result2, result3;
resultl = fork();
if (resultl =0) {
result2 = fork();
if (result2 = 0) {
result3 = fork();
}
Exercice 3
Ecrire un programme C dans lequel un fil 1 Ajlit des caract è res au çlavier et
nombre
les
de
envoie
caract
à
è
un
res
autre
alphab é
r^
fils/B ia
tiques
un tube. A va attendre B pour lui renvoy é ? rvia un deuxième tube le
qu'il ( B) a reçus.
Exercice 4
Ecrire un programme ne se terminant qu'au cinquième Ctrl-C . gjH
SW
F rognimmiitlon Syst è me
16 ü I > 016
K j i l l n i|) » i j4 f l’
Durée : 40 min
Documents de cours soul autorisés
-
l verdt'o I
'
/ . Pans les syst èmes UNIX , tout processus 11 i - il un pè re ? Que se passe i il lorsqu ' un
,
3 Quel est le rô le de la primitive syst è me waitQ ? est ce qu ’ elle Moque le processif qui
,
}
else if ( pid
/0)
{
pfint 11; "( i *’ «cl ) je suis le processus : %d, mon pere
•
csi : %d \ n " , i , getpid ( ) ,
} gctppid ( )) ;
else
I
r
return 0;
***“"
: P““'
** *• "» : «»".
Lxercicc J
l erire un programme cré
'
Exercice 1
P .épondez aux questions suivantes. Les réponses doivent être concises et claires.
1. La création de processus sous ÜNIX est réalisée par duplication. Le processus fils
partage les données de son père. Vrai ou faux ? Justifiez votre réponse.
c 2. Donnez deux événements qui permettent à un processus bloqué de passer à l ’état prêt. Peut-
+
VJ 3. Quel est le nombre maximal de processus créés par la séquence suivante (supposez que le
code de « f ï le.exe » ne crée pas de nouveaux processus et que les appels système ne
retournent pas d’erreur) :
f )rk(); forkQ; exec ("f ïle.exe”, corn) ; forkQ; forkQ;
/'1 vjp
4. Un programme crée trois threads qui exécutent la même fonction MyCodeO. Cette
fonction consiste en un traitement local et une incrémentation de 1 d’un même
c jmpteur (global). Le programme attend ensuite la fin des trois threads, affiche la
v rieur du compteur puis se termine. La valeur initiale du compteur est 0.
Le programme est-il déterministe ? Si oui, donnez la valeur affichée à l’écran par ce
p :ogramme. Si vous répondez non, donnez les valeurs possibles du compteur à l’affichage .
5 On veut faire communiquer deux threads Thl et Th2 d’un même processus au moyen d’un
ü tube (pipe) anonyme. Est-ce possible ? Expliquez.
ircicc 2
On suppose écrits des programmes plus, moins, fois, div, mod prenant deux arguments
(: upposés entiers) et affichant le résultat (entier) de l’opération correspondante si elle est
v ilide. Ces programmes retournent 0 en cas de succès, 1 en cas d’échec (en particulier en cas
db division par 0).
Ecrire un programme calcule prenant trois arguments formant une opération arithmétique (par
exemple calcule 3 + 4), lance un fils chargé d’effectuer l’opération, et affiche éventuellement
un message d’erreur si l’opération a échoué.
v
1
*•<
f SSI
WwW ttB s
m
*>
Ê ^ & " mrn
^ «
Exercice 3
On voudrait que 3 processus communiquent au moyen d’un seul tube (pipe), selon le
ichéma suivant :
v ;
STDIN
STDOUTV ( clavier )
Plpel
E STDIN
c B STDIN
(clavier )
1 STDOUT STDOUT
( Flch )
Le processus principal PO crée 2 processus fils (PI et P2) et un tube anonyme Pipel . Le
processus PO lit, caractère par caractère, des données du tube Pipel en utilisant le
descripteur 0. Les données lues sont sauvegardées dans le fichier Fich en utilisant le
,
descripteur 1. Les processus Plj et P2 lisent, caractère par caractère, des données du
clavier, pour les déposer, en utilisant leurs descripteurs 1, dans le tube Pipel .
On vous donne le code à compléter suivant :
int main ( )
{ 1* 0*1
if( fork()=0)
{ 1* 1*1
} else
if (fork 0=0)
{ 1* 2*1
_
} else { int f = open ("Fich",0 WRONLY);
1*3*1
while (wait(NULL)>0);
}
return 0;
}
Exercice 4
Ecrire un programme dans lequel un processus crée un fils et initialise un handler (afficher
BONJOUR) sur SIGUSR1. Le fils affiche des informations à l'écran puis envoie le signal
: SIGUSR1 à son père. Attention le programme fils doit se terminer avant le processus père. La
I sortie (les messages sur l'écran) du programme devra ressembler à ceci :
2
n
'i
13/04/2015
iC
Examen : Programmation Système >
Durée : 1 H 30min
Documents de cours sont autorisés r> w
$
Exercice 1 :
Cochez les réponses correctes ( peut-être plusieurs; L
1. Un appel à fork () retourne 0 î
dans le père dans le fils dans les deux en cas d ' erreur k
K
2. Processus appelant les primitives wait se met en é tat
endormi zombi prê t
£
3. La commande shell pour afficher le nombre d 'erreur de compilations dans le fichier test .c
c'est
-
[ i gcc test .c | grep err | wc 1
wc -1 err
gcc test.c | wc -1
4. Un processus zombi
peut tuer son père peut seulement recevoir SIGCHLD
devient orphelin quand son pè re se termine disparaî t quand son pè re fait waitpid
_
7. Après l 'appel à dup2 open(“test’\0 RDWR ),1 )
(
la sortie standard est redirigée vers le fichier test
1 l 'écriture dans test est redirigée vers la sortie standard
descripteur de fichier pour test est fermé
le processus n 'a plus de terminal
Exercice 2
Combien de processus engendre l’évaluation du code (
fork() && ( fork() || fork() ) ;
2. Dessiner l ’arbre gé néalogique des processus engendres par cette ligne.
Exercice 3
Voici la source d ’ un programme lanceur.c destiné à créer un certain nombre de processus
reliés par des tubes.
Int maln(lnt arge, char ** argv[] )
:
Int 1 = 0;
Int tube[2];
Int ln = STDIN_FILEN0;'
Int OUt = STDOUT_ FILENO;.
Int nb = atol (argvtl]);
do {
pipe(tube);
lf (fork() == 0) (
cloBe(tube[l]); ln = tube( O);
} else {
close(tube [0]); out = tube (1];
break;
}
1+ + ;
} while(1 < nb -1);
prlntf('Processus %d \n *, 1);
return 0;
?
Exercice 4
commande avec ses arguments aprè s avoir protég é le
Ecrire un programme C qui exé cute une
SIGHUP ( envoy é par le noyau quand le terminal auquel le processus est
processus du signal
attaché, se déconnecte ) .
:
Exercice 2
Dans les programmes suivants, rajouter les wait () et les éventuels instructions de sorte que la fin
d ' exé cution de chaque processus fils est dé tect é par son pè re .
1. intmain() {
int result, a=0;
result = fork();
if (result > 0)
a=5;
}
2. int mainQ {
ni int resultl, result2, result3;
result 1 = fork();
result2 = fork();
result3 = fork();
}
3. int main() {
int resultl, result2, result3;
resultl = fork();
if (resultl =0) {
result2 = fork();
if (result2 = 0) {
result3 = fork();
}
Exercice 3
Ecrire un programme C dans lequel un fil 1 Ajlit des caract è res au çlavier et
nombre
les
de
envoie
caract
à
è
un
res
autre
alphab é
r^
fils/B ia
tiques
un tube. A va attendre B pour lui renvoy é ? rvia un deuxième tube le
qu'il ( B) a reçus.
Exercice 4
Ecrire un programme ne se terminant qu'au cinquième Ctrl-C . gjH
I *1 * ) J
(14/04/ 20191
V'
Exuni en : Program mut inn Système
Durée : IH 30 inin
Documents de cours sont autorises
r ¥
Exercice I
les compile
Ecrire un programme C qui prend en paramètre une sé rie de fichiers source
chacun sé parément et simultané ment. Ce programme doit :
* tancer un processus Ills pour chacun des noms de fichiers passés en paramè tre .
* chaque fils doit ex écuter te programme javac sur le fichier dont il s occupe :
* le père doit attendre la terminaison de tous ses fils ;
Exercice 2
Ecrire un programme C qui réalise la commande shell :
_ _ __
cat nom du fichier a lirc | vve - I
Exercice 3
Ecrire un programme qui intercepte deux signaux : le contrô le C de l ' utilisateur (qui tente de
l 'arrêter ) et le S1GUSRI ( venant d ' un autre terminal) qui au contraire lui prolonge la vie . Il faut
par exemple disposer d ' un compteur valant 5 au début du programme. Chaque appel à CTR C -
d écrémente ce compteur, et reception d ' un signal SIG U SRI lui ajoute 10, Le main quant à lui
boucle tant que le compteur ne vaut pa*> zéro.
Exercice 4
Ecrire une application dienLservetir en C, à l ’aide des files de messages , dans laquelle chacun
des clients peut envoyer un nombre au serveur. Ce dernier calcule la racine carr é et f en voie au
client demandeur de la requête.