Gestion du temps.

Slides:



Advertisements
Présentations similaires
Programmation Système et Réseau
Advertisements

Gestion de la concurrence avec Entity Framework Développement d’application avec base de données Chapitre 23 Hugo St-Louis – Automne 2015.
Novembre 2014J.Callot L.Piedfort1 TP3 Enoncé. novembre 2014J.Callot L.Piedfort2 Objectif Gérer la liaison série avec la réception en interruption On passera.
CHAftITREI ARCHITECTURE de BASE. Modèle de Von Neumann Langage d’assemblage1 John Von Neumann est à l'origine d'un modèle de machine universelle de traitement.
Les systèmes d'information 1- Une pratique quotidienne 2- Les données 3- Approche conceptuelle 4- Notion de serveur 5- Conception d'un système d'information.
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
IFT359 – Programmation fonctionnelle Thème 02 B partie A introduction au langage fonctionnel choisi 1.
1 F. Touchard Cours Temps Réel ESIL Département d'Informatique 2ème année Gestion des interruptions et du temps Gestion des interruptions,
CINI – Li115 1 Semaine 3 Boucles (suite), tirages aléatoires, bibliothèque graphique ● Imbrication d'instructions if et for ● Boucles for imbriquées ●
1- Introduction 1ère partie Le langage SQL 2- Connexion 3- Structure & Contenu 4- Requêtes.
BUR Tableur Tableur : Open Office Calc. BUR Tableur 2 Qu’est-ce qu’un tableur ?  Un logiciel permettant de manipuler des feuilles de calcul  Fonctionnalités.
SQL partie 5 1 LMD create – update – primary key secondary key.
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 ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
Introduction Bases de Données NoSQL Principe de base Avantages/Inconvénients L’évolution du Web 2.0 et actuellement Web 3.0, a montrée l’insuffisance des.
1 Bourse des Valeurs Mobilières de Tunis Séance de cotation et transmission des ordres.
F. Touchard Polytech Marseille INFO Introduction au temps réel Interruptions, signaux et événements 1 Interruptions, signaux et événements.
Module 13 : Implémentation de la protection contre les sinistres.
Communication entre Processus
Threads et Lightweight Processes
Construire des requêtes
2-Missions de la LOGISTIQUE
Utiliser le dossier Mon EBSCOhost
Représentation des nombres réels
L’utilisation des formulaires pour un exemplarisateur
Qu'est-ce que POSIX? Une librairie en langage C
Sécurité - VPN - Configurer la mise à jour du client
Alain Besançon / ORDI-CONSEIL SA / Séminaire sur la Santé / 3 mai 2017
Opérateurs Toute donnée informatique est stockée en mémoire sous la forme d'une combinaison de bits (mot machine). Les opérateurs bits permettent de modifier.
Algorithmique & Langage C
INSIA SRT 3 PAM !.
Xenomai RTDM.
Commande show standby ccnp_cch ccnp_cch.
Principes de programmation (suite)
LE PASSAGE À L’EURO DE L’APPLICATION ICARE
Master Réseaux et Systèmes Distribués (RSD)
Les fonctions.
Programmation en C++ Fonctions
Routage S 5 - Questionnaire N°1
Technologies d’intelligence d’affaires
Commande show dialer ccnp_cch ccnp_cch.
Elaboré par Ahmed BESSAIDI
Communications via sockets
Réalisation d’une application web sous le thème: «Mon vétérinaire » par : Benzineb Asmaa et Meftahi Oualid Présentation à Université Saad Dahlab Blida.
Algorithmique & Langage C
Chapitre 7 Configuration de l'environnement du bureau
Programmation en C++ C++ de base
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Certificat en Informatique et Internet D5. Travailler en réseau, communiquer et collaborer Equipe C2I - FSEGS Semestre 2 – Avril 2015 Université de Sfax.
Les structures en langage C
Type Concret – Type Abstrait
1 Copyright © 2004, Oracle. Tous droits réservés. Extraire des données à l'aide de l'instruction SQL SELECT.
Bases de données sous Access. Initiation aux bases de données  Structure d’une base de données.
BTS SIO 2ème année SLAM SISR
STSWEB Remise en cohérence des données Messages d’information à la connexion Diffusion Nationale TOULOUSE –MAJ avril 2009.
Présentation de la base Frantext
Le DOS GIF-1001 Ordinateurs: Structure et Applications, Hiver 2015
Les classes et les objets
SYSTèMES à évènements discrets
1 PROJET D’INFORMATIQUE les composants de l'ordinateur Gammoudi Rayéne 7 B 2.
Les exceptions Le mécanisme des exceptions est destiné à permettre aux fonctions profondes d'une bibliothèque de notifier la survenue d'une erreur aux.
„La plate-forme EAI “ Initiation à WBI
Les liaisons des données Sommaire Principe Les couches de liaison –LLC (Contrôle de Liaison Logique) –MAC (Contrôle d’Acces au Support) Mode de Communication.
Principes de programmation (suite)
Threads et Lightweight Processes
Ordonnancement des processus sous Windows NT
Collaborateurs & managers
Projet de mise à jour du contrat club à partir de l’espace club
COURS ADMINISTRATION DE BASES DE DONNÉES IMPORT/EXPORT Karim LABIDI ISET Ch
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:

Gestion du temps

Horloges et chronomètres Exécution d’une tâche à un moment donné horloge absolue (clock) ou à intervalles réguliers chronomètres (timers) à un coup à répétition UNIX (POSIX.1) fournit déjà plusieurs outils POSIX.4 rajoute de la précision et des fonctionnalités souvent associées à une horloge "temps réel", externe ou non

les horloges POSIX.1 time: #include <time.h> time_t time(time_t *what_time); retourne le nombre de secondes écoulées depuis le 1er janvier 1970 0h (« Epoch ») et le stocke éventuellement dans what_time gettimeofday: struct timeval { time_t tv_sec; time_t tv_usec;} int gettimeofday(struct timeval *what_time); la résolution est de toutes façons limitée par l'horloge de la machine (~ 0,1s) codage sur 32 bits ➩ bug du 15 février 2038 !

les horloges POSIX.1 quelques utilitaires pour manipuler le temps localtime : transforme le temps absolu depuis Epoch en une structure de type tm ctime : transforme le temps absolu depuis Epoch en une chaîne de caractères asctime : transforme la structure de localtime en une chaîne de caractères mktime : permet de modifier les champs d'une structure de type tm et de la transformer en une variablde de type time_t dsptime.c

les timers POSIX.1 #include <sys/time.h> int setitimer(int id, const struct itimerval *new_value, struct itimerval *old_value); int getitimer(int id, struct itimerval *current_value), struct itimerval{struct timeval it_value, struct timeval it_interval;} id : ITIMER_REAL → signal SIGALRM ITIMER_VIRTUAL → signal SIGVTALRM ITIMER_PROF → signal SIGPROF int alarm(const int i); envoie le signal SIGALRM au bout de i secondes int sleep(const int n); suspend le process pendant n secondes

les timers POSIX.1 problèmes de précision et de dérive : la précision ultime est ~ 1 µs ITIMER_VIRTUAL (utilisation de la CPU par le process) et ITIMER_PROF (utilisation de la CPU par le process et le système au nom du process) sont utilisés pour le profilage

la gestion du temps avec POSIX.4 #include <time.h> int clock_settime(clockid_t id, const struct timespec *curr_time); int clock_gettime(clockid_t id, struct timespec *curr_time); int clock_getres(clockid_t id, struct timespec *resolution); int clock_nanosleep(const struct timespec *req, struct timespec *remaining);

la gestion du temps avec POSIX.4 #include <time.h> int timer_create(clockid_t id, const struct sigevent *signal_spec, timer_t *timer_id); int timer_settime(timer_t timer_id, int flags, const struct itimerspec *new_int, struct itimerspec *old_int); int timer_gettime(timer_t timer_id, struct itimerspec *curr_int); int timer_getoverrun(timer_t timer_id); int timer_delete(timer_t timer_id); int nanosleep(const struct timespec *req, struct timespec *remaining);

Les horloges POSIX.4 horloges fournies par Linux (>2.6.12) : CLOCK_REALTIME Une horloge système temps réel configurable. CLOCK_MONOTONIC Une horloge non configurable, toujours croissante qui mesure le temps depuis un instant non spécifié dans le passé et qui ne change pas après le démarrage du système. CLOCK_PROCESS_CPUTIME_ID Une horloge qui mesure le temps CPU (utilisateur et système) consommé par le processus appelant (et tous ses threads). CLOCK_THREAD_CPUTIME_ID Une horloge qui mesure le temps CPU (utilisateur et système) consommé par le processus appelant. seule CLOCK_REALTIME existe partout

les horloges POSIX.4 structure de stockage du temps struct timespec { time_t tv_sec; time_t tv_nsec; };

les horloges POSIX.4 int clock_gettime (clockid_t clock_id, struct timespec *tp) lit la valeur courante de l’horloge spécifiée int clock_settime (clockid_t clock_id, struct timespec *tp) règle l’horloge valide uniquement pour CLOCK_REALTIME utilisé pour spécifier l’heure à laquelle sera réveillé un thread bloqué sur un appel à clock_nanosleep avec une date absolue sur CLOCK_REALTIME int clock_getres (clockid_t clock_id, struct timespec *tp) lit la résolution de l’horloge spécifiée

les horloges POSIX.4 int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp) suspend la tâche jusqu’à la date spécifiée par rqtp ou jusqu’à l’arrivée d’un signal géré par l’application si TIMER_ABSTIME est spécifié dans flags, rqtp une date absolue, sinon rqtp est un intervalle si la tâche est réveillée par l’arrivée d’un signal et si TIMER_ABSTIME n’est pas spécifié et si rmtp n’est pas NULL, alors le temps restant jusqu’au réveil « normal » est retourné dans rmtp

les horloges POSIX.4 int nanosleep(clockid_t clock_id, const struct timespec *rqtp, struct timespec *rmtp) identique à clock_nanosleep, mais uniquement pour des intervalles de temps

les timers POSIX.4 structure pour gérer les données relatives au timer struct itimerspec { struct timespec it_value; struct timespec it_interval; } it_value : date d’expiration it_interval : valeur de rechargement, après expiration

les timers POSIX.4 int timer_create(clockid_t clock_id, const struct sigevent *evp, timer_t *timerid) crée un timer basé sur l’horloge spécifiée evp décrit le mécanisme de notification à l’expiration du timer seul le mécanisme de notification par signal est supporté cf cours sur les signaux et événements struct sigevent{ int sigev_notify; int sigev_signo; union sigval sigev_value; ... }

les timers POSIX.4 structure sigevent sigev_notify : SIGEV_NONE : pas de notification SIGEV_SIGNAL : un signal temps réel est envoyé SIGEV_THREAD : une fonction de notification est exécutée sigev_signo : numéro du signal envoyé sigev_value : valeur transportée union sigval sigev_value définie par : int sival_int ; void * sival_ptr;

les timers POSIX.4 int timer_delete(timer_t timerid) détruit le timer

les timers POSIX.4 int timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue) arme le timer si value.it_value est nul, le timer est arrêté, sinon il est démarré si value.it_interval est différent de 0, le timer est périodique si flags est égal à TIMER_ABSTIME, value.it_value est interprété comme une date absolue de l’horloge spécifiée dans timer_create, sinon c’est interprété comme un intervalle le thread appelant soit être un thread POSIX (créé par pthread_create) les valeurs courantes du timer sont stockées dans ovalue

les timers POSIX.4 int timer_gettime(timer_t timerid, struct itimerspec *value) stocke dans value la date d’expiration et la valeur de rechargement du timer int timer_getoverrun(timer_t timerid) retourne le nombre de dépassements du timer depuis la dernière expiration du timer timerid nombre de fois où le timer a expiré alors qu’il n’y avait pas de tâche ayant mis en place une procédure de gestion du signal émis à l’expiration

exemple alarmclock.c affiche l'heure courante demande l'heure de réveil vérifie qu'elle n'est pas déjà dépassée ! affiche un nombre de tirets égal au nombre de secondes à attendre. Surécrit les tirets par des étoiles chaque seconde