Cpinf 3600 A05 V2
Cpinf 3600 A05 V2
Cpinf 3600 A05 V2
Contrle priodique
Aut 2005
cole Polytechnique de Montral Dpartement de Gnie Informatique Cours INF3600 : Systmes dexploitation Contrle priodique Automne 2005
Date : 21 octobre 2005 de 18h30 20h30 Professeurs : Hanifa Boucheneb, Niculina Ignat Documentation permise Calculatrices programmables et cellulaires non permis
Contrle priodique
Aut 2005
Faux. Les donnes sont prives. Un processus peut appeler les procdures du moniteur, pour accder aux sections critiques, mais na pas le droit daccder directement aux donnes internes au moniteur. 4. Lexclusion mutuelle peut tre ralise par la dsactivation de lordonnanceur. Vrai ou faux? Justifiez. Faux. La dsactivation de lordonnanceur protge un processus qui accde une section critique contre les autres processus, mais pas contre les interruptions (qui pourraient accder elles-mmes la section critique).
P F3
F1
F2
F4
F5
F6
F7
Les processus fils du dernier niveau se transforment en a (a est un fichier excutable). Les autres processus fils affichent lcran le message je continue avant de poursuivre la cration de processus. int main ( ) { pid_t pid; int i, n=3; printf("processus racine %d\n", getpid()); for (i=0; i<n; i++) { /*1*/ pid = fork(); Page 2 sur 6
Contrle priodique
Aut 2005
if(pid==0) { printf("creation d'un processus %d par %d\n", getpid(),getppid()); if( i == n-1) execlp("a", "a", NULL); else printf(" Je continue %d\n", getpid()); }else { if(pid==-1) exit(1); printf(" Je suis un pre %d\n", getpid()); } } while (wait(NULL) >= 0); return 0; } 2) Tracez larborescence des processus crs par le programme si lon supprime la ligne while (wait(NULL) >= 0); et la suite de la cration de chaque fils, le pre excute les instructions : wait(NULL); exit(0);
P
F1
F2
F3
Page 3 sur 6
Contrle priodique
Aut 2005
Page 4 sur 6
Contrle priodique
Aut 2005
int main(void) { signal(SIGCHLD, sigchld); if (fork() == 0) { signal(SIGINT, sigintF); while(1) { printf (ici fils \n); sleep(1); } } while(1) { signal(SIGINT, sigintP); printf(ici pere \n); sleep(1); } return 0; } Compltez le code prcdent de manire raliser les traitements suivants : 1. Si lutilisateur presse les touches Ctrl-C lorsque le programme sexcute, les processus pre et fils ne se terminent pas immdiatement, mais aprs un dlai de 5 secondes. 2. Lorsque lutilisateur presse les touches Ctrl-C, le pre affiche son identificateur PID (sans se terminer); le fils effectue un appel systme alarm(5) qui envoie automatiquement le signal SIGALRM aprs 5 secondes. sigintP() { } sigalrm() { printf("pid=%d\n",getpid()); signal(SIGINT, sigintP); exit(1); }
Contrle priodique
Aut 2005
2) Supposez maintenant quun troisime processus C dsire communiquer avec B en utilisant lunique tampon T. Les processus A et C se comportent de la mme manire. B peut donc recevoir un message de A ou de C. La rponse de B doit tre rcupre par le processus expditeur du message. Synchronisez au moyen de smaphores les processus A, B et C. Pour rpondre la question compltez le pseudocode suivant : /*0*/ semaphore WM=0,WR=0, mutex=1; char T[256] ; void envoyer (char buf[] ) ; //construit et dpose un message dans T void recevoir(char buf[] ) ; // rcupre un message de T Processus A ou C Processus B { char mess[256], rep[256] ; { char mess[256] , rep[256] ; while (1) { P(mutex); envoyer (mess ) ; V(WM) ; P(WR) ; recevoir(rep) ; V(mutex); } } } Page 6 sur 6 while (1) { P(WM); recevoir (mess) ; envoyer(rep); V(WR) ; }