lentr ID: 242106
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.
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'agitdemettreenuvrel'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.1Squelettedelecteurs/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;/*crc3a9ationduargvdel'argumenti*/status=makeargv(argv[i],"\t",&cmdargv); rgc;000;assert(status0);test:affichage*/fprintf(stderr,"[%s]\t%%",cmdargv[0]);for(arg=cmdargv;*arg;arg++)fprintf(stderr,"%s",*arg);fprintf(stderr,"\n");/*libc3a9rationmc3a9moire*/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.Cettecommanderptr2cr´eentubes;4 lancencommandesquivontchacuneliredepuisundecestubes;r´epetedanschacundecestubescequ'ellelitdepuissonentr´eestandard.Lesncommandeslanc´eesparrptr2peuventaccepterdesparametrescommeillustr´eparl'exemplesuivant:%rptr2"cat-n""grep-vfoo"wcOnutiliseralabibliothequemakeargvvueenTPpourg´ererlesparametresdelalignedecommande.Unexempleestdonn´edansl'encartpagepr´ec´edente.Exercice9Expliquezlahi´erarchiedeprocessusquidoitetrecr´e´eepourr´ealiserlacommanderptr2.Ex-plicitezquelprocessusdoitsechargerdelacr´eationdestubes.Pr´ecisezbienquelsdescripteursinutilesdoiventetrefermerparchacundesprocessus.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*/[...]}pourcr´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.Ainsiilvaetrepossiblealacommanderptr2d'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