Ce problème vise à enrichir les connaissances des étudiants informaticiens au niveau de l'utilisation des sémaphores qui servent à synchroniser les processus entre eux, résoudre le problème d'exclusion mutuelle et régler les conflit d'accès concurrent des processus distinct à une même ressource (...)
[...] Objectif de ce TP : Ce problème vise à enrichir les connaissances des étudiants informaticiens au niveau de l'utilisation des sémaphores qui servent à synchroniser les processus entre eux, résoudre le problème d'exclusion mutuelle et régler les conflit d'accès concurrent des processus distinct à une même ressource . Plan : Le problème des Philosophes : Il s'agit d'un problème très ancien, dont DIJKSTRA a montré en 1965 qu'il modélise bien les processus en concurrence pour accéder à un nombre limité de ressources. philosophes sont assis autour d'une table ronde. Chaque philosophe a devant lui une assiette de spaghettis si glissants qu'il lui faut deux fourchettes pour les manger. Or, il n'y a qu'une fourchette entre deux assiettes consécutives. L'activité d'un philosophe est partagée entre manger et penser. [...]
[...] Une fourchette i est à gauche du philosophe i et à droit du philosophe modulo philosophe. Le sémaphore est vaut un si la fourchette i est sur la table, puis chaque philosophe exécute son code à travers une fonction philosophe(i) qui rassoit en paramètre le numéro du philosophe. #include #include #include #include #include #include #include #define PHILO 5 Nombre de philosophes pid_t mainPid; pid du processus principal int semid; l'ensemble de sémaphores utilise 2 tableaux de 2 opérations sur sémaphores struct sembuf op_debut[2], avant de manger op_fin[2]; après manger void penser(),manger(int),philosophe(int); manipulateur de terminaison sur réception du signal SIGINT: - les processus philosophes sont termines et - l'ensemble de sémaphores est supprime par le processus père avant qu'il ne se termine void manipFin(int sig){ if(getpid() mainPid) semctl(semid, IPC_RMID, 0);/*semct permet la destruction de la valeur de sémaphore avec la commande IPC_RMID*/ exit(0); } main(){ int int val; mainPid = getpid(); sauvegarde du pid du processus père srand(getpid()); initialisation du générateur de nombre Création d'un ensemble de PHILO sémaphores: un sémaphore est associe a une baguette. [...]
[...] Ils constituent aussi une solution pour résoudre le problème d'exclusion mutuelle, et permettent en particulier de régler les conflits d'accès concurrents de processus distincts à une même ressource. L'implémentation qui en faite ressemble à une synchronisation «sleep/wakeup Les sémaphores sont un outil élémentaire de synchronisation qui évite l'attente active. Un sémaphore s = un entier ; une file d'attente ; deux primitives et V(s). Soit p le processus qui effectue ou V(s). si [...]
[...] Quand un philosophe a faim, il tente de prendre les deux fourchettes encadrant son assiette. S'il y parvient, il mange, puis il se remet à penser. Le problème qui se pose c'est : Comment modéliser le comportement de chaque philosophe afin d'éviter les privations et les blocages ? La solution : La résolution de ce problème doit tout à la fois éviter : l'inter blocage : par exemple tous les philosophes prennent leur fourchette gauche en même temps et attendent que la fourchette droite se libère. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture