Présentation

Commentaires

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

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...

Plus en détail

Présentation du noyau de Windows NT

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...

Plus en détail