SYSTÈME D’EXPLOITATION I

Slides:



Advertisements
Présentations similaires
GEF 435 Principes des systèmes d’exploitation
Advertisements

Synchronisation des processus père - fils
5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads.
SYSTÈME D’EXPLOITATION I
Programmation Système et Réseau
1 UNIX AVANCE Yves PAGNOTTE – Janvier – COMMUNICATION INTER PROCESSUS : TUBES.
Gestion de la concurrence avec Entity Framework Développement d’application avec base de données Chapitre 23 Hugo St-Louis – Automne 2015.
Chap 131 Chapitre 13 Systèmes d’entrée/sortie
Le système Raid 5 Table des matières Qu'est ce que le RAID ? Les objectifs Le raid 5 Les avantages et les inconvénients Les composants d’un Raid.
Aperçu de la production audionumérique avec GNU/Linux.
CINI – Li115 1 Semaine 10 Les pointeurs ● Notion d'adresse ● Déclaration et utilisation de pointeurs ● "Types pointeur" et initialisation des pointeurs.
1 Réseaux Communication socket sous Windows. 2 Communication socket sous Windows Communication entre 2 applications sur 2 machines distantes Adresse IP.
1 Programmation en C++ Fonctions ● Déclaration et définition de fonctions ● Arguments ● Surcharge ● Arguments optionnels ● Fonctions constantes ● Fonctions.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
1 I P CI P C. 2 Inter Process Communication 3 Définition d'un processus. ● Un système multitâche permet l'exécution simultanée de nombreux programmes.
Module 10 : Configuration de l'impression. Vue d'ensemble Présentation de l'impression à l'aide de Windows 2000 Ajout d'une imprimante Configuration d'une.
1. 2 Boite à outils Qt ● Boite à outils C++ pour le développement multi-plateforme d'application en environnement graphique (GUI) – des fonctions GUI.
Mode noyau Appels Systèmes Interruptions Grégory Seront Institut Paul Lambin
A partir du 1er mars 2016 : 2 offres
Windows NT/2000/XP Enjeux et contraintes techniques
Module S41 Chapitre 11  Configuration de Windows XP Professionnel pour l'informatique mobile.
Comment corriger son code sans forcément appeler l’enseignant M2202
Threads et Lightweight Processes
Pointeurs et langage C.
Utilisation de PostgreSQL
Communications via sockets
Qu'est-ce que POSIX? Une librairie en langage C
AO (Architecture des ordinateurs)
7 – COMMUNICATION INTER PROCESSUS SEGMENTS DE MÉMOIRE PARTAGEE
Installation et Configuration Internet Information Server (IIS 5)
Accès aux fichiers en C.
Les fonctions.
Routage S 3 - Questionnaire N°1
Centralisation de logs
Chapitre 12 Surveillance des ressources et des performances
Synthèse Socket en C.
IDL_IDL bridge The IDL_IDLBridge object class allows an IDL session to create and control other IDL sessions, each of which runs as a separate process.
Mini synthèse accès fichier en C
Windows 7 NTFS.
Module 5 : Gestion des disques.
Communications via sockets
Technologies de l’intelligence d’affaires Séance 12
Système flexible de Workflow pour la plate-forme Motu
Séminaire EOLE Beaune Septembre 2007
Programmation système
Août 2009.
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
Programmation en C++ C++ de base
Bus et adressage GIF-1001: Ordinateurs: Structure et Applications
Le contenu est basé aux transparents du 7 ème édition de «Software Engineering» de Ian Sommerville«Software Engineering» de Ian Sommerville B.Shishedjiev.
Les protocoles de la couche application Chapitre 7.
1 Copyright © 2004, Oracle. Tous droits réservés. Extraire des données à l'aide de l'instruction SQL SELECT.
Mise en place d'un Serveur Radius pour la sécurité d'un réseau Wireless sous Windows Serveur Présenter par le Stagiaire : Etienne Mamadou Guilavogui.
TP N°4 Développement d’ une application client / Serveur en utilisant les Sockets TCP.
Catherine Cyrot - bibliothèques numériques - Cours 5
© Robert Godin. Tous droits réservés.
1. LE LANGAGE SQL DDL Version 2 - Janvier Le langage SQL-DDL
BUFFER CIRCULAIRE Meryem EL BAKRI. PLAN Introduction Buffer circulaire Fonctionnement.
Centre Universitaire de MASCARA Présenté par M. H.BENAOUDA Melle F.ZENAK Encadrer par M. A.YAGOUBI.
Système d’exploitation: Principe IFT6800 – E 2008 Pierre Poulin.
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
Le bus de terrain AS-i Bus AS-i (Actuator Sensor interface ) Fichiers
Threads et Lightweight Processes
Variables et accès en Java
1. LE LANGAGE SQL DDL Version 1 - Mai 2009 corrigé le 11/2/2011
1 Plan de formation Chapitre 1 : Présentation de SAP Chapitre 1 : Présentation de SAP Chapitre 2 : Arrêt et démarrage d’un système SAP Chapitre 3 : Configuration.
Contenu Systèmes de test parallèles Multithreading Synchronisation
Implémentation de FTP Rappel sur FTP Relation entre un site Web et FTP
TP N°4 Développement d’ une application
Les Commandes de base Linux. 1 L’aide sur les commandes Linux ◦ help : obtenir de l’aide pour une commande interne du shell. Elle permet aussi d'afficher.
Transcription de la présentation:

SYSTÈME D’EXPLOITATION I SIF-1015

Contenu du cours 8 Serveur itératifs et leurs faiblesses Serveurs concurrents Implémenter avec des processus Implémenter par des threads Implémenter avec la gestion des événements LECTURES: Chapitre 14 (Mitchell) Chapitres 5 et 8 (Beck) Chapitre 16 (Johnson) http://csapp.cs.cmu.edu/

Serveurs itératifs Les serveurs itératifs traitent une requête à la fois client 1 server client 2 call connect call connect call accept ret connect ret accept call read write ret read close close call accept ret connect ret accept call read write ret read close close

Serveurs itératifs: Faiblesses client 1 server client 2 call accept call connect ret connect ret accept call fgets call read Server blocks waiting for data from Client 1 call connect User goes out to lunch Client 1 blocks waiting for user to type in data Client 2 blocks waiting to complete its connection request until after lunch! Solution: Utilisation de serveurs concurrents Les serveurs concurrents démarrent plusieurs flots de traitement concurrents pour servir plusieurs clients simultanément

Serveurs concurrents Les serveurs concurrents traitent plusieurs requêtes concurremment client 1 server client 2 call accept call connect call connect ret connect ret accept call fgets child 1 fork call accept call read User goes out to lunch Client 1 blocks waiting for user to type in data ret connect call fgets ret accept fork child 2 write call read call read ... write end read close close

Serveurs concurrents: Trois mécanismes possibles 1. Processus Le noyau offre la possibilité de créer des flots de traitement avec des espaces d’adresses distincts Contrôle des processus et signaux par des appels système standards d’Unix 2. Threads Le noyau offre la possibilté de démarrer plusieurs flots d’instruction dans un processus Chaque thread a sa pile et son environnement volatile (registres) Les threads partagent le même espace d’adresses et les fichiers ouverts Interface Pthreads est utilisée

Serveurs concurrents: Trois mécanismes possibles 3. Multiplexage d’I/O avec l’appel système select() Traitement manuelle entrelacée de plusieurs connexions Utilisation de l’appel système Unix select() pour déterminer si un socket est en activité Forme de la concurrence au niveau des applications Populaire pour la conception de serveurs hautes performances

Serveurs concurrents: Par processus

Serveurs concurrents: Par processus Ces serveurs doivent éliminer les processus enfants restés zombie Permet d’éviter des fuites de mémoire fatales Ces serveurs doivent fermer (close) leurs copies de connfd. Le noyau garde une référence de chaque socket Après un fork(), refcnt(connfd) = 2 Une connexion n’est pas fermée tant que refcnt(connfd)!=0

Serveurs concurrents: Par processus + Supportent plusieurs connexions concurrentes + Modèle de partage propre descripteurs (non) table des fichiers (oui) variables globales(non) + Simple - Contrôle de processus plus lourd - Partage de données entre processus pas évident Requiert les IPC (interprocess communication) FIFO (named pipes), mémoires partagées et sémaphores Les threads offrent des flots de traitement plus afficaces et permettent le partage de variables

Rappel sur l’interface Pthreads Création et eliminations de threads pthread_create pthread_join Déterminer l’id du thread courant pthread_self Terminaison d’un threads pthread_cancel pthread_exit exit [terminer tous les threads] , ret [terminer le thread courant] Synchroniser l’accès aux variables partagées pthread_mutex_init pthread_mutex_[un]lock pthread_cond_init pthread_cond_[timed]wait

Serveurs concurrents: Par threads

Serveurs concurrents: Par threads Doivent appeler Pthread_detach() pour éviter les fuites de mémoire En tout temps, un thread est soit joinable ou detached Un thread joinable peut être tué ou éliminé par d’autres threads Doivent être éliminés (reaped avec pthread_join) pour libérer la mémoire Un thread Detached ne peut être tué ou éliminé par d’autres threads Les ressources sont automatiquement libérées à la terminaison du thread Un thread est joinable par défaut Attention aux partages non voulues Par exemple, qu’arrive-t-il si nous passons l’adresse de connfd au thread ? Pthread_create(&tid, NULL, thread, (void *)&connfd); Les fonctions appelées par un thread doivent être thread-safe

Serveurs concurrents: Par threads Concept de thread: thread-safe Version thread-safe Si func() est threadée ???

Serveurs concurrents: Par threads + Facile d’échanger des informations entre threads Ex: Information de logging, cache de fichiers. + Les threads sont plus efficaces --- Le partage non intentionnel peut introduire des erreurs subtiles La facilité de partage des threads est à la fois leur grande force et aussi leur grande faiblesse

Serveurs concurrents: Par événement Approche basée sur l’occurrence d’événements: Maintient d’un pool de descripteurs de socket connectés Repétion de cette suite d’opérations pour toujours: Utiliser l’appel système select() d’Unix qui attend tant que: (a) qu’une nouvelle requête de connexion arrive sur le socket listener (b) des données nouvelles arrivent sur un socket déjà connecté SI (a), ajouter une nouvelle connexion dans le pool de connexions SI (b), lire les données disponibles à partir de la connexion Fermer la connexion au EOF et la sortir du pool

Appel système select() select() dort jusqu’à ce qu’un ou plusieurs descripteurs de fichier dans l’ensemble readset soient prêts à être lus #include <sys/select.h> int select(int maxfdp1, fd_set *readset, NULL, NULL, NULL); readset vecteur de bits (max FD_SETSIZE bits) qui indique l’appartenance à un ensemble de descripteurs SI le bit k est à 1, alors le descripteur k est un membre de l’ensemble de descripteurs maxfdp1 nombre maximum de descripteurs dans l’ensemble de descripteurs plus 1. testez les descripteurs 0, 1, 2, ..., maxfdp1 – 1 pour connaître leur appartenance select() retourne le nombre de descripteurs prêts et initialise (à 1) chaque bit du readset pour indiquer l’état prêt des descripteurs correspondant

Appel système select() readset Ensemble de descripteurs vide Ensemble de descripteurs: stdin et un socket select() retourne un vecteur avec des descripteurs prêts en lecture Activité au clavier

Fonctions de manipulation d’ensemble de descripteurs void FD_ZERO(fd_set *fdset); Met à 0 tous les bits dans le fdset void FD_SET(int fd, fd_set *fdset); Met à 1 le bit fd dans le fdset void FD_CLR(int fd, fd_set *fdset); Met à 0 le bit fd dans le fdset int FD_ISSET(int fd, *fdset); Le bit fd dans le fdset est-il à 1?

Exemple d’utilisation du select(): Lecture au clavier et TIMEOUT #include <sys/select.h> int select(int maxfdp1, fd_set *readset, NULL, NULL, struct timeval *timeout); Exécution: >./select timeout hello read 6 from keyboard: hello SIF-1015 read 9 from keyboard: SIF-1015 ^D keyboard done

Exemple d’utilisation du select(): Lecture au clavier et TIMEOUT

Exemple d’utilisation du select(): Serveur simple

Exemple d’utilisation du select(): Serveur supportant plusieurs clients

Exemple d’utilisation du select(): Serveur supportant plusieurs clients

Exemple d’utilisation du select(): Serveur supportant plusieurs clients

Exemple d’utilisation du select(): Serveur supportant plusieurs clients > server5 & [7] 1670 server waiting >client3 & client3 & client3 & ps –ax [8] 1671 [9] 1672 [10] 1673 adding client on fd 4 adding client on fd 5 adding client on fd 6 PID TTY STAT TIME COMMAND 1670 pp0 S 0:00 server5 1671 pp0 S 0:00 client3 1672 pp0 S 0:00 client3 1673 pp0 S 0:00 client3 1674 pp0 S 0:00 ps -ax serving client on fd 4 server waiting char from server = B serving client on fd 5 serving client on fd 6 removing client on fd 4 removing client on fd 5 removing client on fd 6 [8] Done client3 [9]- Done client3 [10]+ Done client3

Serveur concurrent: Par événement Déclaration des structures et en-tête des fonctions

Serveur concurrent: Par événement

Serveur concurrent: Par événement

Serveur concurrent: Par événement

Serveur concurrent: Par événement

Serveur concurrent: Par événement + Un seul flot de traitement et de contrôle + Peut être plus facilement corrigé avec un debugger + Pas de surcharge de contrôle des threads et des processus Conception idéale pour les serveurs WEB haute performance et les moteurs de recherche - Plus difficile à coder que les approches par processus ou par threads - Vulnérable aux attaques du type: denial of service