Exercices sur la programmation du système - 3, Exercices de Application informatique
Christophe
Christophe3 March 2014

Exercices sur la programmation du système - 3, Exercices de Application informatique

PDF (136.0 KB)
3 pages
494Numéro de visites
Description
Notes d’informatique sur le thème de l'algorithmique numérique - 3. Les principaux thèmes abordés sont les suivants: exercices.
20points
Points de téléchargement necessaire pour télécharger
ce document
Télécharger le document

Anaée 2010-2011 1-'_ SeSSlOn

PRoGRAMMÀTIoN SYSTÈME PG 204

DEMS BARTHoU

Filière : Iaïormatique Aruée : première Semestre : premier semestre

Date de l'exanen : 10 janvier 2011 Durée de I'examen : 2h

Documents autorisés E sa4s documeût E Ca,lcr:latrice autorisee tr non autorisée tr

Autre :

SUJET

1 Descripteurs de fichier

Ecrivez ua progranrne qui écrit vers une FIFO tout ce qu'il lit de I'entrée sta.ndaxd. La FIFO est noumée "input" et o!. supposera qu'elle existe déjà (ne pas la créer). Or écrira le programme en utilisa,nt les fonctions oPeo, read, $-rite et clos€, On ne fera aucune gestio! des erreurs et oir omettra les iDcludes. Attention, votre code ne doit pa.s excéder 15 Jignes !

2 Signaux

Ecrivez utr prograrnme run qui prend le nom d'ua exécutable exec eu pa.ramètres de Lgne de coo.Eande et la,:rce cet exécutable 5 fois. L'exécutable exec ne prendra pas d'argument. Dès que I'exécutable exec termine so! exécution normalemeat, le progranme rur le relaace, et après la ci.nquième exécution de l'exécutable, il n'est plus relancé. Si I'exécutable exec est arrêté à ceuse d'un sigaal (comme une erreur de segmeutation), le progra,nme rul dewa a.ffcher uB message et ter4iuer. On utilisera les fonctions fork, caitpid et erecvp. Pour simpliÊer l'écriture du prograuune, ou !e fera aucu-Ee gestion des eueurs et o! supposera qu'il y a bien toujours I para,mètre ea ligne de commande (le nom de 1'exécutable). On omettra par ailleure les includeô.

3 Programme mystère

Considérez le programme suiva,nt:

i.rt Eai! (int argc, char *argv[I) t int I = 0; ir t tubê[2]; iÀt in = STDI _FIIJII0; i!.t out = SI1)oUI_Fû.U{o; iût ab = argc -1;

do{ pipe(tube) ; if (forto != 0) {

cfose(tube[1] ); i ! = tubelol; ] elee {

close (tubetol ) ; out = tubê[l] ;

brea*:

] i++:

) Ehilê (i < nb-1)

it (in != STDII'I_FILû0) { drp2(iD, SIDIN_FILENo) ; clos€ (iE) ;

1

i{ (out ,= STD0UI_FILEI'I0) { dup2(out, Sm0ûI_FILEN0) ; clos€(out) ;

) execlp (âigv [i.+1] , argvli+11, NULI-);

]

. Expliquez etr détail le déroD.lement de ce code (un schéma peut être utile).

r Quel sera le résultat de I'exécution lorsque ce prograJnme est ls.ucé avec les pa,ra,mètres "ls cat wc"

4 Threads et synchronisation

On considère u.n système d'exploitation devant ordonaancer des processus sur une machiae à I coeurs. Au maximum, 8 processus peuvent êtle exécutés en même temps, et s'il y a plus de 8 processus prêts à être exécutés, ceux au delà de 8 sont placés dans une frle d'atteute. Le système d'exploitation considéré stocke les processræ eu attente dans un file d'attente qu€ue-t lrait-queue; avec queu€-t le type C correspondant à la structrue d'uae file de processlrs. Les fonctions de gestioa de la file (une FIFO) sont:

. proceas-t getFirst (queu€-t q): retourne Ie premier processus de la ûle d'atteute et I'enlève de la file. Si la file est vide, la foaction fait u.u segfault.

. queue-t add(queue-t q, process-t p): ajoute rll1 processus à la flle d'attente, et retourDe la nouvelle flle d'attente. Si la ûle est pleiae, la fonction fait un segfault.

. int isÉEpty(qu€ue-t q): retourne 0 si la file d'aitente n'est pas vide, 1 si elle est vide.

. int isFull (queue-t q): retourne 0 si la file d'attente n'est pas pleine, 1 si elle est pleine.

Par ailleurs, I'ordoqleûceu.r du système d'exploitatiou lance l'exécution d'un processus avec l'appel à void erec (proce6 s-t p) . Cette fonctioa latrce le proc€ssus et retoume (toujours) à la fll de l'exécution du processw (ce n'est pas ule fonction execvp). L'ordonaanceur gere la tle d'aJtente des processus avec 8 iheads (1 tbread par coeur), la flle d'attede étant partagée. Chaque tbread de I'ordonnanceur fait, en boucle, les actions suilz,ntes: il rega.rde si la liste est vide, si elle n'est pas vide, prend le premier processus, le laace.

a- Ecrire le code d'u.n tbread de l'ordoûu.rrceur. On n'écrira pas le code de laucenent de ces tbreads.

b- Quels sont les problèmes pouvant se poser du fait qu'il y a 8 threa.ds exécuta.Dt ce code ? Quelle est la section critique du code ? Montrer sur un exemple u.n problème pouvant se produire avec 2 thresds (on déroulera les i.nstructions des deux tbreads da,ns le temps).

c- ModiÊer le programme des threads avec de.s pthr€ad-mutex pour régler ce problème. Atteotio!, o! doit toujoùrs pouvoir exécuter 8 processus sur les 8 coeùrs simulta.uérûent. Dcrire une fonction qui fait I'iaitialisation des mutex.

On considère la fonction suiva.ute:

void run(process-t p) { lrhile ( i sFull ( !'ait -queue ) ) ,

) add(Hait-queue, p);

Cette fonction est appelée par un ser:l tbread du système d'exploitatiou et permet d'ajouter dars la file d'attente de uouveaux processus à exécuter.

d- La foaction fait de I'atteqte active. P<iurquoi cela û'est pas une bonae solution ? Quel autre problème à cette fonction ? ,,

e- Modiûez la fonction etr rajoutant des mutex pour régler ces deux problèmes.

f- Montrer que votre programme n'a pas de deadlock, en montraût que I'une des 4 conditions vues eu cours pour qu'il y ait deadlock n'est pas véri_Êee.

5 Annexe SYTIOPSIS

finclude <urisrd.È>

r4t pip€( iDt f i ld€s[2]) ;

DESCRIPTIOII Th€ PiPsO fùrctioD crsates a pipe (ar objêct that allorE uridirectioDa.t data flo,r) a-nd a.lIocatês a par.r of fire dêÊcri?tols. the first descriptor coD.Ilects to the read æd of thê pip€; thê sêcond co!!é6r5 to rùs Frit6 eÈd.

Data i.rttt€n to fi1d6s[1] app€ars or (i.€., câri bê r6ad fron) fildeÉ[o]. Thi.s âl1ors tb€ output ol ou€ progrâÀ to be sêEt to a.dother PEogra,À: tLe sorrcê's stândâ-rd ôulput i6 s€t up to be th€ r.rit€ end of the pip€; th€ siù,s Êtâ.!.da-Èd ilPut is s€t ûP to be tà€ r€aal €rai of tÈê pip6. T!6 pips itsê1f p€rsists rlltil â11 ot itE ÀEEociâtEd dèscriFtors ar€ closêd.

SYTOPSIS #i.iûclude <uDistd. h>

i-Àt dùp(iut fild€s) i

t int ùrF2(int fitd€s, iqt fildês2);

DESCRIPTIO}I ' DuÉO ùrPlicatss ân êtistiDg oùjsct descriptor a.rd rsturls itE valùE to the ca-lliry proc6ss (rild€s2 = dup(fildès)).

Th€ arglriré[t fild€s is a sEaLl ûoD-Ilêgariv€ i-dreger ird€r ir th€ perTroce66 dêEcrlpror ràbte. ID duP2O, th€ valuê of th€ res descriptor fildês2 1s Bp€cifisd. If this dèscriptor is at€ady i-r u66, the deÉcriptot is fir.st d6allocated as if a c1o6è(2) ca1l ùad b€sn dore first.

sYïoPsls *iÀclual€ <Ey6/rait.tr>

;ait(iÉ *stat-loc);

pid-t saitpld(pid_t pid, ùlr *6tar_toc, irt oprioEs);

DESCÎIPÎIotr The eaitPido fEnctioÀ ÊuÉp€lcls €recutior of its ca.1li.[g plocêss ù.!ti1 stât-Ioc i-EJorÀatior is availablê for a t€rrùatêd child Ploc€EÊ, or a Âig[âJ- iE rec€ived. 0I1 returr froD â snccêE6fu1 Daitpido ca[, th€ stat-loc sr€a cortaiE tsr[iDatio:

Th€ Ptd ParsÀ6ter spêciliêE tÈ€ sat of ch^ild procesEâE tor rtich to vait. If pid iE -1, tùe call saits for â.Ey child Froc€sÉ. If Pld i3 0, thê câ-11 trEits for Elly chi.ld procêÉs ir thê proceBs goup of tÈ€ cêtle!. If pia i. Brêatê! tb.r z€ro, th6 call saitE for th€ prôc668 lrith procesB ld pid. If plal ts I66E tÈà.tr -1, tÀe câLl eaits for ry procâBs shosê procêsÉ group id €qùals thê absoluts val.us of pid.

The Pid Pararstsr specifies the sêt of cLild procssses fôr shich to lù61t, If ptd is -1, th€ ca-ll câits for aEy child procê68, If Pid is o, th€ call eait8 for aDy cLild procê64 i-d tù€ lroc€Es group of th€ caLlsr. Il piA is gEeâtè! ÈÀa.n z€lot th€ câ1l catts for tt6 proc€ss $ith ploceEB id pid, If pid is los! tlEur -1, ths call. naits for ùy plocoÉs sÈosê procê6É group td e$lEls th€ absotute valÈ6 of pid.

commentaires (0)
Aucun commentaire n'a été pas fait
Écrire ton premier commentaire
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Docsity n'est pas optimisée pour le navigateur que vous utilisez. Passez à Google Chrome, Firefox, Internet Explorer ou Safari 9+! Téléchargez Google Chrome