Tp2 systèmes d’exploitation 2 - systèmes d’exploitation - té

Télécharger PDF

Obtenir le pack complet des cours, TDs, examens sur Systèmes d’Exploitation!

Vous souhaitez maîtriser Systèmes d’Exploitation ? Ne cherchez plus, nous avons le pack bien choisi pour vous.

pack complet des cours, TDs, TPs et examens exercices sur Systèmes d’Exploitation

Accédez à une collection complète des supports de cours, des travaux dirigés (TDs) corrigés, TPs avec solution, examens...

Télécharger pack

Universit" de Bouira- D ́epartement d’InformatiqueAnn ́ee 2016-2017

Module:Systèmes d’exploitation 23`eme année SITPN ◦2 Soit le programme C ci-dessous qui cr ́ee un segment m ́emoire partag ́e entre le processus

p`ere et ses deux processus fils.

1#include<sys/shm.h>

2#include<sys/wait.h>

3#include<unistd.h>

4#include<stdio.h>

5#include<stdlib.h>

6//#include ”sharedMemory.h”

7#include<string.h>

8#defineCLEF 12346// je d ́efinis une clef auhasard 9intmain (void){10 11inti,j;

12int∗mem=NULL;

13intshmid ;/∗l’identificateur du segment de m\’

emoire partag\’ee∗/

14intflag ;/∗un drapeau attach ́e au segment∗/

15 keyt mykey;

16intpid[3];

17 mykey = ftok(”.”, ’a’);

18if((shmid = shmget(mykey,sizeof(∗mem), 0666|

IPCCREAT))< ){

19/∗je cr ́ee un nouveau segment m ́emoire de taille ”

taille de ma structure data” octets, avec des

droits d’ ́ecriture et de lecture∗/

20 perror(”shmget”);//et je m’assure que l’

espace m ́emoire a ́et ́e correctement cr ́ee

21 exit(1);22} 23 printf(”l’identificateurdusegmentest%d\n”,shmid); 24for(i=0;i< ;i++)25{ 26switch(pid[i] =fork())

27{case−1 :

28{perror(”impossibledecreerunfils”) ;

29return−1 ;30} 31case0 :

32{printf(”Salut,jesuislefilsnum=%dpid=%d\n”

,i,getpid()) ;

33printf(”Fils:Jecommenceparm’attacherle

segmentdememoire\n”) ;

34mem = shmat(shmid,0,flag) ;

35printf(”∗∗∗∗∗∗Filsmem=%d\n”,∗mem) ;

36if(mem ==(int∗)−1){

37perror(”attachementimpossible”) ;

38exit(1) ;39} 40 printf(”jevaisecrireunmessagequepapava

afficher\n”) ;

41for(j=0;j< 0000;j++){

42if(i==0)

43{∗mem−=1;}44else 45{∗mem+=1;}46} 47 printf(”filsmem=%di=%dj=%d\n”,∗mem,i,j) ;

48if(shmdt(mem)==−1){

49perror(”detachementimpossible”) ;

50exit(1) ;51} 52 exit(0);53} 54default:55{ 56printf(”Jesuislepere\n”) ;57} 58}//switch

59}//for

60 printf(”P`ere:Jecommenceparm’attacherle

segmentdememoire\n”) ;

61 mem = shmat(shmid,0,flag) ;62 63if(mem ==(int∗)−1){

64perror(”attachementimpossible”) ;

65exit(1) ;66} 67 printf(”Lepereattendlamortdesonfils\n”) ;

68for(i=0;i< ;i++){

69wait(0) ;70} 71 printf(”jevaisafficherunmessagequemonfilsa

ecrit\n”) ;

72 printf(”%d\n”,∗mem);

73∗mem=0;

74 printf(”avanttoutdetachonslesegmentpartage\n”); 75if(shmdt(mem)==−1){

76perror(”detachementimpossible”) ;

77exit(1) ;78} 79 printf(”Lesfilsonttermin ́es\n”) ;

80return1 ;

81}//main

Questions:

1. ́

Ecrire et ex ́ecuter ce programme et donner le contenu du segment m ́emoire partag ́e mem;

2.Remplacerf or(j= 0;j < 0000;j+ +) parf or(j= 0;j < 00000;j+ +), donner le

contenu du segment m ́emoire partag ́e mem et commenter le r ́esultat obtenu.

Par: A. ABBASpage 1

Partagez vos remarques, questions ou propositions d'amélioration ici...

Enregistrer un commentaire (0)
Plus récente Plus ancienne

Publicité 1

Publicité 2