Exemple de système temps-réel: Real-time Linux



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

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

Exécutif temps réel Pierre-Yves Duval (cppm)

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

Les processus légers : threads. Système L3, /31

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

ENSP Strasbourg (Edition ) Les Systèmes Temps Réels - Ch. DOIGNON. Chapitre 3. Mise en œuvre : signaux, gestion du temps et multi-activités

Linux embarqué, Linux Temps Réel : présentation

Realtime applications with RTAI. R.KOCIK Embedded Systems department

Alexandre Buge Epitech 5 Promo Soutenance de stage du 01/03/2004 au 31/08/2004

Base de l'informatique. Généralité et Architecture Le système d'exploitation Les logiciels Le réseau et l'extérieur (WEB)

Linux embarqué Retour d expérience et temps réel. Denis Coupvent-Desgraviers

Introduction aux Systèmes et aux Réseaux, Master 2 CCI

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

Linux embarqué: une alternative à Windows CE?

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Introduction à la programmation concurrente

Introduction au langage C

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Cours Programmation Système

DAns un système multi-utilisateurs à temps partagé, plusieurs processus

Introduction aux Systèmes et aux Réseaux

Cours 6 : Tubes anonymes et nommés

Chapitre 4 : Outils de communication centralisés entre processus

MODULE I1. Plan. Introduction. Introduction. Historique. Historique avant R&T 1ère année. Sylvain MERCHEZ

Temps Réel. Jérôme Pouiller Septembre 2011

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TP Temps Réel. Polytech Paris - Mars 2012

Systèmes temps-réel. Plan général. Matthieu Herrb. Mars Introduction - concepts généraux

Problèmes liés à la concurrence

Guide pratique de CSPM, l'outil de suivi des performances du système Version française du Complete System Performance Monitor HOWTO

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

Les vulnérabilités du noyau. LECORNET Olivier LEGROS Bruno VIGIER Nicolas Promo 2005

Introduction : les processus. Introduction : les threads. Plan

Performances et optimisations

Performances de la programmation multi-thread

OS Réseaux et Programmation Système - C5

Programmation Système (en C sous linux) Rémy Malgouyres LIMOS UMR 6158, IUT département info Université Clermont 1, B.P.

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

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

Le traitement du temps

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Systèmes en réseau : Linux 1ère partie : Introduction

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Runtime. Gestion de la réactivité des communications réseau. François Trahay Runtime, LaBRI sous la direction d'alexandre Denis Université Bordeaux I

Modélisation des interfaces matériel/logiciel

Virtualisation Vserver et OpenVz en entreprise

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

Programmation système de commandes en C

LOG4430 : Architecture et conception avancée

Sixième partie. Programmation multi-activités Java & Posix Threads. Généralités Java Threads POSIX Threads Autres approches

Le prototype de la fonction main()

Windows Server Chapitre 1: Découvrir Windows Server 2008

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

KoinKoin. Système d exploitation à architecture basée micro-noyau. Antoine Castaing Nicolas Clermont Damien Laniel

Tivoli Endpoint Manager Introduction IBM Corporation

Analyse de performance, monitoring

Équilibrage de charge pour systèmes temps-réel asymétriques sur multi-processeurs

Découverte des Logiciels Libres. Gilles Dequen

Synchro et Threads Java TM

Systèmes de gestion de code source

Les structures de données. Rajae El Ouazzani

Ordinateurs, Structure et Applications

PROGRAMMATION EVENEMENTIELLE sur EXCEL

Une méthode de conception de systèmes sur puce

Linux 1: Présentation

Les structures. Chapitre 3

Un ordonnanceur stupide

Cours Linux. Cours en ligne Administrateur Systèmes Linux. Académie Libre

Pilotes matériels sous Linux : mode noyau versus mode utilisateur

Le Network File System de Sun (NFS)

-1 - Postes de travail graphiques

Introduction à la Programmation Parallèle: MPI

Programmation C. Apprendre à développer des programmes simples dans le langage C

Programmation de l'api Video for Linux

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Virtualisation open source État de l'art

Cours de C. Allocation dynamique. Sébastien Paumier

Programmer en JAVA. par Tama

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Cours A7 : Temps Réel

Introduction aux environnements de virtualisation d'oracle Solaris 11.1

Plan de la conférence. Virtualization. Définition. Historique. Technique. Abstraction matérielle

Plan du cours. Historique du langage Nouveautés de Java 7

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

Guide d'installation et de configuration de Pervasive.SQL 7 dans un environnement réseau Microsoft Windows NT

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

IBM Tivoli Compliance Insight Manager

Systèmes d exploitation

Méthodes de programmation systèmes UE n NSY103. Notes de cours. Nombre d'heures : 55h (~ cours de 3 heures)

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

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

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

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

Eric Bertrand 08/11/06 Maître de conférence 1

Implémentation Matérielle des Services d un RTOS sur Circuit Reconfigurable

Transcription:

Exemple de système temps-réel: Real-time Linux ENSPS 3A option ISAV ENSPS 3A option GLSR MATSER ISTI parcours AR FIP 2A J. GANGLOFF 1

Plan du cours Introduction : Comparatif des systèmes temps-réel Les systèmes temps-réel "open-source" Architecture de Real-time Linux Le noyau Linux Le noyau Real-time Linux Le mécanisme des modules noyau Communications user <-> RT Caractéristiques typiques 2 Avantages / Inconvénients

Plan du cours Fonctions de Real-time Linux Compatibilité POSIX-1003.13 Tâche périodique Handler d'interruption FIFO / Mémoire partagée Mutex et sémaphores Méthodes de développement Exemples 3 Méthodologie de debogage Liens

I. Introduction 1.1. Comparatif des systèmes temps-réel: temps-réel "mou" Le temps-réel "mou" (soft real-time) : résolution remporelle faible (> 10 ms). Norme POSIX-1003.1b : extensions TR pour UNIX. Limitations : liées à l'échantillonnage temporel du noyau (slicing). liées à la stratégie d'ordonnancement des tâches. liées au traitement des interruptions matérielles. Exemple : Linux. 4 Conforme à la norme POSIX-1003.1b. Noyau échantillonné à 100 Hz. Dans le meilleur des cas (charge du système faible, pas d'accès aux ressources), la résolution temporelle est de 10 ms.

I. Introduction 1.1. Comparatif des systèmes temps-réel: temps-réel "dur" Le temps-réel "dur" (hard real-time) : résolution temporelle élevée (< 100 s). Système monolithique VxWorks : architecture hôte/cible. L'environnement de développement et de supervision (hôte) est sous UNIX. Il communique avec le système temps-réel (cible) grâce à une liaison TCP/IP. Système conventionnel modifié 5 RTLinux, RTAI: modification de la couche d'abstraction matérielle pour ajouter des fonctionnalités temps-réelles. Windows 2000 + INTime (TenASys, www.tenasys.com): même concept que RTLinux appliqué à Windows 2000.

I. Introduction 1.1. Comparatif des systèmes temps-réel: temps-réel "dur" 6 Système à base de micro-noyau : QNX. UNIX compatible POSIX-1003. Noyau de taille minimale (< 10 Ko) -> temps de réponse minimum. Le noyau implémente seulement 4 services : ordonnancement des processus communications inter-processus (IPC) gestion bas-niveau du réseau dispatching des interruptions Les gestionnaires de ressources fonctionnent comme les autres processus et sont préemptibles par les tâches temps-réel. Point faible : performance (fréquence élevée de changement de contexte, débit important des IPC)

I. Introduction 1.2. Les systèmes temps-réel "open-source" Les 2 principaux systèmes temps-réel "open-source" sont : 7 RTAI (www.rtai.org) RTLinux (www.fsmlab.com) Basés sur un noyau linux standard modifié. Architecture similaire, API compatible. RTAI possède des fonctionnalités supplémentaires. Licences légèrement différentes. Conformes à la norme POSIX-1003.13 Modification de la couche d'abstraction matérielle pour ajouter des fonctionnalités temps-réel à linux. Cette architecture est basée sur un micro-noyau dont la tâche de plus basse priorité est le système linux.

II. Architecture de Real-time Linux 2.1. Le noyau Linux Linux : Linux est un unix-like (AIX, HP-UX, Solaris,...) Développement initié par Linus Torvalds en 1991 Le code source est ouvert et est placé sous la GNU General Public License -> LINUX EST GRATUIT Plateformes supportées : I386, Alpha, Sparc, 680x0, PowerPC, IBM S/390,... plus de 15 en janvier 2003. Linux vs les UNIX commerciaux : 8 Architecture monolithique : comme les autres UNIX (excepté Mach 3.0 de Carnegie Mellon). Multithreading : comme les autres UNIX

II. Architecture de Real-time Linux 2.1. Le noyau Linux Noyau non préemptif : seul Solaris est un noyau pleinement préemptif Support multiprocesseur symétrique (SMP) : comme la plupart des UNIX Système de fichiers journalisé : comme la plupart des UNIX Avantages de Linux : Gratuité Totalement personnalisable : accès aux sources Plateforme matérielle peu onéreuse Performances : un des UNIX les plus rapides 9 Qualité : extrême stabilité

II. Architecture de Real-time Linux 2.1. Le noyau Linux Compacité : 2.5 millions de lignes de code contre 30 millions pour windows 2000. Le noyau tient sur une disquette de 1.4 Mb. Très bonne compatibilité : reconnaît tous les systèmes de fichiers existants. Compatible avec tous les protocoles réseau. Possibilité d'exécuter des applications compilées pour d'autres systèmes d'exploitation sous Linux. Support technique très efficace : groupes de discussion, listes de diffusion,... Modularité : possibilité d'insertion automatique de gestionnaires de périphérique par un mécanisme de modules noyau : fonctionnalité utilisée par Real-time Linux. 10

II. Architecture de Real-time Linux 2.2. Le noyau Real-time Linux Patch Real-time Linux Noyau Real-time Linux Noyau Linux Tâche TR Tâche TR FIFOs MUTEX Tâche TR Mémoire partagée Sémaphore Tâche TR Tâche TR 11

II. Architecture de Real-time Linux 2.3. Le mécanisme des modules noyau Module int init_module( void ) { void cleanup_module( void ) { /* */ Constructeur /* */ Destructeur Fonction 1 Fonction 1 Fonction n 12

II. Architecture de Real-time Linux 2.3. Le mécanisme des modules noyau Gestion des modules : insmod <nom du module> : insertion du module dans le noyau. Vérification de la compatibilité de version Edition de lien dynamique avec les fonctions du noyau. Execution de init_module. rmmod <nom du module> : retrait du module 13 Vérification que le module n'est pas utilisé. Execution de cleanup_module. lsmod : liste de tous les modules contenus dans le noyau.

II. Architecture de Real-time Linux 2.3. Le mécanisme des modules noyau Les modules RTLinux : rtl_sched.o : scheduler temps-réel. API POSIX. rtl_fifo.o : API de gestion des FIFOs temps-réel. rtl_posixio.o : API d'opérations bas-niveau sur les devices. rtl_time.o : API de gestion du temps (précision : nanoseconde) rtl.o : micro-noyau temps-réel. L'insertion du module rtl.o lance le noyau temps-réel. Les modules RTLinux doivent être insérés préalablement à l'insertion de tout module définissant des tâches temps-réel. 14

II. Architecture de Real-time Linux 2.3. Le mécanisme des modules noyau Les modules RTAI : rtai.o: API de base de RTAI, dispatcheur d'interruptions, gestion du temps. rtai_sched.o : scheduler temps-réel rtai_fifos.o : fifos et sémaphore 15

II. Architecture de Real-time Linux 2.4. Communications user <-> RT Définitions : Processus user : processus tournant en mode user, càd tout processus Linux géré par le noyau Linux. Les processus user bénéficient des mécanismes de protection de l'accès aux ressources: ils ne peuvent pas compromettre l'intégrité du système. Processus RT : processus tournant en mode Kernel. Toutes les tâches Real-time Linux sont lancées à l'insertion d'un module et tournent donc en mode Kernel. Elles ne bénéficient pas des mécanismes de protection des processus user et peuvent donc compromettre l'intégrité du système. Une programmation minutieuse est donc nécessaire. 16

II. Architecture de Real-time Linux 2.4. Communications user <-> RT Il est nécessaire de prévoir des dispositifs de communication entre Linux et RTLinux. FIFOs : il existe 64 FIFOs temps-réel (/dev/rtf0 à /dev/rtf63) qui permettent une communication bidirectionnelle entre Linux et Real-time Linux. Ces FIFOs peuvent éventuellement servir de moyen de communication entre 2 tâches temps-réel. Mémoire partagée : utilisation d'un device /dev/mbuff pour partager une zone mémoire entre un processus RT et un processus user. 17 Avantage : pas de transfert de données : gain de temps Inconvénient : prévoir un mécanisme de mutex Buffer circulaire du noyau : affichage de messages de débogage. Consultable avec la commande dmesg.

II. Architecture de Real-time Linux 2.4. Communications user <-> RT : exemple API 100% compatible entre RTAI et RTLinux Fonctions de base : int rtf_create(unsigned int fifo, int size); création d'une fifo. int rtf_create_handler(unsigned int fifo, int (*handler)(unsigned int fifo)); création d'un handler de fifo int rtf_destroy(unsigned int fifo); destruction d'une fifo Programme de test 18

II. Architecture de Real-time Linux 2.5. Caractéristiques typiques Caractéristiques typiques de Real-time Linux : Fonctionne sur architecture i386, mono ou multiprocesseurs, avec linux version 2.2 ou 2.4. Taille du patch du noyau linux (source) : < 100 Ko Taille des modules Real-time Linux (objet) : < 100 Ko Jitter maximum sur un tâche périodique (pentium III 800) : 2 s. Temps de réponse aux interruptions matérielle : < 2 s. Résolution du timer : 1 ns Scheduler basé sur la priorité : la tâche de priorité la plus haute est executée. 19

II. Architecture de Real-time Linux 2.6. Avantages / inconvénients Avantages : On bénéficie de tout l'environnement UNIX classique (outils de développement, Xwindows, réseau,...) tout en ayant des fonctionnalités temps-réel. Les 2 pouvant communiquer via les FIFOs ou la mémoire partagée. Le micro-noyau Real-time Linux garantie des temps de commutation de contexte très courts -> bonnes performances. Inconvénients : 20 Programmation en mode kernel -> pas de mécanisme de protection de l'intégrité du système API limitée et très simple comparée à des systèmes temps-réel commerciaux.

III. Fonctions de Real-time Linux 3.1. Compatibilité POSIX-1003.13 POSIX 1003.13 : "minimal realtime operating system" Fonctions portables : pthread_create, pthread_join, pthread_kill, pthread_cancel, sigaction, fonctions de gestion des mutex, fonctions de gestion des sémaphores,... Fonctions spécifiques : pthread_make_periodic_np, pthread_setfp_np, pthread_suspend_np, pthread_wait_np, pthread_wakeup_np, pthread_attr_setcpu_np. En n'utilisant que des fonctions portables compatibles POSIX, il est possible d'exécuter le programme en mode user avec des contraintes temps-réel "mou", et ainsi de le déboguer plus facilement avant de le re-compiler pour le mode TR "dur". 21

III. Fonctions de Real-time Linux 3.2. Tâche périodique pthread_t mytask; int init_module ( void ) { struct sched_param p; pthread_attr_t attr; hrtime_t now = gethrtime(); pthread_attr_init( &attr ); pthread_attr_setfp_np( &attr, 1 ); en virgule flottante pthread_create ( &mytask, &attr, fun, (void *) 1 ); Création de la tâche pthread_make_periodic_np ( mytask, now + 2 * NSECS_PER_SEC, 31230000 ); p. sched_priority = 1; Période (ns) pthread_setschedparam ( mytask, SCHED_FIFO, &p ); return 0; Priorité de la tâche Fonction retournant le temps courant (ns) Initialisation de la structure définissant la tâche Autorisation des calculs Instant de départ void cleanup_module ( void ) { pthread_delete_np ( mytask ); Destruction de la tâche à l'extraction du module 22 void *fun ( void *t ){ while( 1 ) { pthread_wait_np( ); Attente du prochain top du timer /* Code executé périodiquement */

III. Fonctions de Real-time Linux 3.3. Handler d'interruption int init_module ( void ) { numéro de l'interruption rtl_request_irq( 8, int_handler ); rtl_hard_enable_irq( 8 ); return 0; pointeur sur le handler d'interruption activation de l'interruption 8 void cleanup_module ( void ) { rtl_free_irq( 8 ); libération du handler l'interruption 8 unsigned int int_handler( unsigned int irq, struct pt_regs *regs ) { 23 pthread_wakeup_np ( thread ); /* clear IRQ */ rtl_hard_enable_irq( 8 ); return 0; réveille de la tâche décrite par thread réactivation de l'interruption 8 (le handler est appelé avec les interruptions désactivées)

III. Fonctions de Real-time Linux 3.4. FIFO / Mémoire partagé FIFOs : voir exemple 1 Mémoire partagée : volatile char *shm; int init_module ( void ) { Pointeur identique Le contenu de la mémoire partagée peut changer à tout moment -> volatile #include <stdio.h> #include "mbuff.h" 24 shm = (volatile char*) mbuff_alloc( "demo",1024*1024 ); if( shm == NULL ) { rtl_printf( "alloc failed\n" ); return -1; sprintf( (char*)shm, "data\n" ); return 0; Identification de la zone partagée void cleanup_module ( void ) { if ( shm ) mbuff_free( "demo",(void*)shm ); Affichage en mode user de la chaîne "data" définie en mode kernel volatile char *shm; main ( int argc,char *argv[] ){ shm = (volatile char*) mbuff_alloc( "demo", 1024*1024 ); if( shm == NULL ) { printf( "alloc failed\n" ); exit( 2 ); printf( "mbuff: %s\n", shm ); mbuff_free( "demo", (void*)shm ); return( 0 );

III. Fonctions de Real-time Linux 3.5. Mutex et sémaphores 25 static pthread_mutex_t static pthread_t int init_module ( void ) { pthread_attr_t attr; mutex; threads[2]; pthread_mutex_init( &mutex, 0 ); pthread_attr_init ( &attr ); Création d'une thread sur le CPU0 pthread_attr_setcpu_np( &attr,0 ); pthread_create ( &threads[0], &attr, start0, (void *) 0 ); pthread_attr_setcpu_np( &attr,1 ); pthread_create ( &threads[1], &attr, start1, (void *) 0 ); return 0; Création d'une thread sur le CPU1 void cleanup_module ( void ) { Attente que les 2 thread soient finies pthread_join( threads[0], NULL ); pthread_join( threads[1], NULL ); pthread_mutex_destroy( &mutex ); static void * start0( void *arg ) { pthread_mutex_lock ( &mutex ); outb( 0xff, 0x378 ); nanosleep( hrt2ts(10000), NULL ); outb( 0x00, 0x378 ); nanosleep( hrt2ts(10000), NULL ); outb( 0xff, 0x378 ); pthread_mutex_unlock ( &mutex ); return (void*) 0; Pulse de 10 s sur le port parallèle static void * start1( void *arg ) { pthread_mutex_lock ( &mutex ); outb( 0xff, 0x378 ); nanosleep( hrt2ts(10000), NULL ); outb( 0x00, 0x378 ); nanosleep( hrt2ts(10000), NULL ); outb( 0xff, 0x378 ); pthread_mutex_unlock ( &mutex ); return (void*) 1;

III. Fonctions de Real-time Linux 3.5. Mutex et sémaphores Les mêmes fonctionnallités peuvent être obtenues avec les sémaphores : sem_wait, sem_timedwait : permet de verrouiller un sémaphore avec ou sans timeout. sem_post : permet de déverrouiller un sémaphore. Les mutex et les sémaphores sont entièrement compatibles avec la norme POSIX-1003.13 et peuvent donc être implémentés en mode user comme en mode kernel. 26

III. Fonctions de Real-time Linux 3.6. LXRT LXRT est une fonctionnalité propre à RTAI qui n'a pas d'équivalent sous RTLinux : Permet d'exécuter un processus temps-réel en mode user Avantages : Permet de développer de manière plus sûre en bénéficiant du mécanisme de protection de la mémoire Utilisation des outils de debogage classiques Pas besoin d'être root pour lancer le programme temps-réel API identique au mode kernel Portage des applications plus simple Inconvénient : 27 Temps de commutation de contexte doublé

IV. Méthodes de développement 4.1. Exemples sous RTAI "stress" : permet de mesurer en nanosecondes le jitter de l'instant de début d'une tâche périodique cadencée à 1000 Hz répétée 500 fois. "sound" : permet, par une modulation de largeur d'impulsion d'un signal carré à 8000 Hz, de produire un son sur le haut-parleur standard d'un PC. Seul un système TR peut garantir un son sans "crachottements". 28

IV. Méthodes de développement 4.2. Méthodologie de débogage Deux symptômes fréquents : 29 Blocage du système : le processus temps-réel prend toute la ressource processeur. Il n'y a plus de temps pour executer linux. Solution : rechercher le bug dans les boucles (for, while) et plus précisément dans leur condition de sortie. Message kernel dans dmesg : "Kernel page fault", "oops",... Dans ce cas, l'erreur provient d'un dépassement de tableau. Il est nécessaire de rebooter le système sous peine de compromettre son intégrité (corruption de filesystem). Pour "traquer" un bug : utiliser rtl_prinf (RTLinux) ou printk (RTAI) pour visualiser l'état de variables importantes du programme. Trop de messages peuvent bloquer le système.

V. Liens www.realtimelinux.org : portail d'accès à toutes les pages ayant rapport avec le temps-réel sous linux. www.fsmlab.com : site web officiel de RTLinux. www.rtai.org : site web officiel de RTAI. www.linuxhq.com : site web sur le développement de linux. www.kernel.org : accès aux sources de linux. 30