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 packProjet 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