Correction tp7 com et synchro (les sémaphores) - télécharger

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

Projet DVD-MIAGE 2010

TP n°7: Communication et synchronisation (les sémaphores)

CORRECTION

1) et 2)

Semget : int semget(key_t key, int nsems, int semflg); Crée un ensemble de sémaphores. Exemple: semid=semget(IPC_PRIVATE,4,0666) crée un ensemble contenant 4 sémaphores accessibles en lecture/écriture par tout processus. Semctl : int semctl(int semid, int semnum, int cmd, semun arg); Permet de réaliser des opérations de contrôle sur l'ensemble de sémaphores identifié par semid (initialisation, destruction, etc.). Semop : int semop(int semid, struct sembuf *sops, size_t nsops); Effectue des opérations sur un ensemble de sémaphores (les P() et V()). 3)

#include<sys/types.h>

#include<sys/ipc.h>

#include<sys/sem.h>

#include<sys/stat.h>

#include<stdio.h>

#include<stdlib.h>

intmain()

{intf_vers_p, p_vers_f;

int pid;

int i;

/* Constante sur les sémaphores */

struct sembufoperation_P = { 0, -1, 0 };

struct sembufoperation_V = { 0, 1, 0 };

/* Creation de l'IPC */

/*Synchro fils vers père*/

f_vers_p = semget(IPC_PRIVATE, 1, 0666);

if (f_vers_p 0){ fprintf(stderr, "semget() erreur.\n");

exit(-1);} semctl(f_vers_p, 0, SETVAL, 1); /* Init(f_vers_p, 1); */

/*Synchro père vers fils*/

p_vers_f = semget(IPC_PRIVATE, 1, 0666);

if (p_vers_f 0){ fprintf(stderr, "semget() erreur.\n");

exit(-1);} semctl(p_vers_f, 0, SETVAL, 0); /* Init(p_vers_f, 1); */

Systèmes d'exploitationA. Queudet

Projet DVD-MIAGE 2010

pid = fork();

if (pid==0){ for (i=97; i< 23; i++){ semop(p_vers_f, &operation_P, 1); /* P(p_vers_f); */

printf("%c\n",i);

semop(f_vers_p, &operation_V, 1); /* V(f_vers_p); */} }else {

for (i=65; i< 1; i++){ semop(f_vers_p, &operation_P, 1); /* P(f_vers_p); */

printf("%c\n",i);

semop(p_vers_f, &operation_V, 1); /* V(p_vers_f); */} }

/* On peut détruire les sémaphores */

semctl(p_vers_f, 0, IPC_RMID, 0);

semctl(f_vers_p, 0, IPC_RMID, 0);

return(0);} Systèmes d'exploitationA. Queudet