/
Id:xam07r.tex,v1.62007/06/2008:46:32marquetExpwww.lifl.fr/marquet/cnl Id:xam07r.tex,v1.62007/06/2008:46:32marquetExpwww.lifl.fr/marquet/cnl

Id:xam07r.tex,v1.62007/06/2008:46:32marquetExpwww.lifl.fr/marquet/cnl - PDF document

phoebe-click
phoebe-click . @phoebe-click
Follow
371 views
Uploaded On 2016-03-04

Id:xam07r.tex,v1.62007/06/2008:46:32marquetExpwww.lifl.fr/marquet/cnl - PPT Presentation

lentr ID: 242106

/*l'entr

Share:

Link:

Embed:

Download Presentation from below link

Download Pdf The PPT/PDF document "Id:xam07r.tex,v1.62007/06/2008:46:32marq..." is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Id:xam07r.tex,v1.62007/06/2008:46:32marquetExpwww.lifl.fr/marquet/cnl/pds/xam07r.htmlLicenced'informatiqueModuledeProgrammationdessystemesExamensecondesession2007PhilippeMARQUETJuin2007Dur´ee:3heures.DocumentsdecoursetTDautoris´es.Lesr´eponsesserontconcisesetconcretes.1SupprimerunzombiExercice1Unutilisateurd´esiresupprimerunprocessuszombidePID666quiex´ecutelacommande./zz.Pourchacunedesactionssuivantes,–expliquezcequel'utilisateuravoulufaire;–indiquezsicetteactionpermetdesupprimerleprocessuszombi;–expliquezpourquoi.1.Premiereaction,kill-KILL:%kill-KILL6662.Secondeaction,kill396:%ps-jUSERPIDPPIDSTATTTTIMECOMMANDphm396393Ssp10:00.54-tcshphm666396Zp10:00.02./zz[...]kill-KILL3963.Troisiemeaction,kill-CONT:%kill-CONT6664.Quatriemeaction,kill668669:%ps-j|grep666USERPIDPPIDSTATTTTIMECOMMANDphm666396Zp10:00.02./zzphm668666Rp10:00.01zzphm669666Sp10:00.01zzphm681396Sp10:00.01grep666%kill-KILL6686692bulkiest:trouverleplusencombrantIls'agitded´evelopperunecommandebulkiestdontl'objetestd'afcherl'entr´eedur´epertoirecourantetdesessous-r´epertoiresoccupantleplusdeplacesurledisque.Lenometlatailledecetteentr´eerecherch´eeserontm´emoris´eesdanslesvariablessuivantesaufuretamesureduparcoursdesentr´eesdur´epertoireetdesessous-r´epertoires: /*l'entr´detaillemaximale*/staticcharbulkiest_path[PATH_MAX+1];staticintbulkiest_size=0;Exercice2Donnezlecoded'unefonctionvoidcheck_if_bulkier(constchar*path,structstat*st)qui,´etantdonn´esunnomd'entr´eeetunevaleurdetypestructstatcorrespondante,metajourlesvariablesbulkiestpathetbulkiestsizesil'entr´eed´esign´eeparlesparametresestplusencombrantequel'entr´eelaplusencombrantetrouv´eejusqu'amaintenant.Exercice3Donnezlecoded'unefonctionvoidfind_bulkiest_file(constchar*path);quiv´eriesil'entr´eepathestlaplusencombrante.Deplus,danslecasd'unr´epertoire,cettefonctionv´eriepourchacunedesentr´eesdecer´epertoire,etcer´ecursivement,sielleestlaplusencombrante.Ondonneicilemain()delacommandebulkiestquiconsisteenunsimpleappelacettedernierefonctionsuivid'unafchagedur´esultat:int(intargc,char*argv[]){/*ond´de.*/find_bulkiest_file(".");affichageterminal*/printf("%sdetaille%d\n",bulkiest_path,bulkiest_size);exit(EXIT_SUCCESS);}3syncrw:lecteursr´edacteursIls'agitdemettreenœuvrel'algorithmedesynchronisationentrelecteursetr´edacteursvuencourspourdesactivit´esconcurrentesimpl´ement´eespardesprocessusl´egers.Soitlesquelettedeprogrammedelagure1.Lesprocessusl´egerslecteurset´ecrivainssepartagentlesaccesauxchiersfiles[].Ond´esireassurerlacoh´erencedecepartageenassurantauxprocessusl´egers´ecrivainsdesaccesexclusifsachacundeschiers.Exercice4Donnezlalistedesfonctionsd'unebibliothequesyncrw(synchronisationdelec-teurs/r´edacteurs)quiseraitencharged'assurercettecoh´erence.Exercice5Modiezlesquelettedeprogrammepourins´ererlesn´ecessairesappelsacettebibliothequedesynchronisation.(Iln'estpasdemand´edecompl´eterles...dusquelettedecode.)Exercice6Identiezlesstructuresdedonn´eesn´ecessairesauneimpl´ementationdecettebibliothequedesynchronisation.2 #defineNFILES128/*lesdonn´lues/´danslesfichiers*/structdata_s{...};lesNFILESfichiers*/structfile_s{...};structfile_sfiles[NFILES];/*unlecteur*/void*reader(void*arg){inti=(int)arg;structdata_sdata;intstatus;do{status=read_data(files+i,&data);do_things(&data);}while(status);}unr´*/void*writer(void*arg){inti=(int)arg;structdata_sdata;intstatus;do{data=...;status=write_data(files+i,&data);}while(status);}argc,char*argv[]){intnreader=...;intnwriter=...;pthread_t*tids=malloc(...);inti;/*cr´desthreads*/for(i=0;ii++)pthread_create(tids+...,NULL,reader,(void*)(i%NFILES));for(i=0;ii++)pthread_create(tids+...,NULL,writer,(void*)(i%NFILES));/*attentedelaterminaisondesthreads*/...}FIG.1–Squelettedelecteurs/r´edacteurs3 ArgumentsdelalignedecommandeLabibliothequemakeargvfournitdeuxfonctionsdecr´eationetdestructiond'arguments:externintmakeargv(constchar*s,constchar*delimiters,char***argvp);externvoidfreeargv(char**argv);Vousvousinspirerezdel'exemplesuivantmakeargv-main.cpourutilisercettebibliotheque:#include"makeargv.h"int(intargc,char*argv[]){inti,status;for(i=1;ii++){/*traiterargv[i]*/char**cmdargv;char**arg;/*crˆˆc3ˆˆa9ationduargvdel'argumenti*/status=makeargv(argv[i],"\t",&cmdargv); rgc;&#x;000;assert(status0);test:affichage*/fprintf(stderr,"[%s]\t%%",cmdargv[0]);for(arg=cmdargv;*arg;arg++)fprintf(stderr,"%s",*arg);fprintf(stderr,"\n");/*libˆˆc3ˆˆa9rationmˆˆc3ˆˆa9moire*/freeargv(cmdargv);}}Uneex´ecutiondeceprogrammed'exempleestlasuivante:%./makeargv-main"cat-n""grep-vfoo"wc[cat]%cat-n[grep]%grep-vfoo[wc]%wcExercice7Fournissezuneimpl´ementationdesfonctionsprincipalesdecettebibliothequedesynchronisa-tion.Exercice8L'algorithmedesynchronisationpropos´edanslecoursdonnelapriorit´eauxlecteurs.Desalterna-tivestellespriorit´esauxr´edacteursoupriorit´es´egalessontmentionn´ees.Explicitezlesdiff´erencesentrecesdiff´erentesvariantes.Illustrezparunexempleconcret.4rptr2:bisrepetitadansdestubesIls'agitded´evelopperunecommanderptr2quivar´ep´etersonentr´eestandardsurlesentr´eesstandardd'unensembledencommandes.Cettecommanderptr2–cr´eentubes;4 –lancencommandesquivontchacuneliredepuisundecestubes;–r´epetedanschacundecestubescequ'ellelitdepuissonentr´eestandard.Lesncommandeslanc´eesparrptr2peuventaccepterdesparametrescommeillustr´eparl'exemplesuivant:%rptr2"cat-n""grep-vfoo"wcOnutiliseralabibliothequemakeargvvueenTPpourg´ererlesparametresdelalignedecommande.Unexempleestdonn´edansl'encartpagepr´ec´edente.Exercice9Expliquezlahi´erarchiedeprocessusquidoitˆetrecr´e´eepourr´ealiserlacommanderptr2.Ex-plicitezquelprocessusdoitsechargerdelacr´eationdestubes.Pr´ecisezbienquelsdescripteursinutilesdoiventˆetrefermerparchacundesprocessus.Nousallonsutiliserletableaucmdspourm´emoriserlesinformationsdesncmdcommandeslanc´eesparrptr2,asavoir:–lenum´eroduprocessusenchargedelacommande;–ledescripteurd'´ecrituredansletubesurlequellitlacommande.structcmd_s{pid_tcmd_pid;intcmd_pipew;};structcmd_s*cmds;staticintncmd;Exercice10Compl´etezles[...]dusquelettesuivantdelafonctionmain()derptr2int(intargc,char*argv[]){/*allocationdutableaudecmd_s*/ncmd=argc-1;cmds=malloc(ncmd*sizeof(structcmd_s));assert(cmds);cr´destubesetfils*/[...]}pour–cr´eerlestubesn´ecessaires;–cr´eerlesprocessusenchargedel'ex´ecutiondescommandes;–assurerquel'entr´eestandarddecesprocessussefassedepuisleurtube;–r´ealiserlamutationdecesprocessuspourl'ex´ecutiondelacommandecorrespondante.Lacommanderptr2sedoitensuiteder´ep´etercequ'ellelitsursonentr´eestandarddanschacundestubeslaconnectantauxcommandes.Alarencontredelandechiersursonentr´eestandard,lacommanderptr2setermine.Exercice11Compl´etezlafonctionmain()pourr´ealisercetterecopiedel'entr´eestandarddanslestubesconnect´esauxcommandes.Noussavonsquel'´ecrituredansuntubepourlequellenombredelecteursestnulprovoquel'envoidusignalSIGPIPE.Ainsiilvaˆetrepossiblealacommanderptr2d'identierqu'un5 Findusujetprocessusenchargedel'ex´ecutiond'unecommandeatermin´e(ouaferm´eletube,cequiest´equivalentdupointdevuederptr2).Sitouteslescommandeslanc´eesseterminentavantlanderptr2,iln'yapluslieudecontinuer.Exercice12Ils'agitdoncd'identierlaterminaisondescommandeslanc´ees.Fournissezlecompl´emental'implantationactuellederptr2pourmettrenal'ex´ecutionderptr2alafermeturedetouslestubesdanslesquelsrptr2´ecrit.6