GESTION D UN FAST FOOD

Dimension: px
Commencer à balayer dès la page:

Download "GESTION D UN FAST FOOD"

Transcription

1 GESTION D UN FAST FOOD LO41 Pierre ALAUZET Michael PALUMBO 15/01/2008

2 INTRODUCTION D ans le cadre de l UV LO41, il nous a été demandé de réaliser un projet mettant en œuvre des processus, ce qui correspond à de la programmation bas niveau utilisé par les systèmes d exploitation. L objectif étant d apprendre à manipuler les processus d un système et de mettre en œuvre des méthodes de communication. Notre projet consiste à simuler la gestion d un fast-food. SOMMAIRE I. Analyse du fonctionnement d un fast food p2 a. Les clients b. Les employés (cuisiniers et serveurs) c. Gestion de la cuisine et de la nourriture p3 d. Gestion des commandes et du service e. Gestion de la salle de restauration II. Description de la solution générale du problème p4 III. Représentation des données IV. Communication entre les différents acteurs p5 V. Modélisation en Réseau de Pétri p7 VI. Implémentation p9 1

3 I. Analyse du fonctionnement d un fast food Le cahier des charges indique que le programme doit simuler le fonctionnement d un fast food, du service de restauration sur place et du service de vente de nourriture à emporter. Le problème peut être décomposé en sous-problèmes : a. Les clients b. Les employés (cuisiniers et serveurs) c. Gestion de la cuisine et de la nourriture d. Gestion des commandes et du service e. Gestion de la salle de restauration a. Les clients On distingue les clients en voiture des clients à l intérieur du magasin. On considérera ici qu une voiture est un seul client. Des clients à l intérieur du magasin, on distingue également ceux qui se restaurent sur place de ceux qui viennent chercher de la nourriture à emporter. Les clients arrivent de façon aléatoire au fast food calquée sur une fonction sinusoidale. Le cycle générique d un client est : (1) attente aux caisses (2) commander (3) effectuer le paiement (4) recherche de places (5) consommation Il est évident que pour les clients qui emportent la nourriture, le cycle s arrête à l étape 3. b. Les employés (cuisiniers et serveurs) Il y a un nombre fixe d employés déterminé au départ. Les taches des employés sont les suivantes : (pendant une unité de temps Tx) o Préparer une unité de nourriture : Tp o Prendre les commandes et encaisser le paiement : Tc o Servir une unité de nourriture : Ts 2

4 Il y a 2 types d employé : o ceux qui font à manger : les cuisiniers o et ceux qui s occupent du client : les serveurs, qui prennent la commande et servent le client. On répartit les employés dans ces 2 catégories de façon homogène. Les serveurs en salle sont différents de ceux au drive-in. Le cycle générique d un employé au service est : (1) attente clients (2) réception commande (3) effectuer le paiement (4) livraison de la nourriture c. Gestion de la cuisine et de la nourriture Il est évident que plus il y a de cuisiniers, plus la cadence est élevée. La gestion de préparation de la nourriture est fonction du nombre de clients en attente. On définit un seuil à partir duquel un cuisinier travaille en continu : o en deçà de 3 clients par cuisinier dans la file d attente, le cuisinier prépare la nourriture en fonction des commandes envoyées par les serveurs o à partir de 3 clients par cuisinier détectés dans la file d attente, les serveurs envoient un message aux cuisiniers afin qu ils préparent la nourriture en continu. Un produit en attente au-delà de deux minutes est considéré comme impropre à la consommation. d. Gestion des commandes et du service Une commande à emporter est prioritaire. Si le client mange sur place, le client va dans la salle avec la nourriture commandée. e. Gestion de la salle de restauration Il y a un nombre défini de places dans la salle. Le temps d occupation d une personne dans la salle dépend du nombre d unité de nourriture qu il a commandé. 3

5 II. Description de la solution générale du problème Des clients arrivent de façon aléatoire au fast food, en voiture ou dans le restaurant. Il se crée alors deux files d attente. Les serveurs prennent les commandes sachant qu une commande à emporter est prioritaire. Afin de déterminer cela, on introduit la notion de «poids» à une commande. Ainsi une commande prioritaire a un poids de 3 et une commande normale a un poids de 1. De ce fait, lorsque deux commandes sont en concurrence, on regarde laquelle a le poids le plus élevé afin de servir le client prioritaire en premier. A chaque fois qu une commande est mise en attente par rapport à une autre, son poids augmente. Elle sera donc prise en charge à un certain moment étant donné que son poids sera plus élevé qu une autre. En fonction du nombre de personnes en file d attente (seuil de 3 personnes par cuisinier), les serveurs communiquent avec la cuisine pour indiquer le nombre d unités de nourriture à préparer ou qu ils doivent travailler en continu parce qu il y a du monde. Lorsque la commande est satisfaite (il y a assez de nourriture), le client repart avec sa nourriture ou alors va dans la salle de restauration (attend si toutes les places sont prises). Schéma représentatif du Fast Food : (1) Attente en file d attente du client (2) Prise de la commande (3) Paiement et Livraison de la nourriture (4) Consommation 4

6 III. Représentation des données Chaque client et chaque employé est un processus. On a alors besoin de structure de données pour manipuler efficacement nos entités : Client : o pid o type o Commande Commande : o poids o nb_nourritures Unité de nourriture o date_creation On stockera dans un tableau les PID des cuisiniers. (mémoire partagée) On représentera les files d attente par des files de messages. IV. Communication entre les différents acteurs Serveurs Cuisiniers Afin que les serveurs et la cuisine communiquent, on utilisera les signaux et une variable globale. Une variable globale, représentant le nombre de nourritures à préparer en cuisine. Cette variable est mise à jour par les serveurs lorsque le nombre de personnes en file d attente est inférieur à 3 personnes par cuisinier. Dans le cas contraire, elle est réinitialisée à zéro. Dans les 2 cas, un signal est envoyé en cuisine pour dire qu on se trouve dans un cas ou dans l autre. - Si l on se trouve dans le cas où il faut préparer la nourriture en fonction des commandes, les cuisiniers regardent d eux-mêmes le compteur de nourriture à produire et ainsi préparent de la nourriture. - Dans l autre cas, les cuisiniers travailleront en continu. Serveurs Clients La communication entre un serveur et un client s effectue par un tube nommé afin d échanger une information (les nourritures). Concernant la salle de restauration, une variable globale servira à savoir combien de places disponibles il reste. Ainsi, les clients qui doivent manger sur place regarderont dans cette variable, s il y a de la place, ils occupent une place sinon ils attendent qu une place se libère. Le premier arrivé sera le premier à pouvoir s asseoir pour manger. 5

7 On représente ici l'interaction et la communication entre les différents acteurs. Cela nous permet d'identifier quels types de messages et de signaux sont envoyés, mais également de savoir qui les émet et qui les reçoit

8 V. Modélisation en Réseau de Pétri a. Fonctionnement du Fast Food à la commande Ce réseau de Pétri modélise le fonctionnement du Fast Food lorsque l'on se trouve dans la situation où il n'y a pas plus de 3 clients par cuisinier en file d attente. C'est-à-dire que la production des unités de nourriture se fait en fonction des unités de nourriture commandées. Contexte : - 50 clients maximum dans la file d'attente - 5 serveurs - 5 cuisiniers - 20 places disponibles dans la salle de restaurant 7

9 b. Fonctionnement du Fast Food en continu Ce réseau de Pétri modélise le fonctionnement du Fast Food lorsque l'on se trouve dans la situation où il y a plus de 3 clients par cuisinier en file d attente. C'est-à-dire que la production des unités de nourriture se fait de façon continue. Contexte : - 50 clients maximum dans la file d'attente - 5 serveurs - 5 cuisiniers - 20 places disponibles dans la salle de restaurant 8

10 VI. Implémentation a. Structure et hiérarchie du projet Le programme s'exécute à partir du Makefile qui se trouve à la racine du projet. En effet, à partir d un Makefile bien configuré, on laisse de côté les tâches fastidieuses de compilation à chaque fois que l on souhaite tester un programme par exemple. Trois commandes sont alors disponibles : o make : commande principale : compile le tout, crée la librairie et affiche un menu o make start : lance le programme (après l avoir compilé automatiquement) o make clean : nettoie l environnement en supprimant tous les fichiers et dossiers créés lors de la compilation. Nous avons décidé d'organiser notre code source en dossiers par soucis de clarté. Nous aurons donc : o "src" : dossier des fichiers d implémentation ".c" o "inc" : dossier des entêtes ".h" Le reste devient transparent pour l'utilisateur, car la création des fichiers nécessaires à l'exécution du programme seront créée automatiquement par le Makefile, simplifiant sa construction. Trois dossiers seront créés, puis effacés avec la commande «make clean» : o "obj" : dossier des fichiers temporaires ".o" o "lib" : dossier de la librairie ".a" construite à partir des fichiers sources o "exe" : dossier des fichiers exécutables b. Les fichiers Nous avons décidé de diviser au maximum notre code pour simplifier la compréhension du programme et essayer de coller à la réalité. On aura donc autant de fichier qu'il y a de "type" de processus dans ce programme. En effet, chaque fichier symbolise le comportement d'un acteur particulier du Fast-Food : o client.c : o serveur_drive.c : o serveur_mag : o cuisinier : les processus clients les serveurs s'occupant de la vente au drive in les serveurs s'occupant de la vente en salle les processus cuisiniers 9

11 Afin de créer les processus cuisiniers et serveurs, on passera par le fichier main.c et pour ce qui est des clients, on passera par le fichier main_client.c qui s occupera de créer des clients de façon aléatoire. Fonction aléatoire simulant l arrivée des clients Nous avons décidé de ne pas se contenter d une fonction linéaire pour simuler l arrivée des clients, nous avons donc utilisé une fonction sinusoïdale. Ainsi, le flux d arrivée des clients varie. Au début, beaucoup de clients arrivent et au fur et à mesure, les clients arrivent de façon plus espacée, puis ca redevient rapide, puis ca s arrête, etc, le cycle continue. float debut = -1.5; float fin = 4.7; float x = debut; float coeff; srand(time(null)); while(true) int i; if(x>=fin) x = debut; coeff = cos(x); x += 0.1; if(coeff>0) for(i=0; i<2 ; i++) int nsleep, nrand; nrand = (int) ceil(10*coeff); nsleep = 2+rand()%nRand; sleep(nsleep); else /* Creation d un client avec des paramètres aléatoires */ printf("aucun client n'arrive...\n"); sleep(2); Exemple : Au début, le cosinus est proche de 0 donc le nrand vaut 1. L'intervalle pour le sleep est donc [2;3]. A force que le cosinus augmente, plus tard, au maximum, l'intervalle sera [2;12]. C'est donc l'intervalle pour la fonction rand qui augmente puis diminue... d où le fait qu il y a plus ou moins de clients qui arrivent. 10

12 c. Les fichiers d entête "cle.h" : Afin de coller à la conception du partage entre processus pour ce qui est des méthodes de communication, nous avons décidé de réunir tout les identifiants, c'est-à-dire les "clés", de toutes les créations de sémaphores, files de messages et mémoires partagées, dans un fichier commun nommé "cle.h". Chaque processus peut ainsi aller "puiser" dans ce fichier pour ensuite attacher la ressource voulue : la mémoire, la file de messages ou le sémaphore avec lequel il doit travailler. "types.h" : Ce fichier nous permet de réunir toutes les valeurs initiales par défaut, les constantes nécessaires. On y définit également le type bool, le type commande, le type client et le type nourriture. d. Les procédés mis en œuvre La création de processus : Nous utiliserons la méthode du recouvrement avec la commande "execl" pour la création de tout nos processus. Par soucis de simplification, nous passerons par la même fonction pour la création des serveurs, des cuisiniers et des clients. Cette fonction sera nommée "creerprocessus". Voici le code source de cette fonction : void creerprocessus(char* prog, int nb1, int nb2, bool chef) int i; pid_t pid; char param1[16], param2[16], param3[16]; sprintf(param1, "%d", nb1); sprintf(param2, "%d", nb2); for(i=0 ; i<nb1 ; i++) if(i == 0 && chef == TRUE) sprintf(param3, "%d", TRUE); else sprintf(param3, "%d", FALSE); switch(pid = fork()) case (pid_t) -1 : erreurfin("erreur du Fork!", 1); case (pid_t) 0 : /* on est dans le processus fils */ execl(prog, prog, param1, param2, param3, NULL); default : /* on est dans le processur pere */ if ( strcmp(prog,"exe/cuisinier") == 0 ) 11

13 recuperation des identifiants */ shmat(idcommunications[3], 0, 0); /* Initilisation des outils de communications et int idcommunications[7]; initcommunications(0, 0, 0, CLE_MEM_PID_CUISINIERS, 0, 0, 0, (int*) &idcommunications); int *pid_cuisiniers = (int*) pid_cuisiniers[i] = pid; On va donc créer des processus fils. Ceux-ci vont être recouverts grâce à la commande «execl", par le code du programme correspondant (serveur_mag.c, serveur_drive.c, cuisiniers et client.c). Cette fonction nous permet de passer des informations importantes aux processus fils créés, comme le nombre de cuisiniers, de serveurs, de serveurs en magasin et de serveurs en salle (param1 et param2). Bien sûr, en fonction du processus fils créé, on choisira d'envoyer telle ou telle information. Quand à param3, il nous permet de créer un processus coordinateur de ses semblables : les cuisiniers et les serveurs auront chacun un processus chef, qui aura pour fonction de coordonner et d'envoyer des informations communes à tous ces collègues respectifs. On stocke dans un tableau les pid des cuisiniers quand on est dans ce cas. Les files d'unités de nourritures, les files d attente de clients : On a choisit de représenter toutes ces files par le concept des files de messages. En effet, dans la vie réelle, les clients qui arrivent dans un fast food attendent à la suite, et sont servis chacun leur tour par ordre d'arrivée. Les unités de nourritures sont également produites et stockées sur un "tapis" d'arrivée les unes après les autres. Avec les files de messages, on peut appliquer la règle du FIFO (First In, First Out), c'est pourquoi il était particulièrement intéressant de les utiliser ici pour les files d'attentes de clients et de nourritures. Par contre, on utilise cette règle à partir de l'entrée du client dans le fast food, jusqu'à la prise de la commande. Ensuite, les clients seront servis par ordre de priorité. Cela sera applicable facilement puisqu'un client est enlevé de la file d'attente dès lors qu'un serveur peut s'occuper de lui. Après, s'applique la concurrence entre les différents serveurs, pour qui va prendre et servir les unités de nourritures en premier à son client. 12

14 Voici nos fonctions d'initialisation et de récupération de files de messages : /* Initialise une file de message identifiee par une cle */ /* Cree la file si elle n'existe pas sinon renvoie juste l'identifiant */ int initfile(key_t cle) int msgid; /* Crée la file si elle n'existe pas */ if((msgid = msgget(cle, IPC_CREAT IPC_EXCL 0666)) == -1) /* Recupere juste le msgid si elle existe déja */ if((msgid = msgget(cle,0)) == -1) erreurfin("erreur msgget : ", 1); return msgid; /* Renvoie le nombre de messages dans la file identifie par msgid */ int nbmessagesfile(int msgid) struct msqid_ds buf; if(msgctl(msgid,ipc_stat,&buf)== -1) erreurfin("erreur msgctl :", 1); return buf.msg_qnum; La fonction "initfile" initialise une file de message grâce à la fonction "msgget" : Si la file de message n'existe pas encore, alors msgget crée une file de message à partir d'une clé donnée à l'appel de la fonction initfile et lui donne les droits d'écriture, de lecture et de modification. Sinon msgget récupère l identifiant de la file de message déjà créée grâce à la clé donnée à l'appel de la fonction initfile. La fonction initfile retourne l'identifiant de la file de message afin de pouvoir la manipuler par la suite. La fonction "nbmessagesfile" permet de récupérer le nombre de messages stockés dans une file de messages. Cette fonction nous est particulièrement utile pour connaître, par exemple, le nombre de clients en attente et ainsi adapter la production "à la commande" ou "en continu" des unités de nourritures par les cuisiniers. Les commandes de nourritures : Pour symboliser les commandes de nourritures, nous utiliserons une mémoire partagée. Les serveurs reçoivent des commandes, et envoi dans cette mémoire le nombre d'unités de nourriture qui ont été commandé, par chacun de leur client, à tout moment. Tous les cuisiniers doivent se référer à ce "nombre" commun de nourritures qu'ils doivent produire ou qu'il reste à 13

15 produire. Par contre, on utilise cette mémoire partagée que dans le cas ou les cuisiniers doivent produire "à la commande" et non "en continue". Pour créer et récupérer des mémoires partagées, on procède de la même façon que pour les files de message, à la différence que les fonctions utilisées sont propres à la gestion des mémoires partagée : /* Initialise une memoire partagee */ /* Cree la memoire partagee si elle n'existe pas sinon renvoie juste l'identifiant */ int initmem(key_t cle, size_t taille) int shmid; if((shmid = shmget(cle, taille, IPC_CREAT 0666)) == -1) erreurfin("erreur shmget : ", 1); return shmid; On utilise "shmget" pour créer une mémoire partagée avec une clé donnée ou pour récupérer l identifiant d une mémoire déjà créée. La gestion des attentes et des coordinations entre les processus: Afin de représenter l'attente entre le moment où le serveur s'occupe d'un client, et le moment où il redevient disponible, ou encore entre le moment ou le client rentre dans la salle de restaurant pour manger et le moment où il en sort, on utilise les sémaphores. On les utilise également pour gérer l accès à une ressource critique. (mémoire partagée par exemple) Pour créer, récupérer et utiliser des sémaphores, nous nous basons sur la fonction de la gestion des mémoires partagées, à la différence que les fonctions utilisées sont propres à la gestion des sémaphores. La fonction d'initialisation d'un tableau de sémaphores est la suivante : /* Initialise un tableau de semaphores */ /* Cree le semaphore si il n'existe pas sinon renvoie juste l'identifiant */ int initsem(key_t cle, bool init) int semid; à 1 */ if((semid = semget(cle, 6, IPC_CREAT 0666)) == -1) erreurfin("erreur semget : ", 1); /* C est aussi ici qu on initialise les 5 sémaphores qui doivent être initialisés /* Initialisation de certains semaphores a 1 */ if(init == TRUE) if (semctl(semid,2,setval,arg) == -1) erreurfin("initsem : Erreur semctl : ", 1); 14

16 if (semctl(semid,3,setval,arg) == -1) erreurfin("initsem : Erreur semctl : ", 1); if (semctl(semid,4,setval,arg) == -1) erreurfin("initsem : Erreur semctl : ", 1); if (semctl(semid,5,setval,arg) == -1) erreurfin("initsem : Erreur semctl : ", 1); if (semctl(semid,6,setval,arg) == -1) erreurfin("initsem : Erreur semctl : ", 1); return semid; Le principe est le même qu'avec msgget pour les files de message, sauf qu'ici on utilise "semget". La fonction d appel de sémaphores qui servira pour les fonctions P et V : /* Appel le semaphore numero numsem et affecte l'operation op */ void appelsem(int numsem, int op) struct sembuf sempar; const int nbop = 1; key_t cle_sem; int semid; cle_sem = ftok("inc/cle.h", (key_t) CLE_SEM); semid = initsem(cle_sem); sempar.sem_num = numsem; sempar.sem_op = op; sempar.sem_flg = 0; if(semop(semid,&sempar,nbop) == -1) erreurfin("appelsem", 1); En appelant appelsem, on effectue une opération sur un sémaphore numéro "numsem". Les fonctions d'utilisation d'un sémaphore : /* Fonction P bloquante sur le semaphore numero numsem */ void P(int numsem) appelsem(numsem,-1); /* Fonction P debloquante sur le semaphore numero numsem */ void V(int numsem) appelsem(numsem,1); 15

17 P() et V() sont les fonctions bloquantes et débloquantes que l'on peut appeler pour l'utilisation d'un sémaphore. Voici un exemple d'utilisation de ces fonctions : Côté client : /* Attendre qu'un serveur le prenne en charge */ if(moi.type == 0) P(ATTENDRE_DRIVE); else P(ATTENDRE_MAG); Côté serveur : /* Le serveur est disponible */ /* Déblocage du client */ V(ATTENDRE_MAG); ATTENDRE_MAG et ATTENDRE_DRIVE sont deux constantes globales définies dans le fichier «type.h» programme, qui servent à identifier le numéro du sémaphore que l'on utilise. Le client attend jusqu'à ce qu'un serveur soit disponible : P(ATTENDRE_X). Le serveur pourra être de type serveur en magasin (X = MAX) ou serveur au drive (X =DRIVE). Ici, c'est un serveur en magasin qui est disponible (X = MAX). Il débloque le client : V(ATTENDRE_MAG). L'échange d'unités de nourriture : Une fois que le serveur a envoyé la commande au cuisinier, celui-ci s'occupe de produire les unités de nourriture et de les stocker sur une file d'attente. Lorsque le serveur vient récupérer les unités de nourritures, il doit ensuite les "transmettre" au client. Pour symboliser cet échange, nous avons employé le concept des tubes nommés. L'envoi d'une unité de nourriture par un serveur : char nomtube[16], chemintube[32]; sprintf(nomtube,"%d",client.pid); sprintf(chemintube,"%s%s","exe/",nomtube); /* Creation du fichier fifo (tube nomme) qui nous permet d'ecrire et de lire des informations (echange de nourritures) */ 16

18 if ( mknod(chemintube, S_IFIFO 0666,0) == -1) erreurfin("creation impossible du tube nomme : ", 1); /* Ouverture du tube nomme pour ecrire une information */ if ( (p = open(chemintube, O_WRONLY, 0) ) == -1) erreurfin("ouverture impossible du tube nomme : ", 1); /* Envoie de la nourriture */ write(p, &nourriture, sizeof(nourriture_t)); nourritures_donnees++; /* Fermeture du descripteur de fichier */ close(p); /*... lecture du fichier par le client...*/ /* Suppression du tube nomme */ unlink(chemintube); Le serveur créé le "moyen de communication" entre le client et lui en créant un tube nommé. Techniquement parlant, la fonction "mknod" créée un fichier que l'on appelle "chemintube". Pour stocker les unités de nourriture dans ce fichier, il doit y "écrire" l'information. Pour cela, il ouvre le fichier avec la fonction open (en écriture seulement) à l'aide d'un descripteur de fichier "p" qui lui permettra de manipuler ce fichier. Il peut ensuite y écrire sa structure d'unité de nourriture. Il ferme le fichier pour permettre au lecteur (ici le client) de l'ouvrir et de lire l'information. Plus tard, lorsque le client aura reçu l'information, il pourra supprimer le tube nommé / fichier. La réception d'une unité de nourriture par le client : /* Ouverture du tube nomme pour lire une information*/ if ( (p = open(chemintube, O_RDONLY, 0) ) == -1) erreurfin("ouverture impossible du tube nomme : ", 1); /* Reception de la nourriture */ int nourritures_recues = 0; while(nourritures_recues!= moi.commande.nb_nourritures) read(p, &nourriture, sizeof(nourriture_t)); nourritures_recues++; /* Fermeture du descripteur de fichier */ close(p); 17

19 Après avoir testé si le tube nommé a été créé, le client l'ouvre (en lecture seulement). Il lit l'information contenu dans ce tube nommé, qui correspond ici à la structure d'une unité de nourriture, qu'il prend. Une fois l'information transmise, il ferme le fichier. C'est à ce moment là seulement, que le serveur peut fermer le tube de communication qui le liait à son client. La réunion des procédés de communication : Nous utilisons énormément de procédés de communication. Il devenait donc nécessaire de simplifier au maximum l'écriture du code en créant une fonction générale d'initialisation et de récupération de mémoires partagées, de files de messages et de sémaphores. Cette fonction, nous l'avons appelée "initcommunication". Voici son code : /* Initialise les communications */ /* Cree les moyens de communication s'ils n'existent pas sinon renvoie les identifiants dans un tableau */ void initcommunications(key_t semaphore, key_t file_clients_mag, key_t file_clients_drive, key_t mem_pid_cuisiniers, key_t mem_nb_nourritures_prod, key_t file_nourritures, key_t mem_nb_personnes_salle, bool initialisationsem, int* tab) key_t cle; /* Initialisation des semaphores */ if(semaphore!= 0) cle = ftok("inc/cle.h", semaphore); tab[0] = initsem(cle, initialisationsem); /* Initialisation des files de messages */ if(file_clients_mag!= 0) cle = ftok("inc/cle.h", (key_t) file_clients_mag); tab[1] = initfile(cle); if(file_clients_drive!= 0) cle = ftok("inc/cle.h", (key_t) file_clients_drive); tab[2] = initfile(cle); if(file_nourritures!= 0) cle = ftok("inc/cle.h", (key_t) file_nourritures); tab[5] = initfile(cle); /* Initialisation des memoires partagees */ if(mem_pid_cuisiniers!= 0) 18

20 cle = ftok("inc/cle.h", (key_t) mem_pid_cuisiniers); tab[3] = initmem(cle, sizeof(pid_t)); if(mem_nb_nourritures_prod!= 0) cle = ftok("inc/cle.h", (key_t) mem_nb_nourritures_prod); tab[4] = initmem(cle, sizeof(int)); if(mem_nb_personnes_salle!= 0) cle = ftok("inc/cle.h", (key_t) mem_nb_personnes_salle); tab[6] = initmem(cle, sizeof(int)); Le principe de cette fonction est simple. Elle réunit les différents moyens de communications mis en œuvre dans notre programme étant donné que chacun d entre eux et utilisé plusieurs fois. Elle s utilise de cette façon : /* Initilisation des outils de communications et recuperation des identifiants */ int idcommunications[7]; initcommunications(0, 0, 0, 0, CLE_MEM_NOURRITURES_A_PRODUIRE, 0, CLE_MEM_NB_PERSONNES_SALLE, FALSE, (int*) &idcommunications); On passe en paramètre les clés des moyens de communication dont on veut récupérer l identifiant ou créer s il n existe pas. On met 0 lorsqu un moyen de communication ne nous intéresse pas et pour l avant dernier paramètre, true si on souhaite initialiser les sémaphores. On récupère ensuite dans un tableau les identifiants voulus. Le nettoyage des procédés de communication : Afin de rassembler les fonctions de suppression des sémaphores, files de messages et mémoires partagées, une fois le programme terminé, nous avons créé la fonction «nettoyageenvironnement()". Elle est notamment appelée lorsque l on fait un <CTRL C> pour stopper le programme afin de nettoyer l environnement. /* Nettoie l'environnement */ /* Supprime files de message, semaphores et memoires partagees crees */ void nettoyageenvironnement(int num) if(num!= SIGINT) erreurfin("erreur avec un signal!", 1); 19

21 /* Initilisation des outils de communications et recuperation des identifiants */ int idcommunications[7]; initcommunications(cle_sem, CLE_FILE_CLIENTS_MAG, CLE_FILE_CLIENTS_DRIVE, CLE_MEM_PID_CUISINIERS, CLE_MEM_NOURRITURES_A_PRODUIRE, CLE_FILE_NOURRITURES, CLE_MEM_NB_PERSONNES_SALLE, FALSE, (int*) &idcommunications); /* Suppression des semaphores */ semctl(idcommunications[0], 0, IPC_RMID, NULL); /* Suppresion des files de messages */ msgctl(idcommunications[1], IPC_RMID, NULL); msgctl(idcommunications[2], IPC_RMID, NULL); msgctl(idcommunications[5], IPC_RMID, NULL); /* Suppresion des memoires partages */ shmctl(idcommunications[3], IPC_RMID, NULL); shmctl(idcommunications[4], IPC_RMID, NULL); shmctl(idcommunications[6], IPC_RMID, NULL); printf("\n\n----- Environnement purge : memoires partagees, files de messages et semaphores detruits -----\n\n"); exit(1); Les fonctions de suppression des sémaphores, des files de messages et des mémoires partagés sont "semctl", "msgctl" et "shmctl". On les utilise en indiquant l identifiant. La coordination des processus et la gestion de la production en cuisine: Afin de coordonner nos processus, nous avons décidé de créer un "chef" cuisinier et un "chef" serveur, responsable de l'entente et de la synchronisation de tout les processus collègues. Ces chefs utiliseront les signaux pour se coordonner. En effet, puisque nous avons décidé que les cuisiniers travailleraient différemment selon le nombre de clients en file d'attente, il a fallu créer un chef cuisinier. Voici le code source du chef des serveurs : /* Si c'est le chef des serveurs */ if(chef == TRUE) int j; int nb_cuisiniers = atoi(argv[2]); /*...envoi d'un signal de production en fonction du nombre de clients en file d'attente */ if( ( ( nbmessagesfile(idcommunications[1]) + nbmessagesfile(idcommunications[2]) 20

22 ) / ( atoi(argv[1])*2 ) ) < 3 ) /* Production a la commande (moins de 3 clients pas serveur) */ if( ordre_cuisine == 1 ) for(j=0 ; j<nb_cuisiniers ; j++) kill(pid_cuisiniers[j], SIGUSR1); else ordre_cuisine = 0; /* Production en continu (plus de 3 clients pas serveur) */ if( ordre_cuisine == 0 ) for(j=0 ; j<nb_cuisiniers ; j++) kill(pid_cuisiniers[j], SIGUSR2); (*nb_nourritures_a_produire) = 0; ordre_cuisine = 1; Il a pour rôle de contrôler la file d'attente des clients et d'envoyer un signal aux cuisiniers, en fonction du nombre de clients en attente. Si les serveurs sont en nombre suffisant pour gérer l'attente des clients, Alors il enverra le signal SIGUSR1. Sinon, il enverra le signal SIGUSR2. Au départ, les cuisiniers sont en mode «travail à la demande». 21

23 CONCLUSION Tout au long de ce projet, nous nous sommes obligés à respecter au mieux l'objectif que l'on s'était fixé : adapter un problème concret à un langage informatique, ici le langage C. Lorsque l'on doit créer des acteurs (clients, cuisiniers, serveurs), qui "vivent" et qui communiquent entre eux, symboliser des objets comme une unité de nourriture et construire des actions successives, ceci n'est pas évident de le traduire en code! C'est pourquoi il a été très important pour nous d'apporter le maximum de nos connaissances acquises lors de l'uv LO41, afin de représenter le problème de la gestion d'un fast food de la manière la plus concrète possible. L'utilisation de sémaphores, de files de messages, de mémoires partagées, de tubes nommés et de recouvrement a été motivée et justifiée par cet objectif. Ainsi, on aura pu représenter réellement une unité de nourriture à qui l'on donne vie en cuisine grâce à nos bons cuisiniers, jusqu'à sa digestion dans le ventre de notre client en salle ou en voiture! On aura été confronté à de nombreux obstacles, comme par exemple la création, la récupération et la synchronisation des processus de communication, ou encore la coordination des cuisiniers et des serveurs. L accès aux ressources critiques a également été un point délicat. Malgré cela, nous retiendrons qu'il a été intéressant et formateur d'étudier ses problèmes et de les résoudre, ainsi que d'exploiter au maximum les outils que nous propose le langage C pour représenter la gestion d'un Fast Food. Il ne nous reste qu'à vous souhaiter un Bon Appétit! 22

I. Introduction aux fonctions : les fonctions standards

I. Introduction aux fonctions : les fonctions standards Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons

Plus en détail

Cours 6 : Tubes anonymes et nommés

Cours 6 : Tubes anonymes et nommés Cours 6 : Tubes anonymes et nommés Mécanisme de communications du système de fichiers I-node associé. Type de fichier: S_IFIFO. Accès au travers des primitives read et write. Les tubes sont unidirectionnels

Plus en détail

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique Communications entre Processus Communication par tubes. TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique Exemple 1: On a deux processus Père/Fils. Le père

Plus en détail

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores INTRODUCTION AUX SYSTEMES D EXPLOITATION TD2 Exclusion mutuelle / Sémaphores Exclusion mutuelle / Sémaphores - 0.1 - S O M M A I R E 1. GENERALITES SUR LES SEMAPHORES... 1 1.1. PRESENTATION... 1 1.2. UN

Plus en détail

Programmation système en C/C++

Programmation système en C/C++ Programmation système en C/C++ Jean-Baptiste Vioix (jb.vioix@free.fr) LE2I - ENESAD http://jb.vioix.free.fr 1-41 Programmation en C/C++ sous Unix Il existe des très nombreux outils de développement sous

Plus en détail

Cours Programmation Système

Cours Programmation Système Cours Programmation Système Filière SMI Semestre S6 El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda m.daoudi@fso.ump.ma Février

Plus en détail

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation : Algorithmique et programmation : STRUCTURES DE DONNÉES A. Structure et enregistrement 1) Définition et rôle des structures de données en programmation 1.1) Définition : En informatique, une structure de

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

Programmation système

Programmation système Programmation système Christine Solnon Table des matières 1 Les processus 2 1.1 Etats d un processus................................... 2 1.2 Descripteur d un processus (PCB)...........................

Plus en détail

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing 3/4/27 Programmation Avancée Multimédia Multithreading Benoît Piranda Équipe SISAR Université de Marne La Vallée Besoin Programmes à traitements simultanés Réseau Réseau Afficher une animation en temps

Plus en détail

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers. I Présentation : Dans le chapitre 1, nous avons vu comment utiliser les appels-systèmes de bas niveau pour créer et accéder à des fichiers sur le disque. Nous avons notamment mis en évidence leur dépouillement

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique. École Polytechnique de Montréal Département de Génie Informatique et Génie Logiciel Cours INF2610 Contrôle périodique Automne 2013 Date : 11 octobre 2013 de 18h à 20h Professeur : Boucheneb Hanifa Documentation

Plus en détail

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie Chapitre I : Les bases du C++ Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie du logiciel, et ce depuis

Plus en détail

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran)  Processus = suite d'actions = suite d'états obtenus = trace Processus 1) Contexte 2) Modèles de Notion de Points de vue Modèle fourni par le SX Opérations sur les 3) Gestion des Représentation des Opérations 4) Ordonnancement des Niveaux d ordonnancement Ordonnancement

Plus en détail

3IS - Système d'exploitation linux - Programmation système

3IS - Système d'exploitation linux - Programmation système 3IS - Système d'exploitation linux - Programmation système 2010 David Picard Contributions de : Arnaud Revel, Mickaël Maillard picard@ensea.fr Environnement Les programmes peuvent être exécutés dans des

Plus en détail

Problèmes liés à la concurrence

Problèmes liés à la concurrence ENS Cachan Problématique Difficile de gérer la concurrence : Pas toujours facile d avoir des fonctions réentrantes. Risque de race condition : ex : x :=x+1 x :=x+1 On voudrait des blocs d instructions

Plus en détail

Introduction aux Systèmes et aux Réseaux

Introduction aux Systèmes et aux Réseaux Introduction aux Systèmes et aux Réseaux Cours 5 Processus D après un cours de Julien Forget (univ Lille1) Laure Gonnord http://laure.gonnord.org/pro/teaching/ Laure.Gonnord@univ-lyon1.fr Master CCI -

Plus en détail

Programme Compte bancaire (code)

Programme Compte bancaire (code) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; Programme Compte bancaire (code) namespace compte_bancaire /// Classe Program public

Plus en détail

SYSTÈME DE GESTION DE FICHIERS

SYSTÈME DE GESTION DE FICHIERS SYSTÈME DE GESTION DE FICHIERS - DISQUE 1 Les couches logiciels réponse requête Requêtes E/S Système E/S Pilote E/S Interruptions utilisateur traitement S.E. commandes S.E. S.E. matériel Contrôleur E/S

Plus en détail

REALISATION d'un. ORDONNANCEUR à ECHEANCES

REALISATION d'un. ORDONNANCEUR à ECHEANCES REALISATION d'un ORDONNANCEUR à ECHEANCES I- PRÉSENTATION... 3 II. DESCRIPTION DU NOYAU ORIGINEL... 4 II.1- ARCHITECTURE... 4 II.2 - SERVICES... 4 III. IMPLÉMENTATION DE L'ORDONNANCEUR À ÉCHÉANCES... 6

Plus en détail

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting IUT Bordeaux 1 2005-2006 Département Informatique Licence Professionnelle ~ SI TD Objets distribués n 3 : Windows XP et Visual Studio.NET Introduction à.net Remoting Partie 1 : l'analyseur de performances

Plus en détail

Projet de Veille Technologique

Projet de Veille Technologique Projet de Veille Technologique Programmation carte à puce - JavaCard Ing. MZOUGHI Ines (i.mzoughi@gmail.com) Dr. MAHMOUDI Ramzi (mahmoudr@esiee.fr) TEST Sommaire Programmation JavaCard Les prérequis...

Plus en détail

Le stockage local de données en HTML5

Le stockage local de données en HTML5 Le stockage local HTML5, pourquoi faire? Dans une optique de réduction des couts de maintenance, de déploiement, beaucoup d'entreprises ont fait le choix de migrer leurs applicatifs (comptables, commerciales,

Plus en détail

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs Utilisation des classes de PourCGI par Michel Michaud, version 2002-11-23 Les fichiers PourCGI.h et PourCGI.cpp rendent disponibles deux classes et une fonction libre qui permettent de faire facilement

Plus en détail

.NET - Classe de Log

.NET - Classe de Log .NET - Classe de Log Classe permettant de Logger des données Text Dans tous les projets, il est indispensable de pouvoir stocker de l'information textuelle : Pour le suivi des erreurs Pour le suivi de

Plus en détail

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

Utilisation d objets : String et ArrayList

Utilisation d objets : String et ArrayList Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons

Plus en détail

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Seance 2: Complétion du code de jeu. (durée max: 2h) Mot clé const et pointeurs: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Implémentez jeu_recupere_piece

Plus en détail

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE C.Crochepeyre MPS_SGF 2000-20001 Diapason 1 Les couches logiciels réponse SGF requête matériel matériel Requêtes E/S Système E/S Pilote E/S Interruptions Contrôleur

Plus en détail

PROJET 1 : BASE DE DONNÉES REPARTIES

PROJET 1 : BASE DE DONNÉES REPARTIES PROJET 1 : BASE DE DONNÉES REPARTIES GESTION D UNE BANQUE Elèves : David Bréchet Frédéric Jacot Charles Secrétan DONNÉES DU PROJET SSC - Bases de Données II Laboratoire de Bases de Données BD réparties

Plus en détail

Simulation d un système de paiement par carte bancaire

Simulation d un système de paiement par carte bancaire Simulation d un système de paiement par carte bancaire Mini projet IN301/IN3ST01-2009-2010 Sujet rédigé par Jean Cousty et Laurent Najman, très librement inspiré d un projet de Jérome Gueydan pour l ENSTA

Plus en détail

Cours Informatique Master STEP

Cours Informatique Master STEP Cours Informatique Master STEP Bases de la programmation: Compilateurs/logiciels Algorithmique et structure d'un programme Programmation en langage structuré (Fortran 90) Variables, expressions, instructions

Plus en détail

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7 Cahier des charges driver WIFI pour chipset Ralink RT2571W sur hardware ARM7 RevA 13/03/2006 Création du document Sylvain Huet RevB 16/03/2006 Fusion des fonctions ARP et IP. SH Modification des milestones

Plus en détail

Cours Langage C/C++ Programmation modulaire

Cours Langage C/C++ Programmation modulaire Cours Langage C/C++ Programmation modulaire Thierry Vaira BTS IRIS Avignon tvaira@free.fr «v0.1 Rappel Programmation modulaire (1/2) Le découpage d'un programme en sous-programmes est appelée programmation

Plus en détail

1.6- Génération de nombres aléatoires

1.6- Génération de nombres aléatoires 1.6- Génération de nombres aléatoires 1- Le générateur aléatoire disponible en C++ 2 Création d'un générateur aléatoire uniforme sur un intervalle 3- Génération de valeurs aléatoires selon une loi normale

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Poker. A rendre pour le 25 avril

Poker. A rendre pour le 25 avril Poker A rendre pour le 25 avril 0 Avant propos 0.1 Notation Les parties sans * sont obligatoires (ne rendez pas un projet qui ne contient pas toutes les fonctions sans *). Celles avec (*) sont moins faciles

Plus en détail

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES Leçon 11 PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES Dans cette leçon, nous retrouvons le problème d ordonnancement déjà vu mais en ajoutant la prise en compte de contraintes portant sur les ressources.

Plus en détail

Introduction à la programmation concurrente

Introduction à la programmation concurrente Introduction à la programmation concurrente Moniteurs Yann Thoma Reconfigurable and Embedded Digital Systems Institute Haute Ecole d Ingénierie et de Gestion du Canton de Vaud This work is licensed under

Plus en détail

Profil de fonction 3.3. Magasinier

Profil de fonction 3.3. Magasinier Profil de fonction 3.3 Magasinier Magasinier -88- juin 1996 Le magasinier Caractéristiques de la fonction Les tâches, responsabilités et compétences d'un magasinier sont essentiellement de nature opérationnelle.

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

Java Licence Professionnelle 2009-2010. Cours 7 : Classes et méthodes abstraites

Java Licence Professionnelle 2009-2010. Cours 7 : Classes et méthodes abstraites Java Licence Professionnelle 2009-2010 Cours 7 : Classes et méthodes abstraites 1 Java Classes et méthodes abstraites - Le mécanisme des classes abstraites permet de définir des comportements (méthodes)

Plus en détail

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ; CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe

Plus en détail

Les arbres binaires de recherche

Les arbres binaires de recherche Institut Galilée Année 2010-2011 Algorithmique et arbres L2 TD 6 Les arbres binaires de recherche Type en C des arbres binaires (également utilisé pour les ABR) : typedef struct noeud_s { struct noeud_s

Plus en détail

TD3: tableaux avancées, première classe et chaînes

TD3: tableaux avancées, première classe et chaînes TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première

Plus en détail

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION) CLASSE RACINE Object ancêtre de toutes les classes RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION) définit donc des méthodes héritées par toutes

Plus en détail

Le générateur d'activités

Le générateur d'activités Le générateur d'activités Tutoriel Mise à jour le 09/06/2015 Sommaire A. Mise en route du Générateur d'activité... 2 1. Installation de Page... 2 2. Création des bases du générateur d'activités... 3 3.

Plus en détail

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi 802.11 module

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi 802.11 module François SCHNEIDER Lycée Victor-Hugo BESANÇON. STS SE FreeRTOS Programmation réseau WIFI Programmation réseau Socket Tcp FlyPort smart Wi-Fi 802.11 module Prérequis : langage C, connaissance réseau : Ip,

Plus en détail

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte Projet d informatique M1BI : Compression et décompression de texte Le but de ce projet est de coder un programme réalisant de la compression et décompression de texte. On se proposera de coder deux algorithmes

Plus en détail

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework L'objectif de ce document est de poser des bases de réflexion sur la modélisation d'un projet réalisé

Plus en détail

Le module Supply Chain pour un fonctionnement en réseau

Le module Supply Chain pour un fonctionnement en réseau Prélude 7 ERP Le module Supply Chain pour un fonctionnement en réseau Gérard Baglin Septembre 2008 Sommaire Chapitre 1 Le mode de fonctionnement en réseau de Prélude 7... 1 Le principe des jeux en temps

Plus en détail

Programmation Objet - Cours II

Programmation Objet - Cours II Programmation Objet - Cours II - Exercices - Page 1 Programmation Objet - Cours II Exercices Auteur : E.Thirion - Dernière mise à jour : 05/07/2015 Les exercices suivants sont en majorité des projets à

Plus en détail

GOL502 Industries de services

GOL502 Industries de services GOL502 Industries de services Conception d un service Partie IIb Version 2013 Introduction Conception d un service partie IIb Nous verrons dans ce chapitre Modélisation d un service; Langage de modélisation

Plus en détail

Compte-rendu de projet de Système de gestion de base de données

Compte-rendu de projet de Système de gestion de base de données Compte-rendu de projet de Système de gestion de base de données Création et utilisation d'un index de jointure LAMBERT VELLER Sylvain M1 STIC Université de Bourgogne 2010-2011 Reponsable : Mr Thierry Grison

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Chapitre 2. Classes et objets

Chapitre 2. Classes et objets Chapitre 2: Classes et Objets 1/10 Chapitre 2 Classes et objets Chapitre 2: Classes et Objets 2/10 Approche Orientée Objet Idée de base de A.O.O. repose sur l'observation de la façon dont nous procédons

Plus en détail

Télécom Nancy Année 2013-2014

Télécom Nancy Année 2013-2014 Télécom Nancy Année 2013-2014 Rapport 1A Ajout du langage C dans la Programmer's Learning Machine GIANNINI Valentin Loria 615, rue du Jardin Botanique 54600, Villers-Lès-Nancy Maître de stage : QUINSON

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

Gestion des utilisateurs : Active Directory

Gestion des utilisateurs : Active Directory Gestion des utilisateurs : Active Directory 1. Installation J'ai réalisé ce compte-rendu avec une machine tournant sous Windows 2008 server, cependant, les manipulations et les options restent plus ou

Plus en détail

A.P.I. Kuka Manuel de l utilisateur Version 0.0.5

A.P.I. Kuka Manuel de l utilisateur Version 0.0.5 A.P.I. Kuka Manuel de l utilisateur Version 0.0.5 Paul Chavent Kubrick 8 septembre 2003 1 kuka api 0.0.5 : Manuel de l utilisateur Table des matières 1 Utilisation sur le robot (serveur) 3 1.1 Installation............................................

Plus en détail

Introduction à la Programmation Parallèle: MPI

Introduction à la Programmation Parallèle: MPI Introduction à la Programmation Parallèle: MPI Frédéric Gava et Gaétan Hains L.A.C.L Laboratoire d Algorithmique, Complexité et Logique Cours du M2 SSI option PSSR Plan 1 Modèle de programmation 2 3 4

Plus en détail

Les structures. Chapitre 3

Les structures. Chapitre 3 Chapitre 3 Les structures Nous continuons notre étude des structures de données qui sont prédéfinies dans la plupart des langages informatiques. La structure de tableau permet de regrouper un certain nombre

Plus en détail

Le langage C. Séance n 4

Le langage C. Séance n 4 Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

Chapitre 4 Pierre, papier, ciseaux

Chapitre 4 Pierre, papier, ciseaux Python 3 : objectif jeux Chapitre 4 Chapitre 4 Pierre, papier, ciseaux (version graphique) 4.1. Thèmes abordés dans ce chapitre Le module tkinter : Label, Button Fenêtre Événements Réceptionnaire d'événements

Plus en détail

1. Introduction...2. 2. Création d'une requête...2

1. Introduction...2. 2. Création d'une requête...2 1. Introduction...2 2. Création d'une requête...2 3. Définition des critères de sélection...5 3.1 Opérateurs...5 3.2 Les Fonctions...6 3.3 Plusieurs critères portant sur des champs différents...7 3.4 Requête

Plus en détail

Chapitre 1 : Introduction aux bases de données

Chapitre 1 : Introduction aux bases de données Chapitre 1 : Introduction aux bases de données Les Bases de Données occupent aujourd'hui une place de plus en plus importante dans les systèmes informatiques. Les Systèmes de Gestion de Bases de Données

Plus en détail

Chapitre 5 : Les procédures stockées PL/SQL

Chapitre 5 : Les procédures stockées PL/SQL I. Introduction Une procédure ou une fonction stockée est un bloc PL/SQL nommé pouvant accepter des paramètres et être appelée. Généralement, on utilise une fonction pour calculer une valeur. Les procédures

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

Projet Active Object

Projet Active Object Projet Active Object TAO Livrable de conception et validation Romain GAIDIER Enseignant : M. Noël PLOUZEAU, ISTIC / IRISA Pierre-François LEFRANC Master 2 Informatique parcours MIAGE Méthodes Informatiques

Plus en détail

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février 2014 17:30 à 20:30

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février 2014 17:30 à 20:30 Examen intra 20 février 2014 17:30 à 20:30 Nom, prénom : Code permanent : Répondez directement sur le questionnaire. Question #1 5% Quelle influence peut avoir le typage dynamique sur la maintenabilité

Plus en détail

Stockage du fichier dans une table mysql:

Stockage du fichier dans une table mysql: Stockage de fichiers dans des tables MYSQL avec PHP Rédacteur: Alain Messin CNRS UMS 2202 Admin06 30/06/2006 Le but de ce document est de donner les principes de manipulation de fichiers dans une table

Plus en détail

Module SMS pour Microsoft Outlook MD et Outlook MD Express. Guide d'aide. Guide d'aide du module SMS de Rogers Page 1 sur 40 Tous droits réservés

Module SMS pour Microsoft Outlook MD et Outlook MD Express. Guide d'aide. Guide d'aide du module SMS de Rogers Page 1 sur 40 Tous droits réservés Module SMS pour Microsoft Outlook MD et Outlook MD Express Guide d'aide Guide d'aide du module SMS de Rogers Page 1 sur 40 Table des matières 1. Exigences minimales :...3 2. Installation...4 1. Téléchargement

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

PROJET ALGORITHMIQUE ET PROGRAMMATION II

PROJET ALGORITHMIQUE ET PROGRAMMATION II PROJET 1 ALGORITHMIQUE ET PROGRAMMATION II CONTENU DU RAPPORT A RENDRE : o Fiche signalétique du binôme o Listing des différents fichiers sources o CD sources o Il sera tenu compte de la présentation du

Plus en détail

Structurer ses données : les tableaux. Introduction à la programmation

Structurer ses données : les tableaux. Introduction à la programmation Structurer ses données : les tableaux Introduction à la programmation Plan du document Introduction Introduire la notion de type Types primitifs Types composés Tableaux de type primitif Page 2 Notion de

Plus en détail

SOMMAIRE. Travailler avec les requêtes... 3

SOMMAIRE. Travailler avec les requêtes... 3 Access Les requêtes SOMMAIRE Travailler avec les requêtes... 3 A) Créer une requête sélection en mode QBE... 3 B) Exécuter une requête à partir du mode Modifier (QBE)... 3 C) Passer du mode Feuille de

Plus en détail

IFT2245 - Systèmes d exploitation - TP n 1-20%

IFT2245 - Systèmes d exploitation - TP n 1-20% IFT2245 - Systèmes d exploitation - TP n 1-20% DIRO - Université de Montréal Nicolas Rous et Dorian Gomez Disponible : 14/02/2013 - Remise : 28/03/2013 au début de la démo LISEZ TOUT LE DOCUMENT AVANT

Plus en détail

Généralités sur le Langage Java et éléments syntaxiques.

Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...

Plus en détail

Systeme d'exploitation

Systeme d'exploitation Introduction au dévellopement de Methodes Natives Partie I : appelle de methodes C++ sous windows Auteur: Frank Sauvage. 1 \ introduction aux methodes natives : Les methodes natives sont des methodes devellopées

Plus en détail

Application de lecture de carte SESAM-Vitale Jeebop

Application de lecture de carte SESAM-Vitale Jeebop Application de lecture de carte SESAM-Vitale Jeebop Présentation Le module de lecture de carte SESAM-Vitale Jeebop est une application Java Web Start, c'est à dire une application Java qui se télécharge

Plus en détail

Cours de Systèmes d Exploitation

Cours de Systèmes d Exploitation Licence d informatique Synchronisation et Communication inter-processus Hafid Bourzoufi Université de Valenciennes - ISTV Introduction Les processus concurrents s exécutant dans le système d exploitation

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

Plus en détail

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40 Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne gauthier.picard@emse.fr

Plus en détail

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework Gaël de Chalendar CEA LIST / LIC2M Journée de Présentation des Technologies WebContent INSTN 14/12/2009 Présentation de gsoap Plan

Plus en détail

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL Cours PL/SQL Langage propre à Oracle basé sur ADA Offre une extension procédurale à SQL PL/SQL permet d utiliser un sous-ensemble du langage SQL des variables, des boucles, des alternatives, des gestions

Plus en détail

Messages d'erreurs. Redémarrez votre PC en cliquant sur Démarrer, en sélectionnant ensuite Arrêter puis en cochant Redémarrer

Messages d'erreurs. Redémarrez votre PC en cliquant sur Démarrer, en sélectionnant ensuite Arrêter puis en cochant Redémarrer Messages d'erreurs Erreur 602 Vous essayez de vous connecter à Internet. L'erreur n 602 apparaît et il vous est impossible de vous connecter. L'erreur 602 est souvent issue de l'utilisation de l'accès

Plus en détail

Solutions du chapitre 4

Solutions du chapitre 4 Solutions du chapitre 4 Structures de contrôle: première partie 4.9 Identifiez et corrigez les erreurs (il peut y en avoir plus d une par segment de code) de chacune des proposition suivantes: a) if (

Plus en détail

1 Mesure de la performance d un système temps réel : la gigue

1 Mesure de la performance d un système temps réel : la gigue TP TR ENSPS et MSTER 1 Travaux Pratiques Systèmes temps réel et embarqués ENSPS ISV et Master TP1 - Ordonnancement et communication inter-processus (IPC) Environnement de travail Un ordinateur dual-core

Plus en détail

gestion des processus La gestion des processus

gestion des processus La gestion des processus 1 La Pseudo parallélisme 2 Plusieurs programmes en mémoire Le processeur exécute les instructions tantôt pour l'un tantôt pour l'autre P1 P2 programme de supervision Vu de l'utilisateur => programmes en

Plus en détail

Genie Logiciel Avancé Projet :Gestion d une chaîne hotelier low cost

Genie Logiciel Avancé Projet :Gestion d une chaîne hotelier low cost Institut Galilée Vivien Boyi-Banga INFO 2 Genie Logiciel Avancé Projet :Gestion d une chaîne hotelier low cost Enseignant : M.Feiz Année 2009-2010 1. Définir la borne de notre système Le système est composé

Plus en détail

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année 2003-2004 Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES Maude Manouvrier La reproduction de ce document par

Plus en détail

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011 Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr Université de Provence 9 février 2011 Arnaud Labourel (Université de Provence) Exclusion Mutuelle 9 février 2011 1 / 53 Contexte Epistémologique

Plus en détail

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

Plus en détail

Unix : Programmation Système

Unix : Programmation Système Département Informatique Année Universitaire 2004/2005 1 Compilation et programmation...6 1.1 Préparation du fichier source...6 1.1.1 L'éditeur vi (mode console)...6 1.1.2 L'éditeur nedit ou xedit (sous

Plus en détail