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.
Accédez à une collection complète des supports de cours, des travaux dirigés (TDs) corrigés, TPs avec solution, examens...
Télécharger packUniversit" 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
