Présentation
Transcription
Présentation
Formation RTX – Module 1 0/3 Présentation Présentation 1/3 Description de RTX •Procure des performances temps-réels déterministes pour NT/2000/XP •Ajoute un sous-système temps réel à NT/2000/XP •Utilise uniquement le système d’exploitation Microsoft pour la chargement de processus, l’édition des liens des Dlls et l’allocation mémoire •Possède son propre ordonnanceur (scheduler) •Propose une API temps-réel (RTAPI) qui peut être utilisée par : •Des processus Win 32 avec des temps de réponse de 3 à 10 ms •Des processus RTSS avec des temps de réponse de quelques µs à 100 µs •Attention, ces temps de réponse dépendent aussi : •Du processeur, du cache, de la vitesse de la mémoire, du bus, du DMA, … •Des régions de code NT critique qui inhibent les interruptions •Les processus Win32 et RTSS peuvent accéder aux objets IPC (Interprocess communications) communs •Utilisation des standards (APIs, fichiers entête, outils de développement) •Outils de tests de performances des processus RTSS, outils de déboguage (windbg, softice) 1 Présentation 2/3 Structure de RTX Processus Win32 appelant l’API RTAPI Processus Win32 Processus RTSS Processus RTSS appelant l’API Win 32 Win32 DLL Win32 Subsystem RTX RTSS (Real-Time Subsystem) Windows NT Kernel + Device drivers RTX Real-Time HAL Présentation 3/3 La solution RTX •Aucun changement par rapport au « Kernel Microsoft NT/2000/XP », exécutables et drivers •La couche HAL a été améliorée pour le temps réel : isolement des interruptions, timers rapides, interception des écrans bleus •Démarrage rapide des processus RTSSau « boot » en mémoire non paginée •Les processus RTSS survivent après un « NT STOP » (écran bleu) ou un shutdown •La RTX API a la même sémantique que l’API Win32 •Gestion de la « starvation » de NT (temps d’exécution de NT alloué par RTX) •Gestion des exceptions •Support de FPU •L’utilisation du FPU dans un processus RTX provoque une dégradation des performances de 10 % due à la sauvegarde et à la restauration du contexte lors de la commutation dès qu’une opération en virgule flottante est utilisée. 2 Formation RTX – Module 2 0/15 Architecture Architecture 1/15 Sommaire RTSS SRI (Service Request Interrupt) HAL Gestionnaire d’objets 3 Formation RTX – Module 2 2/15 RTSS Architecture 3/15 Les composants de RTSS •Les composants RTSS dans l’environnement RTSS •Module SRI (Service Request Interrupt) RTSS •Module de gestion des mécanismes IPCs et des threads •Module de services Timer et horloge •Module de gestion des shutdowns et des interruptions •Les composants RTSS dans l’environnement NT •Module SRI NT •Module « Load / Unload » de processus RTSS •Module d’allocation mémoire •Module supportant RTAPI Win32 4 Architecture Environnement NT/2000/XP 4/15 Environnement RTSS RTAPI Win32 support Other RTX API Support SRI Servers Clients RTSS Queue SRI Servers Clients Process and heap Object Managment Clocks And timers IPC NT Queue Process Memory Thread Manager Exception Formation RTX – Module 2 Interrupt 5/15 SRI 5 Architecture 6/15 Description du modèle SRI •SRI = Service Request Interrupt •Module de communication supportant les requêtes entre RTSS et NT/2000/XP •Win32 accède à des objets IPC de RTSS •RTSS demande de la mémoire à NT/2000/XP •Basé sur un proxy et un stub qui utilise un protocole bas LPC non verrouillés •2 files : NT/2000/XP vers RTSS et RTSS vers NT/2000/XP •Maintient l’isolement des contextes entre RTSS et NT/2000/XP •L’OS Microsoft est préempté dans un état arbitraire lorsque RTSS est lancé •Performant,stable et supporte le SMP •Concept d’interruption inter-processeur Architecture 7/15 Exemple de séquence SRI •Le thread appelant créé un « request packet », et insère un pointeur sur celui-ci dans la file SRI et attend •L’environnement opposé voit l’interruption, lance le thread serveur SRI qui récupère le « request packet », effectue la requête, et poste à son tour une interruption SRI •Le thread serveur SRI de l’environnement de départ voit la réponse et la signale au thread appelant original 6 Formation RTX – Module 2 8/15 HAL Architecture 9/15 Description de la HAL temps réel •Aucun changement de performances par rapport aux fonctions existantes lorsque RTSS n’est pas utilisé •Gestion de la l’horloge temps réel (HTR) et des timers •Horloges et timers sont synchronisés •Résolution de l’horloge de 1s et mieux (dépendant du hardware) •Période du Timer de 100 µs et mieux (dépendant du hardware) •Elimination des temps de masquage d’IT > 5 µs •Temps de latence suite à une IT •Moyenne = 10 µs •Pire des cas avec un « warm cache » = 50 µs •Pire des cas avec un « cold cache » (mémoire à 60 ns) = ~200 µs •« Trap » et gestion de toutes les situations de « Blue screen » et de « reboot » système 7 Formation RTX – Module 2 10/15 Objets Architecture 11/15 Description du gestionnaire d’objets RTX API (RTAPI) Object Manager Object Structure, One per Object instance Type Object Pointer Object Type Table Entry Pointers to Object Methods Object Methods Main Object Manager Data Structure Array of Type Object Entries 8 Architecture 12/15 Les objets RTSS Objet Objet de Synchronisation Espace de nommage Timer Interrupt handler Shutdown handler Thread Process Sémaphore Mutex Shared Memory Mailslot Console I/O File I/O Registry Non Non Non Oui Oui Oui Oui Non Non Non Non Non Non Non Non Non Oui Oui Oui Oui Oui Non Oui Oui Compatibilité Win32 RTX alter. RTX only RTX only Interface Non Complète Complète RTX alter. Non dispo. Interface Non dispo. Non dispo. Architecture 13/15 Caractéristiques des objets RTSS •Ils occupent un espace de nommage séparé par rapport à ceux de la Win32 •Ils sont maintenus dans l’espace mémoire de RTSS •Ils peuvent être partagés entre les processus et threads Win32 et RTSS •Ils disposent d’une interface identique avec Win 32 •CreateMutex RtCreateMutex •ReleaseSemaphore RtReleaseSemaphore •Ils disposent d’une sémantique identique avec Win 32 (Mêmes paramètres d’appel, même si certains ne sont pas utilisés par RTX) •Les attentes (« waits ») sur les objets sont satisfaits par critères de priorité ou par FIFO en cas de priorité égale 9 Architecture 14/15 Accès par handle aux objets RTX Process Data Structure Handle Leaf Object Table Nodes •La valeur du « handle » est séquentielle •La « process object table » est un arbre à N branches •Allocation dynamique de branches à 128 nouveaux handles Root object Table Node (Max. 128) Object Data Structure Architecture 15/15 Les méthodes génériques des objets XXX Object Instance Méthodes de base (Create, Close, Open) Méthodes de synchronisation d’objet (wait, waitcancellation) Exemple : la méthode RtCreatexxx RTX API (RTAPI) handle = RtCreateXxx (Name) Object Manager Create Object Instance Call Object Methode Process Object Table XXX Object CreateMethod Allocate Handle in Process Object Table XXX Object Methods 10 Formation RTX – Module 3 0/17 Environnement de Développement Environnement de développement 1/17 Comment développer avec RTX ? Outils de développement : Développement et tests comme pour un processus « console » Win32 Support pour le développement de programmes temps réel dur Fourniture de Makefile, d’utilitaires d’exécution, de visualisation et de kill Commande en ligne Utilisation du Wizard RTX Visual Studio 6 RTSS Object Viewer RTSS Task Manager Les outils de tests et de performances SRTM : termps de latence sur timer au niveau application KSRTM : temps de latence sur timer au niveau kernel Gencrash : pour tester les passages en mode dégradé Console pour les applications RTSS Les informations utilisateur Manuels utilisateur et de référence au format Acrobat Aide en ligne Les multiples exemples du SDK 11 Environnement de développement 2/17 Utilisation de Visual Studio 6 Paramètrage de Microsoft Visual Studio • Paramètrage des options de Visual Studio pour intégrer : Le chemin des fichiers include de RTX dans les répertoires de recherche des includes Include files — c:\program files\venturcom\rtxsdk\include Le chemin des librairies de RTX dans les répertoires de recherche des librairies Library files — c:\program files\venturcom\rtxsdk\lib Utilisation du wizard RTX afin de créer un workspace RTX. Un workspace RTX peut contenir 4 types d’applications : Win32 Release Win32 Debug RTSS Release RTSS Debug Environnement de développement 3/17 Création d’un projet avec AppWizard Nom du Projet Répertoire Option du Workspace Platform 12 Environnement de développement 4/17 Paramètrage du projet Type d’application Représentation des strings Edition des liens avec la C Run Time Library Environnement de développement 6/17 Options du projet Création d’un framework : squelette ou projet vide Type d’éléments à intégrer dans le cas où le choix framework est retenu 13 Environnement de développement 7/17 Compléments avec Visual Studio 6 Création manuelle d’un projet Utilisation de l’AppWizard standard en choisissant une application de type console Win32 et en intégrant rtapi_w32.lib dans la liste des modules Définition des paramètres de taille de pile (stack size) à l’aide des options de Visual Studio Configuration de l’environnement de Debug en recopiant VenturcomDbgrs.dll dans le répertoire de Visual Studio Environnement de développement 8/17 RTSS Run Manager RTSS Run et RTSS Run Manager en mode graphiques permettent le démarrage d’un processus ou d’une Dll RTX En mode commande : RTSSRun MonAppli.rtss En mode graphique : 14 Environnement de développement 9/17 RTSS ObjectViewer RTSS Object Viewer est un explorateur d’objets de tous les objets manipulés par l’environnement RTX via RTSS Présentation sous forme d’arbre de toutes les informations Repérage par icônes des différents types d’items Possibilité de filtrage par type d’items Choix de la fréquence de rafraîchissement des informations Navigation par menu, boutons et raccourcis clavier RTSSView produit l’équivalent de RTSS Object Viewer mais en mode console avec une sortie texte Environnement de développement 10/17 RTSS ObjectViewer 15 Environnement de développement 11/17 RTSS TaskManager RTSS TaskManager permet de contrôler les proccessus et Dll contrôlés par RTSS Visualisation des tâches et Dll actives Arrêt d’une tâche ou d’une Dll Lancement d’une tâche Nota : RTSS TaskManager regroupe les outils RTSSRun, RTSSkill disponibles en mode console Environnement de développement 12/17 RTX Server RTX Server réalise la traçabilité des résultats de RTSS et peut logger ces éléments vers un fichier Il s’agit d’un SERVICE de traces 16 Environnement de développement 14/17 Configuration Configuration à travers une fenêtre de contrôle accessible dans le panneau de configuration : ¾Configuration du démarrage et des paramètres de RTX ¾Configuration du Debug ¾Enumération des périphériques Plug and Play ¾Arrêt et Démarrage des sous-systèmes de RTX Environnement de développement 15/17 Les 3 groupes d’API RTX •RTAPI (Real-Time API) composé de : APIs Real-Time qui n’ont pas d’équivalence en Win32 (RtAttachInterruptVector) Win32 RT qui sont similaires aux APIs Win32 mais dont le comportement est amélioré pour fournir des performances temps réel (RtCreateMutex) Remarque : RTSS utilise pour les RTAPIs les numéros d’erreurs Win32 Ces APIs assurent un comportement d’exécution temps réel : ¾Déterministe : •Exécution •« Shutdown » des handlers et fin d’application ¾Non déterministe : •Initialisation et création de tous les objets •Win32 API (sous-ensemble) dont le comportement est identique à celle de Microsoft •C Run Time API Attention la C Run Time API alloue plusieurs Mo au lancement de chaque processus qui l’utilise 17 Environnement de développement 16/17 Convention d’écriture Les processus qui utilisent conjointement les APIs Win32 et RTX et qui sont donc ordonnancés par NT/2000/XP sont appelés : PROCESSUS WIN32 RTX Les processus qui utilisent uniquement les RTAPIs (RTWIN32 et RTX) et qui sont donc ordonnancés par RTSS sont appelés : PROCESSUS RTX Environnement de développement 17/17 Les groupes fonctionnels d’APIs Gestion des processus et des threads Gestion des entrées / sorties (ports I/O) Horloges et timers Gestion des exceptions Gestion des interruptions Gestion mémoire Communications inter-processus Générale 18 Formation RTX – Module 4 0/8 Entrées/Sorties Entrées/Sorties 1/8 Accès aux E/S standards avec RTX •RTX propose depuis la version 4.2 les APIs File IO de Win32 •Attention à l’aspect non déterministe du File Manager de NT, trop lent pour stocker ou obtenir des données en temps réel •Solutions : Réécrire le file manager et le driver de disque avec les APIs RTX Placer les données temps réel dans une mémoire partagée avec un processus Win32 qui écrit ou lit sur le disque en utilisant les accès asynchrones Attention : le buffer partagé doit être suffisamment dimensionné pour prendre en compte le « jitter » du temps d’accès au disque File Manager NT SRI RTX 19 Entrées/Sorties 2/8 APIs Win32 d’entrées/sorties standard File IO / API Win32 supportés par RTX CreateDirectory RemoveDirectory CreateFile ReadFile DeviceIoControl DeleteFile SetFilePointer IOCTL Utilisateur Driver SRI Application API Hardware Operating System Entrées/Sorties 3/8 Rappel sur l’espace des entrées/sorties d’un PC sous NT/2000 •L’espace d’entrées/sorties sous Windows NT/2000 est identique à celui des processeurs INTEL FFFFFFFF Mémoire Physique Non accessible 4 GBytes 0000FFFF 64 KBytes 00000000 Espace Mémoire Physique 00000000 •Les différences reposent non pas sur l’espace d’entrées/sorties (identique), mais sur le mode d’accès (protection) •De taille 64 Ko, l’espace est protégé aussi bien en mode protégé qu’en mode réel, par les instructions assembleurs IN et OUT (en C Microsoft, _inp et _outp) qui activent la broche M/IO du processeur Accessible par I/O space 20 Entrées/Sorties 4/8 Mapping des E/S d’un PC 0000-000F Slave DMA 0010-0018 System 001F System 0020-0021 Master 8259 0040-0043, 0048-004B PIT #1, PIT #2 0050-0052 System 0060 Keyboard / Mouse 0061 System control port B 0064 Keyboard mouse status 0070-0071 NMI Enable / real-time clock 0081-008B DMA page registers 0090-0091 System 0092 System control port A 0092-009F System 00A0-00A1 Slave interrupt controller 00C0-00DE Master DMA controller 00F0-00F1 Coprocessor busy clear/reset 0170-0177 Secondary IDE controller 01F0-01F7 Primary IDE controller 0201 0220-022F 0278-027A 02E8-02EF Joystick interface Sound Blaster LPT 2 (XT parallel port 3) Alternate COM (4) 02F8-02FF 0330-0331 0376 0378-037A 0388-038B 03B0-03BB 03BC-03BE 03C0-03DF 03E0-03E7 03E8-03EF 03F0-03F7 03F8-03FF 0534-0537 0CF8-0CFB COM 2 MPU-401 IDE Controller LPT 1 (XT parallel port 2) FM Synthesis MDA/EGA/VGA LPT 3 (XT parallel port 1) EGA / VGA PCIC PCMCIA controllers Alternate COM (3) FDC COM 1 Windows sound system PCI ports Entrées/Sorties 5/8 Accès aux ports E/S et leur protection sous NT/2002 Applications OS extensions Kernel Kernel Plus privilégié privilégié Plus High speed operating System interface System Services RTX •Les ports d’E/S sont protégés par HAL qui forme une couche de protection entre l’électronique et le KERNEL pour permettre la portabilité multi-plateforme et la sécurité d’accès multiple au matériel •Sous NT/2000, les applications ont un niveau de privilège trop faible pour accéder aux ports E/S Tout accès à partir d’une application déclenche une exception sur les instructions IN, OUT, INS, OUTS, CLI et STI Ce mécanisme est appelé trapping (INTEL) 21 Entrées/Sorties 6/8 APIs RTX : port I/O Port I/O Real-Time APIs RtEnablePortIo RtDisablePortIo RtWritePortBufferUchar, RtWritePortBufferUshort, RtWritePortBufferUlong RtReadPortBufferUchar, RtReadPortBufferUshort, RtReadPortBufferUlong RtWritePortUchar, RtWritePortUshort, RtWritePortUlong RtReadPortUchar, RtReadPortUshort, RtReadPortUlong RtGetBusDataByOffset, RtSetBusDataByOffset, RtTranslateBusAddress •ATTENTION : si votre carte est dans l’espace RAM, RtMapMemory mappera une section de mémoire physique dans l’espace d’adressage virtuel du processus RTX •Tout accès en dehors de cette zone mappée provoque une exception pour les processus Win32 RTX •L’accès à la registry de NT/2000 pour la configuration des cartes I/O n’est possible qu’à travers un processus Win32 RTX Entrées/Sorties 7/8 Déverrouillage de la protection des accès aux Entrées/Sorties •Le mécanisme de protection passe par une bitmap associée à chaque descripteur de processus (TSS) au niveau processeur •Chaque bit de la bitmap correspond à un port de l’espace d’E/S •Si le bit est positionné, le port d’E/S est accessible •Si il est invalidé, il est masqué et provoque une exception à chaque accès •Les APIs RtEnablePortio et RtDisablePortio permettent aux processus Win32 RTX de verrouiller et déverrouiller un ou plusieurs ports d’E/S •Remarque : l’espace d’E/S est automatiquement et entièrement déverrouillé pour les processus RTX 22 Entrées/Sorties 7/8 Enumération du bus PCI Les cartes PCI répondent à la spécification PlugAndPlay L’allocation des ressources matérielles (adresses, IRQ, DMA, Port) est faite par le BIOS au boot du PC Le but est donc de récupérer l’adresse de base et le niveau d’IRQ d’une carte PCI avant de la piloter Cette récupération est assurée par la HAL via la fonction RtGetBusDataByOffset Description de l’espace de configuration des cartes PCI DeviceID Status Class Code BIST VendorID Command Revision ID Header Type LT Cache Line Sz Base Address Register 0 00h Base Address Register 1 … Base Address Register 5 Cardbus CIS Pointer Subsystem ID Subsystem Vendor ID Expansion ROM Base Address BIST Reserved Reserved Header Type LT Cache Line Sz 3Ch Formation RTX – Module 5 0/6 Gestion des Interruptions 23 Gestion des Interruptions 2/6 Le cycle de reconnaissance des interruptions •Un signal d’interruption est envoyé au contrôleur d’interruption du PC •Le contrôleur indique au CPU qu’une IRQ est en cours •Le CPU termine l’instruction courante •Le CPU sauvegarde le contexte de la tâche courante •Le CPU masque toutes les Its (flag I du processeur INTEL) •Le CPU change le contexte de l’ISR à partir de la table IDT (Interrupt Descriptor Table) •Le CPU exécute l’ISR •L’ISR revalide les interruptions (instruction STI) •L’ISR se termine •Le CPU restaure l’état de la tâche précédente •Le CPU reprend l’exécution de la tâche Gestion des Interruptions 2/6 Les niveaux de préemption système de NT (IRQL) •IRQL = Niveau de préemption système C.A.D. des niveaux de priorité d’exécution du kernel pour répondre à des évènements •Le Kernel gère par processus une IDT (Interrupt Dispatch Table) et se réserve 8 niveaux dans chaque IDT. Les 24 niveaux restants sont gérés par la HAL •IRQL = Niveau de préemption Kernel relatif à un niveau d’interruption matérielle •Niveau 31 •Niveau 30 •Niveau 29 •Niveau 28 •Niveau 12-27 •Niveau 4-11 •Niveau 3 •Niveau 2 •Niveau 1 •Niveau 0 (HIGH_LEVEL) (POWER_LEVEL) (REQUEST_LEVEL) (CLOCK_LEVEL) (WAKE_LEVEL) (DISPATCH_LEVEL) (APC_LEVEL) (PASSIVE_LEVEL) interruption due à une erreur matérielle interruption due à un problème d’alimentation interruption inter-processeur SMP interruption horloge interruptions 0 à 15 du PC réservé par le kernel interruption pour les debogueurs logiciels exécution des routines Dispatch et des DPC APC, renvoi de l’IRP par IOManager exécution des threads système 24 Gestion des Interruptions 2/6 Les interruptions du PC IRQ PC IRQ 0 IRQ 1 IRQ 2 IRQ 3 IRQ 4 IRQ 5 IRQ 6 IRQ 7 IRQ 8 IRQ 9 IRQ 10 IRQ 11 IRQ 12 IRQ 13 IRQ 14 IRQ 15 System Timer Keyboard Pic cascade COM 2 COM 1 LPT 2 floppy LPT 1 Real-time clock (CMOS) COM 4 COM 3 PS/2 - Mouse Coprocesseur Contrôleur IDE Primaire Contrôleur IDE Secondaire DIRQL NT Vecteur HAL Non installable 26 18 24 23 22 21 20 Non installable 18 17 16 15 14 13 12 Non installable 49 57 51 52 53 54 55 Non installable 57 58 59 60 61 62 63 Gestion des Interruptions 2/6 Sources de latence aux interruptions •Logicielles : •Longueur excessive de la routine d’Its •Masquage des ITs au niveau du PIC (Programmable Interrupt Controler) •Fait par le Kernel ou certains drivers •Masquage des ITs au niveau du processeur •HAL, Kernel et drivers systèmes spéciaux •Matérielles : •Incohérence de cache •Temps de relâchement du bus après un long transfert •Gestion d’alimentation utilisant les NMIs (Non Marshable Interrupts) 25 Gestion des Interruptions 2/6 Réponses de RTX aux latences des interruptions •Au niveau du PIC – Modification de la HAL pour isoler les ITs •NT est les drivers NT ne peuvent pas inhiber les ITs associées à RTSS •Installation au niveau HAL d’un « hook » d’interception des paires « cli/sti » •Ce hook modifie le niveau de préemption matériel (DIRQL) •Toutes les interruptions liées à NT sont masquées lorsque RTSS s’exécute •Au niveau processeur •Modification de la HAL pour éliminer les sections critiques de longue durée dues à une paire « sti/cli » •Fourniture d’un driver qui place dynamiquement un «hook » dans ces paires « sti/cli » et pointe vers une routine de la HAL •Détermination par les outils de performances du composant NT ou du driver qui introduit une latence importante Gestion des Interruptions 2/6 Les outils de performance : SRTM et KSRTM •SRTM (System Response Time Measurement) •Mesure le temps écoulé entre le moment ou le timer matériel prend la ligne IRQ sur le bus jusqu’au début de l’exécution du handler •Ce temps inclut toutes les sources de latence •Latence hardware (hardware) •Temps de dispatching processeur (processor dispatch) •Temps de déroulement de la routine de gestion d’IT bas niveau (low level timer interrupt handling) •Temps de déroulement de l’ISR (thread dispatch times) •KSRTM (Kernel System Response Time Measurement) •Mesure le temps écoulé entre le moment ou le timer hardware prend la ligne IRQ sur le bus, jusqu’au début de l’exécution de l’ISR Timer •LPT •Détecte les monopolisations de bus eb bouclant sur les timers internes des Pentium 26 Gestion des Interruptions 2/6 Les APIs RTX Interrupt Services Real-Time APIs RtAttachInterruptVector RtAttachShutdownHandler RtDisableInterrupts RtEnableInterrupts RtReleaseInterruptVector RtReleaseShutdownHandler Formation RTX – Module 6 0/7 Horloges et Timers 27 Horloges et Timers 1/7 Sommaire RAPPEL SUR LA GESTION DES HORLOGES ET TIMERS SOUS NT/2000/XP HORLOGE RTX TIMERS RTX GESTION PERIODIQUE DES TIMERS LES TIMERS DE MISE EN VEILLE DES THREADS APIS RTX : HORLOGES ET TIMERS Horloges et Timers 2/7 Rappel sur la gestion des Horloges et Timers sous NT/2000/XP NT maintient une horloge système interne qu’il incrémente tous les 10 ms avec une résolution de 100 ns (tics) Cet incrément provoque une accumulation d’arrondis et un écart par rapport à l’horloge CMOS Cet écart est corrigé toutes les heures par NT qui recharge son horloge système interne avec la valeur de l’horloge CMOS RTX utilise le même principe avec un taux de rafraîchissement plus lent Avantage : optimisation de la bande passante du bus de transfert 28 Horloge et Timers 3/7 Horloge RTX Basée sur la couche HAL temps réel Les horloges RTX sont des compteurs logiciels d’une période donnée qui mesurent le temps Leurs valeurs sont données en nombre de tics depuis le 1er Janvier 1600 à 12H à partir des APIs suivantes : RtGetClockTime et RtSetClockTime RTGetClockResolution RtGetClockTimerPeriod Les horloges disponibles sont : CLOCK_1 CLOCK_2 (alias CLOCK_SYSTEM) d’une résolution de 1 ms (alias CLOCK_FASTEST) d’une résolution de 1 µs Synchronisée avec les timers RTX Indépendantes de l’horloge interne système de NT/2000/XP et de l’horloge CMOS A ne pas utiliser dans les applications d’horodatage à moins de tenir compte de la dérive Horloges et Timers 4/7 Timers RTX Basés sur les horloges logicielles RTX (CLOCK_1 / CLOCK_2 ) et non sur le timer hard du PC La période du timer s’initialise dans la base de registre ou via le panneau de configuration de RTX HKLM\System\CurrentControlSet\Control\RTX\haltimerperiod Période spécifiée / valeurs réelles 100 µs 200 µs 500 µs 1000 µs 99,733346 µs 200,304787 µs 499,504825 µs 1003,200127 µs Permet de spécifier la routine de gestion ainsi que les arguments La routine d’expiration s’exécute comme un thread séparé Attention : les timers RTX ne sont pas des objetsde synchronisation comme des « waitable timers » de NT, car les APIs RtCreateTimer, RtDeleteTimer, RtSetTimer et RtSetTimerRelative sont non bloquantes 29 Horloges et Timers 5/7 Gestion périodique des timers Hypothèse : Le timer RTX choisi est de 100 µs La routine du timer doit s’exécuter toutes les 300 µs Le temps d’exécution de cette routine n’est pas fixe c’à d 100 µs en général avec des pointes à 350 µs L’événement signalé par le timer est-il mémorisé pendant l’exécution de la routine du timer ? Réponse : Si la routine s’exécute plus longuement que la période du timer, l’événement reste signalé et le thread est immédiatement réexécuté dès qu’il se termine Car la queue d’expiration du timer a une profondeur de 1 : Si le temps d’exécution prend entre 0 et 600 µs, aucune expiration du timer n’est perdue Si le temps d’exécution prend entre 600 et 900 µs, une expiration du timer est perdue Si le temps d’exécution prend entre 900 et 1200 µs, 2 expirations du timer sont perdues Horloges et Timers 6/7 Les timers de mise en veille des threads Mise en veille par incrément de 100 ns Période du timer RTX choisi dans RTX settings < période spécifiée < 1s Le RtSleepFt est alors un timer RTX encapsulé APIs disponibles : RtSleepFt : suspend le thread pendant la période spécifiée Mise en veille en millisecondes Identique à Win32 APIs disponibles : Sleep : suspend le thread pendant la période spécifiée en ms. 30 Horloges et Timers 7/7 APIs RTX Horloges et Timers Real-Time APIs RtCreateTimer RtSetTimer RtSetTimerRelative RtGetTimer RtCancelTimer RtDeleteTimer Horloges et Timers API Win32 supportée Sleep RtGetClockResolution RtGetClockTime RtGetClockTimerPeriod RtSetClockTime RtSleepFt Formation RTX – Module 7 0/11 Processus et threads 31 Processus et threads 1/11 Rappel sur les threads et les processus NT/2000 •Processus = programme qui contient ¾Du code et des données ¾Des ressources système ¾Des variables d’environnement Chargé en mémoire Prêt à être exécuté avec son propre espace d’adressage privé •Chaque process est associé à une machine virtuelle Win32 •Chaque processus est démarré avec un seul thread : le thread primaire •Thread = partie du processus auquel l’OS alloue le CPU pendant un temps donné Son contexte d’exécution contient : ¾Les registres processeurs ¾La pile du noyau (Kernel level) et utilisateur (user level) •Tous les threads partagent le même espace d’adressage virtuel et peuvent accéder aux variables globales du processus Processus et threads 2/11 Les processus NT/2000 s’exécutent dans une machine virtuelle (VM) Win32 •Une machine virtuelle –VM- (ou environnement d’exécution) est définie par : •Un mapping privé de mémoire virtuelle pour l’application •Un contexte d’exécution défini par l’état des registres processeurs et des protections d’accès Sur les APIs Sur les Entrées/Sorties Sur la table des ITs 32 Processus et threads 3/11 Où s’exécutent les processus RTX • Les processus RTX sont lancés comme des drivers avec un thread primaire dans un pôle mémoire non paginé (physique) en mode kernel • En standard, 10 processus RTX peuvent être lancés simultanément Ce qui correspond au nombre d’entrées dans le registry HKLM\System\CurrentControlSet\Services • Le nombre maximum de processus RTX est de 999 • Pour rajouter des processus RTX, il est nécessaire de constituer un fichier .reg exécutable : [HKLM\System\CurrentControlSet\Services\Rtss_011] @=« » « Type »=dword:00000001 « Start »=dword:00000003 « Group »=« Base » « Errorcontrol »=dword:00000000 « Displayname »=« RTSS processus slot 11 » « Dependonservice »=REG_MULTI_SZ « Rtx_rtss » \ « rtxserver » « Imagepath »=REG_EXPAND_SZ « Cmdline »=« » Processus et threads 4/11 Les processus et threads sous RTX • Le démarrage d’un processus Win32 RTX ou RTX s’effectue à partir d’un autre processus Win32 ou Win32 RTX par CreateProcess Soit dans l’environnement Win32 (fichier .Exe) rattaché à rtapi_w32.Dll Soit dans l’environnement RTSS (fichier .Rtss) ¾ A partir d’un prompt : rtssrun First.Rtss ¾ Au boot : rtssrun /b First.Rtss Remarque : à la différence de Win32, RTSS supporte le lancement de processus contenant des espaces ¾ Exemple : « \ » First program .Rtss « \ » argument1 …. » • Le démarrage d’un thread Win32 RTX ou RTX s’effectue nombre maximum de processus RTX est de 999 • L’arrêt d’un processus s’effectue : Soit dans l’environnement Win32 RTX par ExitProcess Soit dans l’environnement RTX par rtsskill N° du processus Si le dernier thread du processus se termine 33 Processus et threads 5/11 Ecran bleu NT/2000 et boot de processus RTX • Comment désinstaller un processus RTX lancé au boot par rtsrun /b program.Rtss et qui provoque l’apparition de l’écran bleu sans réinstaller NT/2000 • Solutions : Avec un système de fichiers FAT, bootez avec une disquette DOS et supprimez le fichier \winnt\rtss\001 Avec un système de fichiers NTFS, fabriquez une disquette contenant le fichier multiboot boot.ini pour booter dans le répertoire d’une seconde installation de Windows NT/2000 Processus et threads 6/11 L’ordonnancement (scheduling) des threads NT/2000 et RTX • NT/2000 comme RTX est un système préemptif • NT/2000 contient un ordonnanceur appelé toutes les 20 ms qui recalcule les priorités des threads Win32 RTX et leur alloue des tranches de temps • L’ordonnanceur (scheduler) de RTX ne met pas en œuvre de time slicing Un thread RTX s’exécute jusqu’à ce qu’il laisse le CPU ¾ Par une mise en attente sur un objet de synchronisation ¾ En se suspendant lui-même ¾ En baissant sa priorité en levant celle d’un autre ¾ Provoquant un réordonnancement avec Sleep(0) ¾ En retour d’un gestionnaire d’interruption ou de timer I/O ou idle Thread 1 Thread 2 Exécution Involontaire Processeur Volontaire Done Temps 34 Processus et threads 7/11 Quelques chiffres … • Temps de commutation de contexte sur un Pentium 200 MHz Entre 2 processus RTX = 2 µs Entre 2 threads RTX = 2 µs Entre un processus Win32 ou Win32 RTX et un processus RTX = 10 µs Processus et threads 8/11 Le spectre de priorité de NT/2000 et de RTX • Spectre de priorité de NT/2000/XP Real-time Classes Real-time time-critical Real-time normal Systems level like input Cursor, cache, flushing File sys, drivers 31 26 25 24 23 22 Dynamic classes Real-time idle • • 16 15 13 9 7 4 1 0 Non real-time critical High-Foreground Normal Normal Background Low foreground/background Non real-time / idle Idle thread RTX n’a qu’une seule classe de priorité composé de 128 niveaux (0 à 127) Les threads RTX de même niveau s’exécutent en FIFO Les threads Win32 RTX démarrent tous leur exécution au niveau REALTIME La classe de priorité REALTIME est mappée dans les 128 niveaux pour pouvoir utiliser l’API RtSetThreadPriority 35 Processus et threads 9/11 Mapping des priorités RTX sur Win32 RTX RTSS Symbolic Priority Name RTSS Value Windows NT/2000 Symbolic Prority Name for RealTime Priority Class Win32 Value RT_PRIORITY_MIN 0 THREAD_PRIORITY_IDLE 16 RT_PRIORITY_MIN + 1 1 THREAD_PRIORITY_LOWEST 22 RT_PRIORITY_MIN + 2 2 THREAD_PRIORITY_BELOW_NORMAL 23 RT_PRIORITY_MIN + 3 3 THREAD_PRIORITY_NORMAL 24 RT_PRIORITY_MIN + 4 4 THREAD_PRIORITY_ABOVE_NORMAL 25 RT_PRIORITY_MIN + 5 5…126 THREAD_PRIORITY_HIGHEST 26 RT_PRIORITY_MAX 127 THREAD_PRIORITY_TIME_CRITICAL 31 Processus et threads 9/11 Mapping des priorités Win32 RTX sur RTX Windows NT/2000 Symbolic Priority Name for RealTime Priority Class Win32 Value RTSS Symbolic Prority Name RTX Value THREAD_PRIORITY_IDLE 16 RT_PRIORITY_MIN 0 THREAD_PRIORITY_LOWEST 22 RT_PRIORITY_MIN + 1 1 THREAD_PRIORITY_BELOW_NORMAL 23 RT_PRIORITY_MIN + 2 2 THREAD_PRIORITY_NORMAL 24 RT_PRIORITY_MIN + 3 3 THREAD_PRIORITY_ABOVE_NORMAL 25 RT_PRIORITY_MIN + 4 4 THREAD_PRIORITY_HIGHEST 26 RT_PRIORITY_MIN + 5 5 THREAD_PRIORITY_TIME_CRITICAL 31 RT_PRIORITY_MAX 127 36 Processus et threads 11/11 APIs RTX Processus et threads Real-Time APIs RtGetPriority RtSetThreadPriority RtSleepFt Processus et threads API Win32 supportée CreateThread ExitProcess ExitThread GetCurrentProcessId GetCurrentThread GetCurrentThreadId GetExitCodeThread GetThreadPriority ResumeThread SetThreadPriority Sleep SuspendThread TerminateThread TIsAlloc TIsFree TIsGetValue TIsSetValue Formation RTX – Module 8 0/10 Exceptions 37 Exceptions 1/10 Sommaire STRUCTURED EXCEPTION HANDLING GESTION DES EXCEPTIONS PAR NT/2000/XP MECANISME D’UNE EXCEPTION LISTE DES EXCEPTIONS DECRYPTER LE BLUE SCREEN NT/2000/XP DECRYPTER LE GREEN SCREEN RTX EXCEPTIONS : APIs Exceptions 2/10 Gestion des exceptions (Structured Exception Handling) RTX supporte l’interception des exceptions pour Le C++ Microsoft (try / catch / throw ) Le WIN32 SDK définie dans MSDEV ( try / except / finally ) avec les APIs suivantes : AbNormalTermination GetExceptionCode GetExceptionInformation RaiseException SetUnhandledExceptionFilter UnhandledExceptionFilter Le C ANSI (setjmp / longjmp ) RTX ne supporte pas Les « nested » exceptions ou « double fault » qui provoquent un arrêt du système (green screen) Les « colided unwind » ou une exception pendant une restauration de contexte (longjmp) 38 Exceptions 3/10 La gestion des exceptions systèmes par NT/2000/XP et RTX Le gestionnaire d’exceptions de RTX : Soit gèle ou tue le processus (paramètrage dans le panneau de configuration de RTX) Le paramètre HKLM\System\CurrentControlSet\Control\RTX\ExceptionDisposition Permet de choisir entre un stop [1] et un kill [0] Soit modifie l’environnement du processus et continue son exécution Soit alerte l’utilisateur et créée une entrée dans le journal des événements Soit exécute le green screen Toute exception apparaissant ¾Dans une ISR, provoque un green screen ¾Dans un gestionnaire d’exception (double fault) provoque un green screen Les messages d’arrêt du système causés par : Des processus RTX apparaissent par un écran vert Des processus Win32 RTX apparaissent par un écran bleu Exceptions 4/10 Mécanisme d’une exception Recherche dans l’IDT du handler d’exception 0xD x86 EFLAGS Exception 0xD CS EIP _KtTrap0D NTOS kernel.exe Flags, CS, EIP, Sauvegardés dans la pile 39 Exceptions 5/10 Liste des exceptions de RTX (1) A chaque exception est associée un code d’erreur ou vecteur RTX La liste des messages d’arrêt de NT/2000/XP est fournie dans les ressources kits Exception Code Erreur Comportement RTX EXCEPTION_NPX_NOT_AVAILABLE 0x07 Continue l’exécution du processus avec un contexte flottant EXCEPTION_DIVIDED_BY_ZERO 0x00 EXCEPTION_INVALID_OPCODE 0x06 EXCEPTION_STACK_FAULT 0x0C EXCEPTION_GP_FAULT 0x0D EXCEPTION_PAGE_FAULT 0x0E EXCEPTION_DEBUG 0x01 EXCEPTION_BOUND_CHECK 0x05 EXCEPTION_NPX_OVERRUN 0x09 EXCEPTION_SEGMENT_NOT_PRESENT 0x0B EXCEPTION_NPX_ERROR 0x10 Envoi un message à l’utilisateur et créée une entrée dans le journal des évènements et tue le processus Exceptions 6/10 Liste des exceptions de RTX (2) Exception Code Erreur EXCEPTION_ALIGNEMENT_CHECK 0x11 EXCEPTION_INT3 0x03 EXCEPTION_NMI 0x02 EXCEPTION_DOUBLE_FAULT 0x08 EXCEPTION_RESERVED_TRAP 0x0F EXCEPTION_PAGE_FAULT 0x0E EXCEPTION_INVALID_TSS 0x0A Comportement RTX Appel du debogueur par RTX Apparition du green screen 40 Exceptions 7/10 Décrypter le Blue Screen de Windows NT/2000/XP Constitué de 4 sections dont les 2 premières (code, texte et paramètres d’erreurs) sont les plus importantes pour le diagnostic Section 1 : Stop Message ***STOP:#E (#1, #2, #3, #4) Text #E = Code d’erreur #1 - #4 Paramètres du code d’erreur Text = Message d’erreur Section 2 : Driver list Affichage de tous les drivers chargés dans le calculateur au moment de l’exception avec leur adresses de base et les dates du fichier du driver Cette section permet grâce aux adresses de l’instruction qui a causé l’erreur de trouver le driver fautif dans la liste des adresses de base Section 3 : System Stack Dump Liste des appels dans la pile qui ont précédé l’exception Section 4 : Communication Confirme la communication avec le debogueur kernel pour éviter que l’exception ne bloque la machine si l’option a été validée dans le panneau de configuration Exceptions 8/10 Décrypter le Green Screen de RTX Constitué de 4 sections dont les 2 premières sont spécifiques à RTX et les 2 dernières identiques à NT/2000/XP Section 1 : Stop Message ***RTX/RTSS STOP:#E (#1, #2, #3, #4) #E = Code d’erreur et texte associé (voir doc. RTX) #1 = Code de l’exception (voir liste des exceptions RTX) #2 = Valeur du registre IP #3 = ID du thread RTSS #4 = ID du processus RTSS Section 2 : Stop Message du HAL ***STOP:#E (#1, #2, #3, #4) *** Address XXXXXXX has base YYYYYYYY – kernel image #E = 0 exception causée par un processus RTX sinon erreur interne de RTX #1 Vecteur d’exception hardware #2 = Valeur du registre IP #3 = Valeur du pointeur de pile #4 = Adresse de base du stack frame de l’exception Adress : adresse de base permettant de déterminer où l’exception s’est produite 41 Exceptions 10/10 APIs RTX Exceptions Real-Time APIs RtAttachShutdownHandler RtReleaseShutdownHandler Ces APIs permettent d’installer ou de désinstaller un gestionnaire d’interception d’un arrêt système pour initier un mode dégradé du processus Le gestionnaire est lancé sous forme de thread avec une priorité RTX Son prototypage permet de récupérer la cause de l’arrêt du système RT_SHUTDOWN_NT_SYSTEM_SHUTDOWN (arrêt normal de NT/2000/XP) RT_SHUTDOWN_NT_STOP (blue screen) Formation RTX – Module 0/6 Gestion Mémoire 42 Gestion mémoire 1/6 Mémoire des processus WIN32 RTX sous NT/W2000 •Les 2 Go SYSTEM sont : •Accessibles uniquement en mode privilégié. •Identiques pour tous les processus •La partie non paginée correspond aux DLLs systèmes •L’espace d’adressage physique permet le partage de mémoire entre processus •Les 2 Go PROCESS sont : •Accessibles en mode privilégié et utilisateur •Uniques pour chaque processus •Paginés pour assurer la virtualité d’adressage du processus Gestion mémoire 2/6 Optimisation mémoire des processus •L’espace d’adressage des processus Win32 RTX étant paginé, RTX propose de verrouiller la mémoire pour supprimer les défauts de pages de l’unité de pagination du CPU •RTX permet de verrouiller en mémoire physique : •Le TAS via les fonctions RtCommitLockProcessHeap et RtCommitLockHeap •La PILE via la fonction RtCommiLockStack •Toutes les sections pagineables du processus via la fonction RtLockProcess •Les sections des librairies kernel et du Win32 Subsystem via la fonction RtLockKernel •Se rappeler : la mémoire des processus RTX est automatiquement verrouillée par RTSS dans des pages physiques 43 Gestion mémoire 3/6 Espace mémoire KERNEL de RTX sous NT •RTSS (environ 100 Ko) s’intalle dans le pôle de mémoire non paginée de l’hyperespace C.AD., l’espace du kernel de NT •Les allocations dynamiques des processus Win32 RTX (RtAllocateLockedMemory) et RTX s’effectue dans la zone mémoire physique disponible de NT •Attention : le verrouillage des processus Win32 RTX et RTX et du kernel réduit le pôle de mémoire physique disponible au détriment des performances des applications non temps réelles Gestion mémoire 5/6 Allocation déterministe de mémoire sous NT •Si un processus RTX a besoin de grandes quantités de mémoire physiques (30% à 50% de la RAM), insérez dans le fichier de démarrage boot.ini, la variable MAXMEM qui limite la RAM vue par NT •Exemple : [Operating systems] Multi(0)disk(0)rdisk(0)partition(1)\WINNT= « Windows NT Workstation Version 4.00 » /MAXMEM=12 •La valeur d’initialisation de MAXMEM en Mo et ne doit pas être inférieure à 8 Mo (espace indispensable pour installer NT) •La mémoire haute physique non visible pour NT sera mappée dans l’espace d’adressage du processus RTX sous la forme d’un buffer par RtMapMemory 44 Gestion mémoire 5/6 Consommation de l’espace mémoire Hyperspace Gestion mémoire 6/6 Les APIs RTX : Memory Real-Time APIs RtAllocateContiguousMemory RtAllocateLockedMemory RtCommitLockHeap RtCommitLockProcessHeap RtCommitLockStack RtCreateSharedMemory RtFreeContiguousMemory RtFreeLockedMemory RtGetPhysicalAdress Memory Win32 supported APIs GetProcessHeap HeapAlloc HeapCreate HeapDestroy HeapFree HeapReAlloc HeapSize RtLockKernel RtLockProcess RtMapMemory RtUnlockKernel RtUnlockProcess RtUnmapMemory 45 Formation RTX – Module 0/11 Communications Interprocess (IPC) Communications Interprocess (IPC) 1/11 Les différents IPCs •Mémoire partagée •Région de mémoire physique non paginée mappée dans les adresses virtuelles des processus •Sémaphore •Utilisation à plusieurs d’une ressource partagée •Pas de propriétaire •Pas d’exclusivité (compteur) •Mutex •Utilisation exclusive d’une ressource partagée •Notion de propriétaire •Inversions de priorité •Evénement •Un ou plusieurs threads en attente sont débloqués par un signal •Remarque : •Tous ces objets sont partageables entre des processus RTX et Win32RTX par leurs noms •La création des objets (create/open) par RTSS à moins de 50 µs sans être déterministe •La manipulation des objets (wait/release) est déterministe avec 2 µs 46 Communications Interprocess (IPC) 2/11 APIs RTX IPC Real-Time APIs RtCreateMutex RtOpenMutex RtCreateSharedMemory RtOpenSharedMemory RtCreateSemaphore RtOpenSemaphore RtReleaseSemaphore RtCreateEvent RtOpenEvent RtPulseEvent RtSetEvent RtResetEvent Communications Interprocess (IPC) 3/11 Utilisation des APIs de mémoire partagé Process 1 Memoire Process 2 •L’objet doit être créé avec RtCreateSharedMemory par un processus •Les autres processus doivent se lier à l’objet créé en utilisant RtOpenSharedMemory grâce au nom donné par le créateur •Les 2 APIs RtCreateSharedMemory et RtOpenSharedMemory renvoient un pointeur sur le début du bloc partagé. 47 Communications Interprocess (IPC) 4/11 Comparaison des APIs de mémoire partagée entre NT/2000 et RTX NT/2000 (Win32) RTX (RTSS) CreateFileMapping RtCreateSharedMemory OpenFileMapping RtOpenSharedMemory MapViewOfFile UnmapViewOfFile Communications Interprocess (IPC) 5/11 Comparaison des APIs sémaphores entre NT/2000 et RTX NT/2000 (Win32) RTX (RTSS) CreateSemaphore RtCreateSemaphore OpenSemaphore RtOpenSemaphore ReleaseSemaphore RtReleaseSemaphore WaitForSingleObject RtWaitForSingleObject WaitForMultipleObjects 48 Communications Interprocess (IPC) 6/11 Exemple d’utilisation du Sémaphore Void CodeInProcess_1 (void) { HANDLE hSema; hSema = RtCreateSemaphore (NULL, 0, MAX_COUNT, « MonSemaphore »); RtReleaseSemaphore( hSema, MAX_COUNT, NULL ); WaitForShutdownMessage (); RtCloseHandle( hSema); } Void CodeOtherProcess (void) { HANDLE hSema; hSema = RtOpenSemaphore (NULL, FALSE, « MonSemaphore »); RtWaitForSingleObject( hSema, INFINITE ); ProcessData (); RtReleaseSemaphore( hSema); RtCloseHandle( hSema); } Communications Interprocess (IPC) 7/11 Comparaison des APIs mutex entre NT/2000 et RTX NT/2000 (Win32) RTX (RTSS) CreateMutex RtCreateMutex OpenMutex RtOpenMutex ReleaseMutex RtReleaseMutex WaitForSingleObject RtWaitForSingleObject 49 Communications Interprocess (IPC) 8/11 Exemple d’utilisation du Mutex Void CodeInEAchProcess (void) { HANDLE hMutex; extern long *SharedCounter; hMutex = RtCreateMutex (NULL, FALSE, « Mutex_1 »); While ( !DoneProcessing() ) { RtWaitForSingleObject( hMutex, INFINITE ); ProcessStuff (); *SharedCount++; RtReleaseMutex( hMutex ); } } Communications Interprocess (IPC) 9/11 Inversion de priorité et mutex •Le phénomène d’inversion de priorité intervient lorsqu’un processus de faible priorité bloque un processus de priorité plus importante •Le thread bloquant hérite temporairement de la priorité du thread qu’il bloque •Après avoir rendu le « mutex », il retrouve sa priorité initiale 50 Communications Interprocess (IPC) 10/11 Les subtilités des événements •2 types de signaux •Evénement à reset manuel : le thread débloqué par RtWaitFor… doit exécuter la fonction RtResetEvent pour remettre l’événement dans l’état non signalé •Evénement à reset automatique : la fonction RtWaitFor… du thread fait office de RtSetEvent •RtCreateEvent permet de créer un événement dans un état initial autre que non signalé •Un thread peut se lier à un événement actif soit par RtSetEvent ou soit par RtPulseEvent Communications Interprocess (IPC) 11/11 Utilisation des événements RtWaitFor… RtSetEvent RtResetEvent SIGNALE NON SIGNALE NON SIGNALE MANUEL RtWaitFor… RtSetEvent SIGNALE NON SIGNALE NON SIGNALE RtPulseEvent AUTO SIGNALE NON SIGNALE => Déblocage de tous les threads en attente NON SIGNALE MANUEL RtPulseEvent NON SIGNALE => Déblocage du premier thread en attente NON SIGNALE AUTO 51 Formation RTX – Module 0/2 DLL RTX DLL RTX 1/3 Rappel : DLL NT/2000 Source utilisateur de la DLL Prog.c Source de la DLL MaDll.c Compilation Compilation MaDll.def MaDll.lib Prog.Obj MaDll.Obj Edition des liens Edition des liens Exécution Prog.Exe Windows MaDll.dll 52 DLL RTX 2/3 Définition d’une DLL RTX •Une DLL RTX est un processus RTX suspendu qui exporte des fonctions utilisables par d’autres processus RTX •Le processus DLL doit donc toujours être lancé avant celui qui l’utilise •Il n’y a pas de commutation de contexte entre les 2 processus car ils partagent un espace d’adressage commun •Remarque : un processus utilisateur RTX ne peut jamais appeler directement une DLL Win32 (les espaces d’adressage entre Win32 et RTX sont séparés à travers le module SRI) •Et ce à moins de fournir son propre Proxy/Stub Win32 •Notes sur les drivers RTX •Les drivers RTX sont des DLLS RTX dont les interfaces exportées sont normalisées : •RtdDeviceOpen et RtdDeviceClose •RtdDeviceTransfer •RtdDriverRegister et RtdDriverUnregister •RTX permet en plus d’intégrer des RTAPIS (appelées RTKAPI) dans les drivers kernel de Windows. DLL RTX 3/3 Création et utilisation d’une DLL RTX •Définition du processus DLL (fichier.c) VOID main() { suspendthread(getcurrentthread()); } VOID RTAPI Bonjour (VOID) { rtprintf(« Bonjour\n »); Définition du fichier de définition (fichier .def) LIBRARY DLL.RTSS DESCRIPTION ‘DLL RTSS’ EXPORTS Bonjour •Définition du makefile (fichier .Mak) NODEBUG=1 !Include <rtx.Mak> All : dll.Rtss dlluse.Rtss Dll.Rtss: dll.Obj Lib –nodefaultlib –out:dll.Lib –def:dll.Def dll.Obj Link $(rtsslflags) –out:dll.Rtss dll.Exp dll.Obj $(rtsslibs) Del dll.Exp Dlluse.Rtss: dll.Lib dlluse.Obj Link $(rtsslflags) –out:$*.Rtss $*.Obj dll.Lib $(rtsslibs) Clean: -Del *.Rtss –del *.Obj –del *.Exe –del dll.Lib •Lancement des processus (DLL en premier) •Rtssrun dll.Rtss + rtssrun dlluse.Rtss 53 Formation RTX – Module 0/2 DEBUG Debug RTX 1/2 Outils de debug RTSS Les applications RTSS ne peuvent pas être débuggées sous Visual Studio. On peut utiliser deux outils : • Softice (1 machine) • Symboles au format Numega • Ports, mémoire, process, threads … • Windbg (2 machines) • Symboles compatible Visual Studio (.PDB) • Lecture code source • Trace de la pile • Mémoire 54 Debug RTX 2/2 Softice • « Enable Kernel Debugger » dans les propriétés RTX, et reboot • Compilation en mode debug • « _asm int 3 » pour mettre un point d’arret WinDbg • • • • • « _asm int 3 » pour mettre un point d’arret « Enable Kernel Debugger » dans les propriétés RTX, et reboot Connection par Null Modem Target : /DEBUGPORT=<com port> [ /BAUDRATE=<baud rate> ] Host : copie du .rtss dans %SystemRoot%\symbols, rtx_halext.dbg in SystemRoot%\symbols\, rtx_rtss.dbg in %SystemRoot%\symbols\, hal.dbg in %SystemRoot%\symbols\ 55
Documents pareils
Training Windows XP temps réel avec RTX - ac6
Zone d'allocation des tâches (TLS)
Mécanismes d'ordonnancement
Algorithmes de répartition multi processeur SMP
APIs d'affinité Multiprocesseur
Spectre des priorités WIN32 et KERNEL
Ordonnancement d...
Présentation du noyau de Windows NT
droit d’effectuer. La plupart des systèmes comme NT ou Linux utilisent seulement deux niveaux (IBM
OS/2 en utilise 3). On a alors :
— Le Ring 0, aussi appelé mode noyau (kernel) ou superviseur (sup...