ELE- Systèmes ordinés en temps réels Cours # 8 Système d exploitation Temps Réel Jean-Marc Beaulieu et Bruno De Kelper Site internet: http://www.ele.etsmtl.ca/academique/ele/ Systèmes ordinés en temps réel Cours 8 Systèmes d exploitation en temps réel complet - Augmente les fonctionnalités des noyaux temps réel en ajoutant des fonctionnalités tels que des interfaces réseaux, des pilotes compliqués, des outils de déverminage, - Utilise un ordonnanceur de type Round-Robin, priorité préemptive ou les deux. -Le répartiteur s appuie habituellement sur le modèle des blocs de contrôle de tâche car le nombre de tâches à gérer est indéterminé et dynamique. - Deux catégories de OS : - Les systèmes multitâches permettent l exécution concurrente de plusieurs tâches (multiprocessus ou multifils) Ex. : µc/os-ii, Linux, QNX, VXworks, IRIX, UNIX - Les systèmes plus simples permettent l exécution d une seule tâche. Ex. : DOS, CPUBUG Systèmes ordinés en temps réel Cours 8 Système d'exploitation temps réel cours 8
Systèmes d exploitation en temps réel complet Définitions : Tâches, processus et fil d exécution Un fil d exécution («thread») comprend éléments : Une séquence d instructions en exécution (ou exécutable) Un «état du processeur» et une pile ; ceci inclut un locus (ou point) de contrôle dans la séquence d instructions (compteur de programme). Note : Deux ou plusieurs fils peuvent avoir le même code; cependant, ils contrôlent leur «point d exécution» indépendamment. Pour nous, tâche et fil d exécution sont synonymes. Un processus comprend : Un ou plusieurs fils d exécutions Un espace mémoire Systèmes ordinés en temps réel Cours 8 Systèmes d exploitation en temps réel complet Définitions : Section critique, ressource, ressource partagée Section (de code) critique ou atomique Une partie de code (séquence d instructions) qui doit être exécutée sans interruption Ressource Une entité utilisée par une tâche Ex. : périphérique tel que imprimante, clavier, écran variable, structure de données, vecteur Ressource partagée («shared resource») Ressource utilisée par plusieurs tâches Généralement, l accès à une ressource partagée doit être contrôlé afin d éviter les conflits Ex. : tâches écrivant dans une variable en même temps Réf. : Labrosse, Systèmes chap. ordinés en temps réel Cours 8 Système d'exploitation temps réel cours 8
Systèmes d exploitation en temps réel complet Modèle des blocs de contrôle de tâche : (Task-Control Blocks) - Utile dans les systèmes d exploitation complet car il permet de gérer efficacement un nombre variable de tâches. - Associe à chaque tâche une structure de donnée appelée TCB (Task-Control Block) qui contient toute l information nécessaire pour exécuter la tâche: TCB Contexte Code d identification Niveau de priorité - Compteur de programme - Pointeur de pile - Registre de statut - Adresses des données - Systèmes ordinés en temps réel Cours 8 Systèmes d exploitation en temps réel complet Processus avec fil Processus avec fils Réf: Grehan, Moote et Cyliax Real-time programming Systèmes ordinés en temps réel Cours 8 Système d'exploitation temps réel cours 8
Systèmes d exploitation en temps réel complet États d une tâche : - En exécution : La tâche est exécutée par le processeur. Prête : Dans la file d attente pour être exécutée. Suspendue : En attente d une ressource/d un évènement. Dormante/Inactive : État utilisé seulement lorsque le nombre de tâches est fixe et permet de conserver une tâche dans le système sans avoir à la gérer. En exécution Suspendue Prête Dormante Systèmes ordinés en temps réel Cours 8 Systèmes d exploitation en temps réel complet Gestionnaire de tâches : - Le système d exploitation gère les tâches (ne devrait pas utiliser plus de % à % du temps du processeur). - Le système d exploitation est la tâche de priorité la plus élevée. - Chaque interruption matérielle et chaque appel système, tels que les requêtes à une ressource, invoque le système d exploitation. - L OS possède au moins listes : - Liste des tâches prêtes gérée en Round-Robin ou préemption - Liste des tâches suspendues gérée en priorité préemptive - L OS possède aussi au moins tables : - Tables des ressources - Tables des requêtes aux ressources Systèmes ordinés en temps réel Cours 8 8 Système d'exploitation temps réel cours 8
Gestion des tâches Notion de préemption OS multitâches préemptif : La tâche/interruption qui est la plus prioritaire interrompt les tâches/interruptions de plus basse priorité. Déjà vue dans le cas des interruptions hiérarchiques OS multitâches coopératif (sans préemption) : Chaque tâche doit libérer explicitement (par une instruction) le processeur.. Chaque tâche doit «relâcher» le processeur fréquemment. Évènements asynchrones sont toujours traités par les interruptions mais sont traitées seulement lorsque le processeur est «libéré» par la tâche courante. Avantages : Pas besoin de fonctions réentrantes, sauf pour les ISR. Moins de protection des données partagées. Inconvénient : Temps de réponse est plus long. Réf. : Labrosse, chap. Systèmes ordinés en temps réel Cours 8 9 Exécution Système coopératif ) Une tâche est interrompue (IRQ). ) Saut vers ISR ) ISR traite l événement et rend une tâche plus prioritaire prête pour l exécution ) Retour de ISR ) Continuation de la tâche interrompue ) La tâche de basse priorité relâche le CPU ) La tâche de haute priorité exécute Tâche de priorité basse Tâche de priorité basse libère le CPU Réf. : Labrosse, chap. ISR rend la tâche de priorité haute «prête» Tâche de priorité haute Temps Systèmes ordinés en temps réel Cours 8 Système d'exploitation temps réel cours 8
Exécution Système préemptif ) Une tâche de basse priorité est interrompue (IRQ) ) Saut vers ISR ) ISR traite l événement et rend une tâche plus prioritaire prête pour l exécution. ) Retour de ISR ) Exécution immédiate de la tâche de haute priorité exécute ) Retour à la tâche de plus basse priorité Réf. : Labrosse, chap. Tâche de priorité basse () () () () () ISR rend la tâche de priorité haute «prête» () () Tâche de priorité haute Temps Note : Une interruption périodique de la minuterie est utilisée pour déclencher régulièrement le séquenceur. Systèmes ordinés en temps réel Cours 8 Systèmes d exploitation en temps réel complet Représentation structurelle : Tâches dormantes : ISR MEM Tâches Liste de tâches Tâches en attente : Tâches prêtes : CPU Tâche active CODE PILE ID État ID État ID État ID État Systèmes ordinés en temps réel Cours 8 Système d'exploitation temps réel cours 8
µc/os-ii Les états d une tâche Réf. : Labrosse, chap. Systèmes ordinés en temps réel Cours 8 Noyaux en temps réel Services offerts Il est possible de regrouper les principaux services offerts par les noyaux en temps réel. Nous utiliserons le cas de µc/os-ii : Gestion des interruptions Activation, désactivation et traitement Gestion des tâches Création, Communication intertâches Sémaphores, boîte à courrier, queue Séquenceur Gestion du temps Horloge et délais Gestion de la mémoire Mémoire partagée, Systèmes ordinés en temps réel Cours 8 Système d'exploitation temps réel cours 8
Noyaux en temps réel Gestion des tâches Les fonctions nécessaires à la gestion des tâches dans µc/os-ii sont : Création d une tâche Tâches dormantes : Élimination d une tâche Suspendre/reprendre une tâche Tâches en attente : Retardement d une tâche Requête d information Sujets connexes Les fonctions internes du noyau (répartiteur, séquenceur) Les tâches systèmes (Ex : fonctions «Idle», «statistique») Tâches prêtes : ISR CPU Tâche active Systèmes ordinés en temps réel Cours 8 Noyaux en temps réel Gestion des tâches Création d une tâche Allocation de mémoire pour la pile et TCB Initialisation de la pile : configuration de départ Initialisation de la table de contrôle de la tâche (TCB) Rendre la tâche active (prête pour exécution) Appeler le séquenceur Tâches dormantes : Quelles sont les informations nécessaires dans le TCB? Un compteur ordinal (numéro ou ID de la tâche) État et priorité Pointeur vers la pile Durée de retard fixée par une minuterie Copie des : (stack pointer), généraux, du coprocesseur mathématique Tâches prêtes : Nouvelle tâche Liste des tâches ACTION ID État Systèmes ordinés en temps réel Cours 8 Système d'exploitation temps réel cours 8 8
Noyaux en temps réel Gestion des tâches Création d une tâche : uc/os-ii - fonctions de création d une tâche : ErrCode OSTaskCreate(maTâche, ¶mètre, &pile, priorité) Code de retour OS_NO_ERR OS_PRIO_EXIST OS_PRIO_INVALID OS_NO_MORE_TCB Code de la tâche (nom de la fonction) Pointeur vers paramètre (optionnel) Pointeur vers la pile de la tâche (début de la pile) ErrCode OSTaskCreateExt(maTâche, ¶mètre, &pile, priorité, ID, &pilefin, piletaille, &TCBextension, options) Code d identité (optionnel) Pointeur vers le bas de la pile Taille de la pile Pointeur vers une extension du TCB Niveau de priorité de la tâche (code d identité) Options de la tâche OS_TASK_OPT_STK_CHK OS_TASK_OPT_STK_CLR OS_TASK_OPT_SAVE_FP Systèmes ordinés en temps réel Cours 8 Noyaux en temps réel Gestion des tâches Création de tâche dans uc/os-ii Une tâche est constituée de choses : - Code de la tâche : fournit par le programmeur (vous!). - Bloc de contrôle de tâche (TCB) : créé lorsque la tâche est créée. - Pile de la tâche : statique ou dynamique créé avant de créer la tâche. Code d une tâche : Déclaration d une pile : exemple Pointeur vers paramètres Boucle infinie void Task (void *pdata) { déclarations de variables locales Code d initialisation (optionnel) for (;;) { Code d exécution de la tâche (contient des appels au système) } } Statique #define TASK_STK_SIZE OS_STK TaskStk [TASK_STK_SIZE]; Dynamique #define TASK_STK_SIZE OS_STK *pstk; pstk = (OS_STK *)malloc(task_stk_size); Systèmes ordinés en temps réel Cours 8 8 Système d'exploitation temps réel cours 8 9
Noyaux en temps réel Gestion des tâches Création d une tâche (suite) Problème : Comment estimer la taille de la pile de façon à éviter les débordements? Changer la taille de la pile de façon dynamique Pas recommandé parce que l allocation dynamique est lente et il n y a pas de garantie de succès Estimer la taille de la pile (variables locales, récursivité, niveau d interruptions imbriqués, ). Une bonne marge de sécurité (, à fois la taille estimée) est à prévoir Tester le code plusieurs fois, dans des conditions critiques, pour établir une taille sécuritaire Problème : La création d une tâche peut consommer beaucoup de temps. Comment en minimiser l impact? Créer toutes les tâches au départ (initialisation). Si elles ne sont pas utilisées au départ, les mettre en attente (suspension) Systèmes ordinés en temps réel Cours 8 9 Noyaux en temps réel Gestion des tâches Élimination d une tâche µc/os-ii procède en deux () étapes :. Soustraire la tâche du séquenceur (l enlever des différentes tables qu il utilise).. Libère la mémoire occupée par le TCB et la pile. Note : ceci permet de réactiver les IRQ après la première étape (p-c-q la tâche à éliminer ne peut plus être «exécutée». Problème : Comment s assurer que la tâche éliminée ne possède pas l accès exclusif à une ressource partagée qui ne sera jamais relâchée? Une tâche ne doit pas éliminer d autres tâches (sauf elle-même). Utilisation d un mécanisme de «requête d élimination» où on demande à une tâche de terminer «proprement». Tâches dormantes : Tâches prêtes : Tâche Liste des tâches ACTION ID État Systèmes ordinés en temps réel Cours 8 Système d'exploitation temps réel cours 8
Noyaux en temps réel Gestion des tâches Élimination d une tâche : uc/os-ii - fonctions d élimination d une tâche : - Pas sécuritaire. - Permet à une tâche de s auto-détruire (préférable). ErrCode OSTaskDel(priorité) Code de retour OS_TASK_DEL_ERR OS_TASK_DEL_ISR Niveau de priorité de la tâche (sert en même temps de code d identification) OS_NO_ERR OS_TASK_DEL_IDLE OS_PRIO_INVALID (commun au deux) OS_TASK_NOT_EXIST OS_TASK_DEL_REQ - Plus sécuritaire. - Demande à une tâche de s auto-détruire. ErrCode OSTaskDelReq(priorité) Systèmes ordinés en temps réel Cours 8 Noyaux en temps réel Gestion des tâches Suspendre/reprendre une tâche Il est parfois utile de suspendre l exécution d une tâche. Ex. : Tâches créées au début mais utiles seulement à la fin du traitement. Utile dans le débogage et les tests : Permet d isoler l effet de l exécution d une tâche µc/os-ii utilise deux () fonctions à cette fin : (commun au deux) Code de retour OS_NO_ERR OS_PRIO_INVALID action Tâches en attente : Tâches prêtes : Niveau de priorité de la tâche OS_TASK_SUEND_IDLE OS_TASK_SUEND_PRIO OS_TASK_RESUME_PRIO OS_TASK_NOT_SUENDED ErrCode ErrCode OSTaskSuspend(priorité) OSTaskResume(priorité) Systèmes ordinés en temps réel Cours 8 Système d'exploitation temps réel cours 8
Noyaux en temps réel Gestion des tâches Retardement d une tâche Ce service permet de retarder une tâche pour un certain nombre de Ticks d horloge ou une durée de temps (H.M.S.mS). Utile pour les tâches cycliques ou pour accorder du temps aux autres tâches. Un retardement nul est parfois utilisé pour déclencher l exécution du séquenceur. La résolution de la durée d attente dépend de l initialisation du Timer. Retardement d une tâche Délai Fin du délai ISR (Timer) Tâches en attente : CPU Tâche active Tâches en attente : CPU Tâche active Tâches prêtes : Tâches prêtes : Systèmes ordinés en temps réel Cours 8 Noyaux en temps réel Gestion des tâches Retardement d une tâche : uc/os-ii uc/os-ii fournit fonctions qui permettent à une tâche de se mettre en attente pendant un délai déterminé : Résolution dépend de l initialisation du Timer void OSTimeDly(Ticks) Nombre de Ticks d horloge ( à ) void OSTimeDlyHMSM(heures,minutes,secondes,millisecondes) Max : à à 9 à 9 à 999 uc/os-ii fournit aussi fonction qui permet à une tâche de forcer le retour d une tâche qui a été mise en attente : Code de retour OS_NO_ERR OS_PRIO_INVALID OS_TIME_NOT_DLY OS_TASK_NOT_EXIST ErrCode OSTimeDlyResume(priorité) Note : ne peut pas forcer le retour d une tâche retardée pour plus de Ticks. Niveau de priorité de la tâche Systèmes ordinés en temps réel Cours 8 Système d'exploitation temps réel cours 8
Noyaux en temps réel Gestion des tâches Autopsie d un système simple : Les déclarations : #include uc/os-ii (Librairies standards à inclure) Déclarations des librairies #include #include #include #include "\software\ucos-ii\ix8l\bc\os_cpu.h" "os_cfg.h" "\software\ucos-ii\source\ucos_ii.h" "\software\blocks\pc\bc\pc.h Déclarations des constantes #define TASK_STK_SIZE Déclarations des variables globales (piles, sémaphores, drapeaux, ) OS_STK OS_STK OS_STK OS_STK TaskStk [TASK_STK_SIZE]; TaskStk [TASK_STK_SIZE]; TaskStk [TASK_STK_SIZE]; TaskStartStk[TASK_STK_SIZE]; Déclarations des prototypes (tâches, fonctions) void Task(void *data); void Task(void *data); void Task(void *data); void TaskStart(void *data); Systèmes ordinés en temps réel Cours 8 Noyaux en temps réel Gestion des tâches Autopsie d un système simple : uc/os-ii Le démarrage du système : void main (void) { OSInit(); Initialise uc/os-ii et crée une tâche inactive (Idle Task) _DOSSaveReturn(); Sauve le contexte du DOS _VectSet(uCOS, OSCtxSw); Installe l interruption pour les changements de contexte OSTaskCreate(TaskStart, (void *), &TaskStartStk[TASK_STK_SIZE - ], ); OSStart(); Démarre uc/os-ii } (Tout ceci est obligatoire et selon cet ordre) Crée une ière tâche de niveau de priorité très élevé (niveau ). Cette tâche va servir à démarrer. les autres tâches. Systèmes ordinés en temps réel Cours 8 Système d'exploitation temps réel cours 8
Noyaux en temps réel Gestion des tâches Autopsie d un système simple : Le démarrage du système : Obligatoire pour initialiser le Timer utilisé par uc/os-ii et doit être fait après OSStart() Créer les tâches ici Obligatoire sous DOS seulement pour permettre d arrêter le système Permet d accorder du temps aux autres tâches uc/os-ii void TaskStart (void *pdata) { INTS key; } pdata = pdata; OS_ENTER_CRITICAL(); _VectSet(x8, OSTickISR); _SetTickRate(OS_TICKS_PER_SEC); OS_EXIT_CRITICAL(); for (;;) { if (_GetKey(&key) == TRUE) { if (key == xb) { _DOSReturn(); } } OSTimeDlyHMSM(,,, ); } Systèmes ordinés en temps réel Cours 8 Système d'exploitation temps réel cours 8