Vous êtes sur la page 1sur 24

K ut I rapagc Programmillion Syst è me

( 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.

Combien de processus sont créés par le code suivant ? Expliquer et commenter.


^ include <unistd,h>
t include <stdio h>
* .
inl maint » {
ml pid i;.
loi ( i 0; i<3;i f-+ ) {
pki tbrkQ ; )
i ï {pid < 0 )
i / O ^
i
ECIIEC
y
else if’ Cpid Ü)
t
printIf 'fi : %dj je suis le processus : %d, mon père est : %d\n ". i. clpidQ ctppidQ ) :
1 ^ ^
ctsc
i
Fil)l|T0' ; %|)F suis le processus : %d. mon pcrc es
( , %d n“. i.gctpid , eippidO :
: \ () £ )
return 0:
}
Exercice 3
Ecrire un programme créant deux lits, en envoyant le signal
SIGUSK 1 à son fits cadet.
A lu réception de ce signal, le Ills Cadet devra
envoyer ie signal SIGISR2 au ills aîné ( qui provoque
sa terminaison) a vani de s’arrêter.
JlTl* ÏIH*
\
F! \ wmcu : Programmation S > st ou ^
Durée ; U! Jttmin
Sv - Documents tie cours sont autoi
^
. '
x s

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:

if (1bTk ( > > 0)


cpt+ n -
else
cpip3;
?
\ VL -U t ")
I
al< (
xt>
'

^ N^ Vc y 11 •

L
3B
B a
w
M
13A)4/2<}|S

Examen : Programmation Systè me


Duré e : IH 30min :

Documents de cours sont autorises


Exercice 1
Cochez les réponses correctes (peut-ctre plusieurs)
'
<
1 Un appel A forfc ) retourne U
dans le père dans le fils dans les deux en cas d'erreur

2 . Processus appelant les primitives wait se met en é tat


L endormi zombi prê t
dans Je Itchier test e
V U commande shell pour afficher le nombre d 'erreur de compilations
c'est
D gcc teste | grep err | we I
-I
WC CIT
-
-
u gcc test e ) we 1

-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

6, Un processus qui a Fait pipe(t); c!osc( t[01); writc(l[1|,buftsirlen( buf )}


-Z est bloqu é pour toujours
I ne peut plus jamais lire sur le tube
reçoit le signal SIGPIPE
O est bloqué jusqu 'à ce que les sirlcnfbut) caractères sont écrits
_
7 , Après l'appel à dup2(openC*tesf \0 RDWR )U )
- la sortie standard est redirigée vers Te fichier test
v
* I l'écriture dans test est redirigée vers la sortie standard
1 descripteur de fichier pour lest est fermé
G Je processus n 'a plus de terminal

S Un processus peui attendre l'arrivée d'un signal en utilisant la fonction


- pause wait G sigproemask

bloque tous les signaux sauf SIGALRM


attend SIGALRM
* bloque SIGALRM
21/ 03 /5013

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
:

1 Vérifier l'existence d ' un utilisateur


2 - Conna î tre J ' UID d'un utilisateur
q Quitter
*

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

Voici comment se présente le fichier :


* Ali 12 9 14
Ahmed 8 114
Fatima 9 12 1
[

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

Que fait le programme suivant?


N3
jSfdef î iiO
Lut mainQ {
ïnt i - I ;
i while (forkQ “ 0 && i <*= N) i ++;
ï
pt ntfnW i);
^
exi î(0 ; >
>

--
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.

A un proce s & us bloqu é tic passât k l é tal -


prtL Peul
~ 2\ Donne
r z deux é v é nemen ts qui perme ttent
éponse.
if plisser directement de J 'étal prêt à Fêlai bloqué 7 Justifiez votre r
la séquence suivante ( supposes: que Le
% Quel est Je nombre maximal de processus créés par
cl que les appels systè me ne
code de « filc.cxe » ne crée pas de nouveaux processus
retournent pas d 'erreur) : ,,
:
F- firfcO
; forkO; cxccvj>( 'filc.exc f com) ; fork (); forkO
J ;

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

5 On veut faire communiquer deux threads Thl et Th 2 d un m ê me processus au moyen d’ un


'

-
Et be ( pipe) anonyme. Est ce possible 7 Expliquez.

6 Donnez une situation où l ’ utilisation des signaux est appropriée.

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
'

fichier C contient la fonction mainO)

Exercice 2

Ecrire un script bash artichaut la liste des noms


de login des utilisateurs definis dans
etc passed avant un U 1D supé rieur à 100.

Exercice 3

Écrivez un script qui prend en paramètre un chemin et


:

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

procédure doit contrôler


Ecrire la proc édure consp qui permet de compiler un fichier. Cette ’extension c pour le
l'existence du fichier source, appeler le bon compilateur (on utilisera l
,

et .ce pour le compilateur C H+ /ÊS) et créer


compilateur C - un exécutable dont le nom
est celui Lî U ïk- bnfr source sans extension.

( •/)
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

!e JJJUJ devra ê tre fait à laide dune fonction calcul Q ,


L;

v
I

J "
21/03/2013

Contrôle : Programmation Syst è me


Durée : 45 min
Documents de cours sont autorisés
Exercicel

Gréer un script qui vous propose le menu suivant :

1 - Vérifier l'existence d'un utilisateur


2 - Connaî tre l'UID d'un utilisateur
q - Quitter

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

Que fait le programme suivant?


#define N 3
int main() {
int i = 1;
while (fork() =** 0 && i <= N) i ++;
printf("%d\n",i);
exit(0);
17/03/2015

Contr ô le : Programmat io n S ys t è m e

Durée : lh30 niin


Documents de co u rs so n t au to ri s és
1

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,

2. qu’ il correspond bien à un fi


fich ie r C co nt ie nt la fo n ct io n m
ch
ai
ie
n
r
() ).
so ur ce écr it en la ng ag e C ( o n su p p o se ra p o u r ce la q u ’ u n

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 :

si l ’ utilisateur rentre 0 o u p lu si eu rs p ar am è tr es, in d iq u e à l ’ u ti li sa te u r qu ’ il d o it re n tr er


*
exactement un paramè tr e , et q u it te en re nv oy an t u n e er re u r d e co d e 1 8

si le chemin n e d ési gn e au cu n fi ch ie r d an s le S G F, af fi ch e " A tt en ti o n le n o m du fi ch ie r


*
n’existe pas", et quitte avec le code 19
si le chemin désigne u fi
n ch ie r r é gu li er av ec d ro it en le ct u re, af fi ch e le co nt en u d u fi ch ie r,
* 1
si le chemin d ésign u
e n fi ch ie r av ec d ro it en ex écu ti o n , re ti re ce d ro it et af fi ch e "Droit en
*
exécution est retiré sur le fichier : nom du fichier" .
Exercice 4

1 # include < unistd .h >


2 int main ( void )
3
4 inti ;
5 îft for ( i =0; i<3 ;i++)
6 , if ( fork 0) i ++;
7 sleep (5);

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).

2. Faire un dessin de l’arbre géné al og iq ue du pè re et de s p ro ce ss u s en ge nd r é s.

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-
+

il passer directement de l’état prêt à l’état bloqué ? Justifiez votre réponse.

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.

6 Donnez une situation où l’utilisation des signaux est appropriée.

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 :

II père : Je suis le processus 27406


fils : Je suis le processus 27407
père : j'attends un signal
BONJOUR
fils : fin du processus
père : fin du processus

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

5. L'exécution de execlp(“echo”,”-n”,”marron”,NULL); printf(“vert”)


affiche “vert ” affiche “marronverf ’
affiche “marron” O n'affiche rien

6. Un processus qui a fait pipe(t); close(t[0]); write(t[ l ],buf,strlen(buf ))


est bloqué pour toujours
ne peut plus jamais lire sur le tube
O reçoit le signal SIGPIPE
est bloqué jusqu'à ce que les strlen( buf ) caractères sont écrits

_
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

8. Un processus peut attendre l 'arrivée d 'un signal en utilisant la fonction


pause ! wait O sigprocmask

9 Après l'ex écution du code sigemptyset(&set); sigaddset(&set,SIGALRM );


_
^ igprocmask (SIG BLOCK,&set,NULL), le processus
bloque tous les signaux sauf SIGALRM
attend SIGALRM
bloque SIGALRM
/

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;

pr écisé ment le déroulement de ce programme et illustrez à l ’ aide d ’ un


1 ) Expliquez
. Quel sera l ’ affichage produit par une exécution de la commande lanceur
dessin
ce programme pour lancer une cha î ne de processus reli és par
2) On souhaite étendre
tubes Concrètement , on souhaite passer en param è tre de lanceur
l intermédiaire de
’ .
comme par exemple : lanceur Is cat wc
une liste de commandes ,
commande
produise le m ême effet que si l ’ on avait tapé la
et on souhaite que cela
shell : 1s | cat | wc
apporter au programme lanceur . c pour obtenir ce comportement .
Indiquez les modifications à

?
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

pnxosstis devient orphelin ?


2 . Qu ’est co qu ’un processus zombie et quand un processus passe t - il dans cet é tat ’

,
3 Quel est le rô le de la primitive syst è me waitQ ? est ce qu ’ elle Moque le processif qui
,

l' ex écute si oui comment le syst è me \ a d é bloquer le processus ?


I Pour lancer en parall è le plusieurs traitements d ’ une m ôme application , nous a \ ons le clu > i \l
entre les appels syst èmes fork( ) et pthread create( ) . Laquelle de ces possibilit é s choisis
vous ? Pourquoi ?
-A Quelle est la différence entre un tube anonyme et un tube nomm é 7 Indiquer pour chaque
t \ pc les processus qui peuvent l ’ utiliser.
IvuTcice 2
t ombicn de processus sont créés par le code
suivant ? Expliquer et commenter.
U include <unistd .h>
0 include < stdio . h >
inl main ( ) {
i
int pid. i ;
for ( i*0; i <3 ; i -H ) {
1
pid fork();
il ( pid < 0 )
'
v )
{ O L
/* IX IILC * / .
'

}
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é
'

ant deux fils , en envoyant


A la réception de ce signal le signal S 1GUSR 1 à son
, le Ills cadet fils cadet .
sa terminaison ) avant devra envoyer le signal SRU JSR2 au
de s'arrêter . fils ainé (qui provoque
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-
+

il passer directement de l’état prêt à l’état bloqué ? Justifiez votre réponse.

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.

6 Donnez une situation où l’utilisation des signaux est appropriée.

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 :

II père : Je suis le processus 27406


fils : Je suis le processus 27407
père : j'attends un signal
BONJOUR
fils : fin du processus
père : fin du processus

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

5. L'exécution de execlp(“echo”,”-n”,”marron”,NULL); printf(“vert”)


affiche “vert ” affiche “marronverf ’
affiche “marron” O n'affiche rien

6. Un processus qui a fait pipe(t); close(t[0]); write(t[ l ],buf,strlen(buf ))


est bloqué pour toujours
ne peut plus jamais lire sur le tube
O reçoit le signal SIGPIPE
est bloqué jusqu'à ce que les strlen( buf ) caractères sont écrits

_
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

8. Un processus peut attendre l 'arrivée d 'un signal en utilisant la fonction


pause ! wait O sigprocmask

9 Après l'ex écution du code sigemptyset(&set); sigaddset(&set,SIGALRM );


_
^ igprocmask (SIG BLOCK,&set,NULL), le processus
bloque tous les signaux sauf SIGALRM
attend SIGALRM
bloque SIGALRM
/

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;

pr écisé ment le déroulement de ce programme et illustrez à l ’ aide d ’ un


1 ) Expliquez
. Quel sera l ’ affichage produit par une exécution de la commande lanceur
dessin
ce programme pour lancer une cha î ne de processus reli és par
2) On souhaite étendre
tubes Concrètement , on souhaite passer en param è tre de lanceur
l intermédiaire de
’ .
comme par exemple : lanceur Is cat wc
une liste de commandes ,
commande
produise le m ême effet que si l ’ on avait tapé la
et on souhaite que cela
shell : 1s | cat | wc
apporter au programme lanceur . c pour obtenir ce comportement .
Indiquez les modifications à

?
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.

Vous aimerez peut-être aussi