Mtr86W32

Embed Size (px)

DESCRIPTION

real time os for x86 processor

Citation preview

  • MTR86 Win32 V2.1

    Manuel de rfrence rvision 2.1a Site de mise jour http://mtr86x.free.fr

    Support : [email protected]

  • Mtr86 Win32 rvision 2.1 Page -II-

    Table des matires

    TABLE DES MATIERES 1. INTRODUCTION..............................................................................................1

    1.1. Prsentation de Mtr86 Win32 ........................................................................... 1 1.2. Installation de Mtr86 Win32 .............................................................................. 1

    Installation sur poste individuel partir des disquettes (ou CD) dinstallation............... 1 Installation partir dun rseau .................................................................................... 1

    1.3. Accs et installation des ports E/S sous Windows NT et 2000 ........................ 3 Etat dun pilote de port E/S pour NT .............................................................. 3 Etat dun pilote de port E/S pour 2000 ........................................................... 3 Installation dun pilote pour port E/S .............................................................. 3

    1.4. Taille des piles des tches................................................................................ 4 1.5. Utilisation des bibliothques standard C et C++............................................... 4 1.6. Utilisation de la bibliothque E/S console conio ............................................... 4 1.7. Gestion des priorits avec Mtr86 ...................................................................... 4 1.8. Rsolution de l'horloge ..................................................................................... 6 1.8. Rsolution de l'horloge ..................................................................................... 7 2. DIAGRAMME D'ETAT DE MTR86................................................................... 7

    3. COMPILATION DES PROGRAMMES .............................................................8 IMPORTANT ................................................................................................................... 8 Configuration des compilateurs ....................................................................................... 9 VisualC++ V4X..V6X ...................................................................................................... 9 C++ Builder ................................................................................................................... 10

    4. LISTES DES REQUETES PAR CATEGORIE................................................11 5. PRIMITIVES DE MTR86 ................................................................................13

    5.1. Formalisme utilis .......................................................................................... 13 Nom de la requte ....................................................................................... 13

    5.2. Requtes du noyau ....................................................................................... 13 start, startEx................................................................................................. 13 mtr86exit ...................................................................................................... 14 cree .............................................................................................................. 14 active............................................................................................................ 14 tache_priorite ............................................................................................... 15 classe_priorite.............................................................................................. 15 priorite_processus........................................................................................ 15 d_tic ............................................................................................................. 15 cvrtic............................................................................................................. 15 dort............................................................................................................... 16 suspend ....................................................................................................... 16 reveille.......................................................................................................... 16 detruit ........................................................................................................... 17 supprime ...................................................................................................... 17 tache_c ........................................................................................................ 17 tache_id ....................................................................................................... 17 thread_id ...................................................................................................... 17 num_tache ................................................................................................... 17 m_wait, MONITOR....................................................................................... 18 m_signal, ENDM.......................................................................................... 18 verrouille ...................................................................................................... 18

  • Mtr86 Win32 rvision 2.1 Page -III-

    Table des matires

    deverrouille .................................................................................................. 18 m_send ........................................................................................................ 19

    5.3. Gestionnaire de tches rythmes................................................................... 19 t_cree ........................................................................................................... 19 t_start ........................................................................................................... 20 t_stop ........................................................................................................... 20

    5.4. Gestion des vnements................................................................................ 20 e_cree .......................................................................................................... 20 e_close......................................................................................................... 20 e_wait........................................................................................................... 21 e_signal........................................................................................................ 21

    5.5. Gestionnaire de rendez-vous ......................................................................... 22 rv_cree ......................................................................................................... 22 rv_close........................................................................................................ 22 rv_signal....................................................................................................... 23 rv_init ........................................................................................................... 23

    5.6. Gestionnaire de tubes .................................................................................... 23 p_open......................................................................................................... 23 p_close......................................................................................................... 24 p_write ......................................................................................................... 24 p_read.......................................................................................................... 24 p_plein ......................................................................................................... 25 p_vide .......................................................................................................... 25 p_openEx..................................................................................................... 25 p_closeEx .................................................................................................... 25 p_writeEx ..................................................................................................... 26 p_readEx...................................................................................................... 26 p_pleinEx ..................................................................................................... 26 p_videEx ...................................................................................................... 26

    5.7. Gestionnaire de ressources ........................................................................... 27 r_cree........................................................................................................... 27 r_close ......................................................................................................... 27 r_wait ........................................................................................................... 27 r_signal ........................................................................................................ 27

    5.8. Gestionnaire de smaphores ......................................................................... 28 s_cree, s_creeEx, s_openEx ....................................................................... 28 s_close......................................................................................................... 28 s_wait........................................................................................................... 28 s_signal........................................................................................................ 29

    5.9. Requtes diverses.......................................................................................... 29 fct_disable.................................................................................................... 29 fct_enable .................................................................................................... 29

    5.10. Accs aux ports E/S sous Windows NT....................................................... 30 OpenPort...................................................................................................... 30 InPortb, InPortw, InPortdw ........................................................................... 30 OutPortb, OutPortw, OutPortdw................................................................... 30 ClosePort ..................................................................................................... 30

    6. EXEMPLES FOURNIS................................................................................... 31

    6. MTR86 OBJET ................................................................................................32 6.1. Prsentation de Mtr86 Win32 noyau objet...................................................... 32

  • Mtr86 Win32 rvision 2.1 Page -IV-

    Table des matires

    6.2. Installation et configuration de Mtr86 Win32 Objet ......................................... 32 6.3. Constitution de Mtr86 Win32 Objet................................................................. 32 6.4. Description des classes .................................................................................. 33

    Constantes................................................................................................... 33 6.5. Constructeurs de copie et constructeurs par dfaut ....................................... 33

    Classe Tache ............................................................................................... 34 Classe TacheRythmee................................................................................. 36 Classe Monitor ............................................................................................. 37 Classe Mutex ............................................................................................... 37 Classe Semaphore ...................................................................................... 37 Classe RendezVous..................................................................................... 38 Classe Evenement ....................................................................................... 39 Classe Pipe .................................................................................................. 39 Classe PipeEx.............................................................................................. 40 Classe Port (N, 2000, XP)............................................................................ 40

    6.4. Ecriture des applications................................................................................. 40 Compilation................................................................................................................ 40 Comment crire une application ?.............................................................................. 41

    6.4. Taille des objets.............................................................................................. 45 6.5. Diagrammes de classes des exemples .......................................................... 45

  • Mtr86 Win32 rvision 2.1 Page -1-

    Introduction

    1. INTRODUCTION 1.1. Prsentation de Mtr86 Win32 Mtr86Win32 est compos de DLL Mtr86WX.dll et de librairies dimportation Mtr86WX.lib avec X = M (Visual C++) et B (Borland). Pour les cibles utilisant Windows NT, il est galement ncessaire d'installer des pilotes en mode noyau. Mtr86Win32 permet dcrire des programmes multitches temps rels aussi bien en mode console quen mode graphique de faon indpendante du compilateur utilis pour le dveloppement. Larchitecture dun programme en mode console utilisant Mtr86Win32 est la mme que celle de Mtr86 pour MsDos. Par rapport cette dernire version, Mtr86Win32 prsente lavantage de grer de faon transparente les problmes de rentrances des Bibliothques C et C++, facilitant ainsi llaboration de code fiable.

    1.2. Installation de Mtr86 Win32 Pour Windows NT/2000 se loger en superviseur. Par la suite les applications peuvent fonctionner en mode utilisateur. Installation sur poste individuel partir des disquettes (ou CD) dinstallation Insrer la disquette ou le CD dans le lecteur et lancer install. Pour la version licence site, fournir la cl daccs. Attention : la simple copie des rpertoires ne permet pas de faire fonctionner une application Mtr86Win32 du fait de linstallation de pilotes en mode noyau. Prciser lors de linstallation loutil de dveloppement (Visual C++ ou Borland C++), le noyau tant diffrent pour chacun de ces compilateurs. Installation partir dun rseau Insrer la disquette ou le CD dans le lecteur et lancer install. Pour la version licence site, fournir la cl daccs. Prciser comme destination un rpertoire dinstallation sur un disque rseau (le chemin dinstallation doit obligatoirement possder une lettre de volume : exemples X:\MTR86W32, H:\UNREP). Attention assurez-vous davoir les droits dcriture dans ce rpertoire. Une fois linstallation effectue, un utilisateur peut relancer le programme dinstallation install situ sur le rseau depuis un poste (il suffit davoir les droits en lecture sur le rpertoire rseau). Linstallation est alors automatique, il suffit de prciser le type de compilateur utiliser. Linstallation rseau conserve les librairies et les exemples sur le rseau, mais Il est possible de copier en local tout le rpertoire dinstallation si on le souhaite. Nota : une fois le logiciel install, en cas de changement de compilateur, il suffit de lier lapplication avec la bonne librairie Mtr86WX.lib (voir les exemples). Aprs avoir install le logiciel, il est indispensable de rinitialiser la machine pour assurer le chargement des pilotes en mode noyau. Rpertoires installs

    Rpertoire des exemples non objets

    Rpertoire des exemples objets

    Noyaux, pilotes E/S, fichiers denttes, librairies non objets

    Noyaux objets, fichiers denttes

    Rpertoire des exemples non objets

    Projets et excutables des diffrents exemples pour BC51

    Projets intgrant lensemble des exemples pour Builder

    Projets individuels des exemples pour Builder

    Ensemble du code source des exemples pour BC51, VC4 et VC6

    Binaire des exemples VC4 et VC6

    Projets intgrant lensemble des exemples pour VC4

    Projets individuels et projet intgrant lensemble des exemples pour VC6

  • Mtr86 Win32 rvision 2.1 Page -2-

    Introduction

    Rpertoires laisss sur le CD

    Rpertoire des exemples objet

    Rpertoire des sources, projets et excutables pour BC5.1

    Projet intgrant lensemble des exemples pour Builder

    Binaire de lensemble des exemples pour Builder

    Projet individuel pour Builder et source de exemple E11 pour VC++ et Builder

    Projet intgrant lensemble des exemples et projets individuels pour VC6

    Binaire de lensemble des exemples pour VC6

    Rpertoire du noyau. Contient le fichier dentte Mtr86w32.H

    DLL (copie dans le rpertoire Windows) et lib pour BC5.1 et Builder

    Pilote en mode noyau Pilote pour les ports E/S pour NT et 2000

    Contient conio.h et la Dll (copie dans le rpertoire Windows) pour VC4 et VC6

    Contient la librairie dimportation et la librairie statique conio pour VC6

    Contient les fichiers dentte et les programmes objet

    Contient la DLL (copie dans le rpertoire Windows) et sa lib pour BC5.1

    Contient la DLL (copie dans le rpertoire Windows) et sa lib pour Builder

    Contient la DLL (copie dans le rpertoire Windows) et sa lib pour VC6 Contient galement la librairie statique Conio pour VC6

    Contient lensemble des DLL (copis dans le rpertoire Windows)

    La racine du rpertoire contient : un support de cours et le corrig des exercices en format pdf. Les fichiers dentte des exemples Un projet VC6 incorporant lensemble des exemples. Chaque sous rpertoire contient : Le code source de lexemple correspondant Un projet individuel pour lexemple Lexcutable de lexemple plac dans un rpertoire bin

  • Mtr86 Win32 rvision 2.1 Page -3-

    Introduction

    1.3. Accs et installation des ports E/S sous Windows NT et 2000 Laccs aux ports E/S ncessite linstallation dun pilote de priphrique. Mtr86 est livr avec cinq pilotes de ports E/S : port1.sys..port5.sys. Etat dun pilote de port E/S pour NT Aprs avoir install un port (voir plus loin) et aprs avoir redmarr assurez-vous quil est dmarr. Pour ce faire, aller dans le panneau de configuration pilote de priphrique et rechercher le pilote portX.sys. Ce pilote doit tre marqu Dmarr. Si ce nest pas le cas ou si le pilote nest pas list, cest quil na pas t trouv (il a t probablement effac du rpertoire WinNt\System32\Drivers). Etat dun pilote de port E/S pour 2000 Aprs avoir install un port (voir plus loin) et aprs avoir redmarr (deux fois) assurez-vous quil est dmarr. Pour ce faire, aller dans le panneau de configuration System/ Gestonnaire de priphrique. Dans affichage valider afficher les priphriques cachs et rechercher le pilote portX. Ce pilote doit tre marqu Dmarr. Si ce nest pas le cas ou si le pilote nest pas list, cest quil na pas t trouv (il a t probablement effac du rpertoire WinNt\System32\Drivers).

    Installation dun pilote pour port E/S Pour installer un pilote, se loger en superviseur. Copier le pilote portx.sys prsent dans le rpertoire dinstallation de Mtr86W32, Noyau\PortDrivers dans le rpertoire WinNt\System32\Drivers (inutile pour le premier port install), par dfaut le programme dinstallation a dj copi le fichier port1.sys dans WinNt\System32\Drivers. Si la copie choue, cest que le pilote est en cours dutilisation. Arrter le pilote laide du panneau de configuration priphriques ou laide de la commande : net stop portx.sys exemple : net stop port1.sys Une fois le pilote copi, diter un fichier portx.ini situ dans le mme rpertoire dinstallation : \Registry\Machine\System\CurrentControlSet\Services\Port1 Type = REG_DWORD 0x00000001 Start = REG_DWORD 0x00000002 Group = Extended Base ErrorControl = REG_DWORD 0x00000001 Parameters IoPortAddress = REG_DWORD 0x00000300 // ajuster ladresse dsire IoPortCount = REG_DWORD 0x0000000030 // la plage dsire

    1. Modifier la ligne 1 pour que le nom du port soit conforme au nom du fichier portx.sys copi dans WinNt\System32\Drivers,

    2. Modifier IoPortAddress et IoPortCount en fonction de vos besoins puis enregistrer le fichier sous le nom de portX.ini avec X = 1 | 2 ... | 5.

    3. Inscrire le pilote dans la base de registre. Pour ce faire ouvrir une fentre console, changer de rpertoire pour se placer dans le rpertoire dinstallation de Mtr86Win32 Noyau\PortDrv puis inscrire le pilote dans le registre laide de la commande Regini.exe : regini portX.ini. Windows NT chargera automatiquement ce pilote au prochain redmarrage .

    Il est possible de modifier ladresse de base et la plage E/S dun port une fois le pilote install en ditant la cl HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Port1\Parameters dans la base de registre. Cette adresse est prise en compte de faon dynamique condition de relancer lapplication utilisant le pilote. Attention il faut avoir les droits administrateur. Si un pilote de port ne dmarre pas linitialisation du systme (voir le journal dvnement laide de lobservateur dvnements) cest quil y est en conflit dadresse avec un priphrique utilisant dj cette

  • Mtr86 Win32 rvision 2.1 Page -4-

    Introduction

    E/S ou avec un pilote de port E/S dj install. Il nest pas possible dattaquer un mme port E/S simultanment laide de deux pilotes diffrents : le pilote de port est conu de telle sorte quil nautorise pas le recouvrement dadresses. Recommandations pour lutilisation des ports E/S sous Windows NT. Laccs des adresses systme des ports E/S peut mettre en pril le systme dexploitation. Pour cette raison laccs au port seffectue laide dune adresse relative par rapport ladresse de base. Tout accs en dehors de la plage prvue est intercepte et provoque une violation daccs ne mettant pas en danger le systme dexploitation. Pour fiabiliser vos programmes nous vous recommandons de limiter strictement la plage E./S des ports. Utilisation des ports E/S sous Windows 9X. Ce systme dexploitation autorisant laccs aux ports E/S, on utilise les fonctions habituelles daccs aux ports fournis par la librairie de votre compilateur (inp, outp pour VC, inportb, outportb pour Borland). 1.4. Taille des piles des tches Pour un processus, une pile de 1Mo est alloue pour lensemble des tches du processus. Un dbordement de cette pile provoque une exception, et ralloue de la mmoire sans arrter lapplication. Un dbordement de pile lintrieur dune tche provoque un fonctionnement erron de la tche. La taille de la pile est arrondie au multiple de 4K immdiatement suprieur. La taille minimale dune pile pour une tche est donc de 4Ko. Une valeur 0 passe en paramtre comme valeur de taille de pile, fournit une taille de pile identique la tche parente. 1.5. Utilisation des bibliothques standard C et C++ Les bibliothques C fournies avec les compilateurs, comportent deux types de modles : les modles single threaded et multithread. Mtr86 est conu pour utiliser les bibliothques DLL multithread. Ces bibliothques comportent un code dinitialisation permettant de verrouiller les sections critiques (malloc, printf, ...). Ces mcanismes sont utiliss par Mtr86 de faon transparente pour lapplication, cest dire que lapplication utilise sans risque les fonctions non rentrantes des sections de code verrouilles. Malheureusement le code dinitialisation du verrouillage nest pas standard, ce qui ncessite dutiliser une interface de noyau Mtr86WX.dll dpendante du compilateur. Mtr86W32 est fourni avec deux interfaces de noyau : Mtr86WM.dll pour le compilateur Visual C++ de Microsoft, Mtr86WB.dll pour le compilateur Borland C++ 5.x et pour le compilateur Inprise C++ Builder. Linstallation copie toutes les DLL dans le rpertoire systme. 1.6. Utilisation de la bibliothque E/S console conio Mtr86 est fourni avec une bibliothque Crt.lib mulant les E/S de la bibliothque conio Borland ( getch(), cputs(), clrscr(), gotoxy()...). Cette bibliothque permet dcrire des applications en mode console en utilisant le compilateur de Microsoft et effectuant des appels conio de type Borland. Cette bibliothque ne doit pas tre utilise avec les compilateurs Borland. Celle-ci a t porte par Borland sous Win32. Sous Windows 9X les E/S console sont bloquantes (exemple : getch() effectue de lattente active) . Ces E/S bloquent les tches de priorit infrieure. Sous Windows NT les E/S bloquantes suspendent la tche et rcuprent ainsi le temps CPU pour les tches moins prioritaires ( pas de bloquage ). Voir les exemples fournis. 1.7. Gestion des priorits avec Mtr86 Le mcanisme de gestion des priorits est sensiblement diffrent de celui de Mtr86 Dos. Chaque processus a une classe de priorit au sein de laquelle les tches peuvent avoir 7 niveaux de priorits dont 5 sont relatives la valeur PRIORITE_NORMALE ( +2, +1, 0, -1, -2) et deux niveaux de priorit absolu : PRIORITE_MAXIMALE et _MINIMALE. Le niveau de priorit PRIORITE_NORMALE est particulier en ce sens que lorsque le processus est en avant plan, ce niveau de priorit est dop de faon dynamique de +1 +2. Si on dsire une stricte gestion des niveaux de priorit, ne pas utiliser le niveau PRIORITE_NORMALE, utiliser des niveaux PRIORITE_NORMALE 1,2 Les classes de priorits des processus sont rparties en deux catgories : une catgorie de priorit fixe : la classe CLASSE_TEMPS_REEL et une catgorie dans laquelle les tches de ces processus se voient attribuer une priorit variant de faon dynamique autour de la valeur initiale de la priorit de la tche : les classes CLASSE_PRIORITE_HAUTE, CLASSE_PRIORITE_NORMALE, CLASSE_PRIORITE_BASSE. PRIORITE

  • Mtr86 Win32 rvision 2.1 Page -5-

    Introduction

    La classe temps rel possde une priorit suprieure au systme dexploitation. Cette classe ne doit tre utilise que pour des tches trs courtes trs forte contrainte de temps. Un processus de classe temps rel comportant une tche effectuant de lattente active bloque tout le systme exploitation (y compris la souris et le clavier). Pour permettre dapprhender ces mcanismes de priorits Mtr86Win32 est fourni avec un exemple priorit permettant de modifier de faon dynamique la priorit du processus et des tches. Une case cocher (suspendre) permet de simuler une attente active. Lutilisation de ce programme ne prsente pas de risque de blocage dans le cas o on choisit deffectuer de lattente active avec un processus de classe temps rel : une tche priorit maximale annule automatiquement lattente active au bout de 5 secondes (indicateur tches arrtes). Ltude de ce programme permet de bien situer lutilisation de Mtr86 dans un environnement Windows GUI.

  • Mtr86 Win32 rvision 2.1 Page -6-

    Introduction

    Modifie la priorit du processus courant Modifie la priorit de la tche T1

    Rgle la dure de suspension (dort) des taches T1..T5

    Attente active Off / On : Off la boucle dincrmentation du compteur comporte une suspension (dort).

    Indicateur : tches arrtes Bouton de relance des tches

    Utilisation du programme TP1 Appuyer sur Pause ( les compteurs ne sincrmentent plus ), puis sur RAZ

    Modifier la priorit des tches ( bouton . ) Observation : les taches incrmentent les compteurs du fait que chaque tche se suspend intervalle de temps rgulier.

    TP2 Appuyer sur Pause ( les compteurs ne sincrmentent plus ), puis sur RAZ Dcocher la case T1 (M ne jamais dcocher plus de deux cases), modifier la priorit de la tche

    correspondante +2, modifier la priorit de la tche T2 -2. Appuyer sur Pause puis au bout de quelques secondes nouveau sur Pause. Observation : les taches de priorit infrieure la tche faisant de lattente active ont fini par sexcuter via le mcanisme de vieillissement des tches.

    TP3 Appuyer sur Pause ( les compteurs ne sincrmentent plus ), puis sur RAZ Dplacer la boite de dialogue au milieu de lcran et lancer un nouveau processus laide du bouton. Modifier la priorit du premier processus ( classe de priorit haute ) Appuyer sur Pause

    Observation : le processus cre est bloqu par un processus de priorit suprieure faisant de lattente active . TP4 Cochez / dcocher la case T1. Observation : le processus cre sexcute / sarrte. Fermer une application. Assurer vous que lapplication restante est en mode pause ( les compteurs de sincrmentent pas). Modifier la priorit processus en classe temps rel. Dcocher la case T1, modifier la priorit de la tche correspondante priorit maximale , modifier la priorit de

    la tche T2 1, T3 2, T4 normale, T5 +1. Appuyer sur Pause. Lapplication prmpte le systme dexploitation ( la souris est bloque ) puis au bout de 5

    secondes lapplication revient en pause. Observation : les taches de priorit normale et suprieure ont fini par sexcuter via le mcanisme de vieillissement des tches. Les tches de priorit infrieure normale ne se sont jamais excutes.

  • Mtr86 Win32 rvision 2.1 Page -7-

    Introduction

    1.8. Rsolution de l'horloge La rsolution de l'horloge a une influence directe sur la prcision de toutes les temporisations.. Par dfaut l'horloge possde une rsolution de 10 millisecondes. Celle-ci peut tre ajuste l'aide de la primitive d_tic. Exemple :

    d_tic(10);// rsolution 10ms ... dort(1); // tempo de 10 ms ... dort(3); // tempo de 10 ms ... dort(5); // tempo de 10 ms

    d_tic(3); // rsolution 3 ms ... dort(1); // tempo de 3 ms ... dort(3); // tempo de 3 ms ... dort(5); // tempo de 6 ms

    d_tic(1); // rsolution 1 ms ... dort(1); // tempo de 1 ms ... dort(3); // tempo de 3 ms ... dort(5); // tempo de 5 ms

    Les rsolutions infrieures 10 ms surchargent le processeur sur les configurations peu puissantes.

    La primitive d_tic semble poser problme pour le processeur Pentium IV 2. DIAGRAMME D'ETAT DE MTR86

    Les transitions notes sur le diagramme correspondent des primitives Mtr86. Ce diagramme est celui d'une application comportant plusieurs tches au mme niveau de priorit. Dans une application comportant une tche par priorit, l'tat virtuel EXEC n'existe pas.

  • Mtr86 Win32 rvision 2.1 Page -8-

    Introduction

    3. COMPILATION DES PROGRAMMES La structure d'un fichier programme Mtr86 Win32 en mode console est la suivante: #include #include #include #include #include #ifdef __TURBOC__ #include // Si utilisation de conio #define _init_video() #else #include "conio.h" // Si utilisation de conio #pragma comment(linker, "/nodefaultlib:LIBCMT") #endif #include "mtr86w32.h" /* Dclaration des variables globales */ /* Dclaration des prototypes des tches */ /* Tche d'initialisation */ TACHE init( void ) { /* crer les tches */ /* crer les smaphores, ressources, tubes ... s'il y a lieu */ /* lancer les tches*/ } /* Autres tches */ main() { int code; _init_video(); /* Si utilisation sous VC++ de la librairie conio */ code = start(init, 4096); /* lancement de l'application, */ /* avec 4Ko octets de pile pour init() */ ......... /* section effectue la fin du programme.*/ exit(code); /* retour au systme */ } IMPORTANT Le programme doit tre reli aux librairies dimportation suivantes :

    1. Mtr86WX.lib spcifique au compilateur utilis. Cette librairie est situe dans le rpertoire : pour Borland (BC5X et Builder) \Noyau\Borland pour Microsoft VC++4 \Noyau\VisualC\Vc6 pour Microsoft VC++6 \Noyau\VisualC\Vc4

    2. Pour les programme effectuant les E/S conio avec un compilateur VisualC++, une librairie conio compatible avec la librairie Borland est fourni : crt.lib, Le programme dinstallation copie cette librairie dans : \Noyau .

    3. Aux librairies runtime C ou C++ multithread dynamique (DLL) (voir configuration des compilateurs).

    Mtr86Win32 est fourni avec des exemples de programmes en mode console et en mode GUI. Selon le compilateur utilis, charger les exemples partir des fichiers de projet situs dans Exemples\Borland, Exemples\Builder, Exemples\VisualC\Vc4, Exemples\VisualC\Vc6.

  • Mtr86 Win32 rvision 2.1 Page -9-

    Introduction

    Configuration des compilateurs Borland 5.x VisualC++ V4X..V6X

    Choisir une librairie multithread parmi les suivantes. (obligatoirement des DLL)

    Se relier Crt.lib (si vous utilisez les E/S console compatible Borland) Se relier toujours Mtr86WM.lib Ces librairies sont situes dans : \Noyau\VisualC

    Multithread GUI ou Console

    Se relier Mtr86WB.lib spcifique au compilateur

    Dynamique

  • Mtr86 Win32 rvision 2.1 Page -10-

    Introduction

    C++ Builder

    Se relier toujours Mtr86WB.lib Ces librairies sont situes dans : \Noyau\Borland

    Dans Options du projet / Lieur, cocher Utiliser la RTL Dynamique.

  • Mtr86 Win32 rvision 2.1 Page -11-

    Liste des requtes par catgorie

    4. LISTES DES REQUETES PAR CATEGORIE Requtes du noyau classes par ordre alphabtique (# nouvelle requte, ! requte supprime) active : lire une tche. cree : crer une tche. d_tic : dfinir la rsolution de l'horloge. detruit ( !) : dtruire une tche ( non implment dans la version Win32). supprime : supprimer une tche. dort : suspendre une tche. fc_enable : active CTRL BREAK et CTRL C (mode console). fc_disable : inhibe CTRL BREAK et CTRL C (mode console). m_signal : dfinir la fin d'une section de code verrouille. m_wait : dfinir une section de code verrouille. mtr86exit : sortir du systme. num_tache : obtenir le handle d'une tche. tache_id (#) : obtenir le numro dune courante. tache_priorite (#) : modifie la priorit dune tche. classe_priorite (#) : modifie la priorit dun processus. priorite_processus (#): obtient la priorit dun processus. tache_c : obtenir le handle de la tche courante. reveille : rveiller une tche. start : lancer le systme. startEx (#) : lancer le systme. suspend : suspend une tche. thread_id (#) : fourni le handle dune tche partir de son numro. verrouille (#) : verrouille une section critique. deverrouille (#) : deverrouille une section critique. Gestionnaire de messages m_send : lire une tche en lui envoyant un message. Gestionnaire de tches rythmes t_cree : crer une tche rythme. t_start : lancer une tche rythme. t_stop : arrter une tche rythme. Gestionnaire d'vnements e_cree : crer un groupe d'vnements. e_close : supprimer un groupe d'vnements. e_wait : attendre un groupe d'vnements. e_signal : signaler un vnement au groupe d'vnements. Gestionnaire de rendez-vous rv_cree : crer une variable rendez-vous. rv_init : initialiser une variable rendez-vous. rv_close : supprimer une variable de rendez-vous. rv_signal : se rendre au rendez-vous. Gestionnaire de tubes p_open : crer une zone de communication inter-tches ( tube ). p_close : dtruire un tube. p_write : crire dans un tube. p_read : lire dans un tube. p_plein : obtenir la quantit de places restant dans le tube. p_vide : obtenir la quantit de places occupes dans le tube. p_openEx (#) : crer une zone de communication inter-processus ( tube IPC). p_closeEx (#) : dtruire le tube IPC. p_writeEx (#) : crire dans un tube IPC. p_readEx (#) : lire dans un tube IPC. p_pleinEx (#) : obtenir la quantit de places restant dans le tube IPC. p_videEx (#) : obtenir la quantit de places occupes dans le tube IPC.

  • Mtr86 Win32 rvision 2.1 Page -12-

    Liste des requtes par catgorie

    Gestionnaire de ressources r_cree : crer une variable ressource. r_close : supprimer une variable ressource. r_wait : rserver une ressource. r_signal : signaler la libration d'une ressource. Gestionnaire de smaphores s_cree : crer un smaphore. s_creeEx (#) : crer un smaphore utilisable entre plusieurs processus. s_openEx (#) : ouvre un smaphore dj cre. s_close : supprimer un smaphore. s_wait : P(s). s_signal : V(s). Accs aux ports E/S Windows NT OpenPort (#) : Ouvrir un port E/S InPortb (#) : Lire un octet sur le port spcifi InPortw (#) : Lire un mot de 16 bits sur le port spcifi InPortdw (#) : Lire un mot de 32 bits sur le port spcifi OutPortb (#) : Ecrire un octet sur le port spcifi OutPortw (#) : Ecrire un mot de 16 bits sur le port spcifi OutPortdw (#) : Ecrire un mot de 32 bits sur le port spcifi ClosePort (#) : Fermer un port E/S

  • Mtr86 Win32 rvision 2.1 Page -13-

    Liste des requtes par catgorie

    5. PRIMITIVES DE MTR86 5.1. Formalisme utilis Nom de la requte ACTION Description des actions associes la requte. SYNTAXE Prototype 'C' PARAMETRES Description des paramtres passs. VAL. RETOURNE Description de la valeur retourne. ERREUR FATALE M Conditions pouvant provoquer l'arrt de l'application. DESCRIPTION Description de la requte. VOIR AUSSI Fonctions apparentes. EXEMPLE 'C' Exemples d'appels, rfrence des exemples.

    5.2. Requtes du noyau start, startEx ACTION Lance le noyau et active la tche d'initialisation. SYNTAXE int start (TACHE_ADR tache_adr, int taille_pile );

    int startEx(TACHE_ADR tache_adr, int taille_pile, DWORD dwPriorite); PARAMETRES Adresse de premire tche lancer (nom de la tche),

    Taille de la pile (minimum 4096). Classe de priorit du processus pour startEx : CLASSE_PRIORITE_TEMPS_REEL, CLASSE_PRIORITE_HAUTE CLASSE_PRIORITE_NORMALE, CLASSE_PRIORITE_BASSE

    VAL. RETOURNE Entier code d'erreur : 94; erreur fatale dtecte par le noyau 89..0; valeur passe par l'application en paramtre mtr86exit.

    ERREUR FATALE Mtr86 non install, version de mtr86 non conforme. DESCRIPTION Cette appel cre la tche la tche d'init en lui allouant:

    une pile, un numro (le numro 1), la priorit maximale (CLASSE_PRIORITE_TEMPS_REEL). Puis lance le systme et active la tche d'initialisation. La tche d'initialisation est charge de crer les tches et les objets (smaphores, ressources, tubes ...) utiliss par l'application. Les tches rythmes possdent la mme priorit que la tche d'initialisation. Il est donc prfrable, si l'application utilise ce type de tches, de n'effectuer la cration et leur lancement qu'en fin d'initialisation. A la fin du programme, le retour se fait aprs start.

    VOIR AUSSI mtr86exit, mtr86fatal. EXEMPLE C #include "mtr86w32.h"

    TACHE t( void ) { ... } TACHE init() { int i; for (i=0; i < 20; i++) active(cree( t, PRIORITE_NORMALE, 10000)); } int main() { exit(start( init, 8192 ));/* active le noyau */ }

  • Mtr86 Win32 rvision 2.1 Page -14-

    Liste des requtes par catgorie

    mtr86exit ACTION Stoppe l'excution de l'application. SYNTAXE void mtr86exit( unsigned n ); PARAMETRES Code d'erreur. DESCRIPTION mtr86exit est une des trois faons de terminer une application (avec mtr86fatal ou par

    appui sur les touches ^BREAK ou ^C (si ses touches sont valides). Les objets utiliss par mtr86 sont librs. Le retour s'effectue par la primitive start avec pour valeur, le paramtre pass mtr86exit. Les valeurs comprises entre 90..99 sont rserves par mtr86. mtr86exit peut tre utilis sans restriction dans tous les types de tches.

    VOIR AUSSI start, mtr86fatal. EXEMPLE 'C' Tous les exemples Ex.c

    cree ACTION Cr une tche. SYNTAXE HANDLE cree(TACHE_ADR adr_tache, unsigned priorite,

    unsigned size); PARAMETRES Adresse (nom) de la tche,

    Priorit de la tche : PRIORITE_NORMALE [0..2], PRIORITE_MINIMALE, PRIORITE_MAXIMALE Taille de la pile ( 4ko).

    VAL. RETOURNE Handle de la tche cre. Ce handle est compatible avec les objets Win32 et peut tre utilis avec toutes les fonctions Win32.

    ERREUR FATALE M Priorit errone. DESCRIPTION La tche n'est pas lance. Pour la lancer utiliser la primitive active. VOIR AUSSI mtr86exit, start, num_tache. EXEMPLE 'C' Tous les exemples Ex.c

    active ACTION Fait passer une tche l'tat prt. SYNTAXE void active( HANDLE tache ); PARAMETRES handle de la tche. ERREUR FATALE M Tche non cr. DESCRIPTION Activer un tche consiste faire passer celle-ci de l'tat cre l'tat prt. Cette

    procdure place une tche dans la file d'attente des tches ligibles au niveau de priorit de la tche. Si la tche active est plus prioritaire que la tche ayant effectue la requte, la tche active est immdiatement lance. Une activation ne correspond pas obligatoirement au lancement de la tche. La tche active n'est effectivement lance lorsque sa priorit est suprieure ou gale celle de toutes les tches prtes ou en excution. Une tche cre peut recevoir un signal d'activation tout moment. Lorsque la tche n'est pas en mesure d'accepter le signal d'activation, celui-ci est mmoris jusqu' concurrence de 232.

    VOIR AUSSI cree, detruit, m_send. EXEMPLE 'C' Tous les exemples Ex.c

  • Mtr86 Win32 rvision 2.1 Page -15-

    Liste des requtes par catgorie

    tache_priorite ACTION Modifie la priorit dune tche. SYNTAXE void tache_priorite ( HANDLE hTache, DWORD dwPrioriteTache ); PARAMETRES Handle de la tche.

    Priorit de la tche (voir cree). DESCRIPTION Modifie la priorit dune tche de faon dynamique. VOIR AUSSI classe_priorite. EXEMPLE 'C' priorite.c

    classe_priorite ACTION Modifie la priorit du processus courant. SYNTAXE void classe_priorite ( DWORD dwPrioriteTache ); PARAMETRES Classe de priorit (voir startEx). DESCRIPTION Modifie la priorit du processus courant de faon dynamique. VOIR AUSSI start EXEMPLE 'C' priorite.c

    priorite_processus ACTION Retourne la valeur de la priorit du processus courant. SYNTAXE unsigned priorite_processus (void ); VAL. RETOURNE Classe de la priorit du processus (voir startEx) . DESCRIPTION Permet dobtenir la valeur de priorit du processus courant. VOIR AUSSI classe_priorite. EXEMPLE 'C' priorite.c

    d_tic ACTION Modifie la rsolution de l'horloge SYNTAXE DWORD d_tic( unsigned tic ); VAL. RENVOYEE tic ou 0 en cas de paramtre incorrect. DESCRIPTION d_tic permet de modifier la rsolution de l'horloge utilise dans toutes les oprations

    caractre temporel ( dort, ...). Le paramtre tic doit tre : 1ms tic 10ms. Sous windows NT/2000, la prcision des temporisations atteint 1ms avec un tic de 1ms. La temporisation est arrondie sur des multiples de la rsolution. Exemple : pour d_tic(3) dort(1); // tempo de 3 ms dort(3); // tempo de 3 ms dort(5); // tempo de 6 ms

    EXEMPLE 'C' d_tic.c

    cvrtic ACTION Sans action SYNTAXE unsigned cvrtic( unsigned ms ); PARAMETRES Dure en millisecondes (entier long). VAL. RENVOYEE Valeur fournie. DESCRIPTION Cette primitive nest prsente que pour des raisons des comptabilits avec Mtr86 Dos.

    Avec Mtr86 Win32 tous les temps sont exprims en ms.

  • Mtr86 Win32 rvision 2.1 Page -16-

    Liste des requtes par catgorie

    dort ACTION Suspend la tche ayant effectu cette requte. SYNTAXE unsigned dort( unsigned timeout ); PARAMETRES Dure de la suspension en ms. Si dure=0 la tche est suspendue de

    faon permanente et ne peut tre relance que par la requte rveille. VAL. RENVOYEE OK si la tche est relance par la requte rveille TIM si la tche est

    relance par le noyau au bout de la temporisation programme. DESCRIPTION Lors de l'appel de la primitive dort, la tche effectuant la requte est immdiatement

    suspendue et le processeur est attribu la tche ligible prioritaire ou la prochaine tche prsente dans le file des processus en excution (voir diagramme page 5). Lorsque le paramtre de dort est gal 0, le rveil de la tche doit obligatoirement tre effectu par une autre tche l'aide de reveille. Dans ce cas cette requte est utilise pour effectuer une synchronisation. La valeur passe en paramtre peut tre gale une valeur diffrente de 0 si on dsire une synchronisation borne. Lorsque dort est utilis comme moyen de temporisation, la valeur passe en paramtre doit obligatoirement tre diffrente de 0. La dure de la temporisation est exprime en millisecondes. Les primitives dort et reveille sont des interfaces directes avec le noyau et permettent l'application d'implmenter des primitives non ralises par Mtr86.

    VOIR AUSSI d_tic, cvrtic, reveille. EXEMPLE C TACHE tache_1( void ) {

    if ( (dort(1000))==TIM ) cputs("Timeout"); else puts("Tche rveille par une autre tche"); } Tous les exemples Ex.c et priorite.c

    suspend ACTION Suspend une tche. SYNTAXE unsigned suspend( HANDLE htache); PARAMETRES Handle de la tche suspendre. VAL. RENVOYEE valeur du compteur de suspension ou 1 en cas derreur. Une description

    dtaille de lerreur peut tre obtenue avec le programme Error Lookup (ERRLOOK.EXE) fourni avec VC++ 6.X.

    DESCRIPTION Suspend fait passer une tche de l'tat d'excution l'tat suspendu. Les signaux de suspension sont mmoriss. Il faut viter d'utiliser cette requte avec une tche susceptible de se bloquer l'aide d'un mcanisme faisant intervenir plusieurs tches (smaphores, moniteurs, ressources, tubes) cause du risque potentiel d'interbloquage que prsente cette requte. Une tche suspendue peut tre relance avec la primitive active.

    VOIR AUSSI active, dort, reveille EXEMPLE 'C' tubeIPC.cpp reveille ACTION Relance une tache suspendue. SYNTAXE void reveille( HANDLE htache ); PARAMETRES Handle de la tche relancer. DESCRIPTION reveille est une primitive de bas niveau qui permet de relancer toute tche suspendue. Si

    la tche rveille est de priorit suprieure la tche courante, cette dernire est suspendue la fin du quantum jusqu' ce qu'elle redevienne son tour prioritaire. Seul le premier signal de rveil est mmoris, les signaux suivant sont perdus.

    VOIR AUSSI dort. EXEMPLE 'C' voir exemples Mtr86 Dos

  • Mtr86 Win32 rvision 2.1 Page -17-

    Liste des requtes par catgorie

    detruit ACTION Cette fonction n'est pas implmente dans Mtr86W32, utiliser la place

    supprime.

    supprime ACTION Supprime une tche. SYNTAXE void supprime( HANDLE htache ); PARAMETRES Handle de la tche. DESCRIPTION Cette primitive arrte l'excution de la tche dsigne. La tche dtruire peut tre dans

    un tat CREE, SUSP, EXEC, PRET. A la fin de cette requte la tche dtruite passe l'tat non cre et le handle ne peut plus tre utilis. La suppression d'une tche doit toujours tre envisag avec circonspection : si la tche est dtruite alors qu'elle utilise un objet en exclusion mutuelle, cet objet n'est pas libr et la programme complet peut se bloquer.

    EXEMPLE 'C' voir exemple E8

    tache_c ACTION Fourni le vrai handle de la tche courante. SYNTAXE HANDLE tache_c( void ); VAL. RENVOYEE Handle vritable (et le non pseudo handle) de la tche en excution. EXEMPLE 'C' tous les exemples

    tache_id ACTION Fourni le numro de la tche courante. SYNTAXE unsigned tache_id( HANDLE htache ); PARAMETRES Handle de la tche. VAL. RENVOYEE Numro de la tche de la tche. DESCRIPTION tache_id permet de dterminer le numro de la tche dans laquelle est utilis cette

    requte. Cette primitive est gnralement utilise pour quune tche sidentifie lorsqu'il existe plusieurs instances d'une mme tche (voir exemple e17). La tche lance par start possde le n 1.

    EXEMPLE 'C' tous les exemples

    thread_id ACTION Fourni le handle dune tche. SYNTAXE HANDLE thead_id( unsigned tache ); PARAMETRES id de la tche. VAL. RENVOYEE handle de la tche (compatible avec Win32). DESCRIPTION thread_id permet de dterminer le handle dune tche laide de son entier lidentifiant.

    La tche lance par start possde la valeur id = 1.

    EXEMPLE 'C' pas dexemples

    num_tache ACTION Donne le numro d'une tche partir de son adresse. SYNTAXE unsigned num_tache( TACHE_ADR adr_tache ); PARAMETRES Nom de la tche. VAL. RENVOYEE Handle de la tche

  • Mtr86 Win32 rvision 2.1 Page -18-

    Liste des requtes par catgorie

    DESCRIPTION num_tache permet de retrouver le handle d'une tche lorsqu'il n'a pas t mmoris lors de la cration de la tche. La recherche du numro d'une tche est bas sur la comparaison de l'adresse de la tche avec les valeurs mmorises dans les structures de donnes de mtr86. Par consquent num_tache ne peut tre utilis lorsque plusieurs instances d'une mme tche sont cres. num_tache est un processus itratif consommateur de temps CPU et ne doit pas tre la mthode gnrale d'obtention du numro d'une tche. NOTA : num_tache ne peut tre utilis lorsqu'il existe plusieurs instances d'une mme tche car num_tache utilise l'adresse de celle-ci pour dterminer son numro.

    VOIR AUSSI cree, tache_c. EXEMPLE 'C' la plupart des exemples m_wait, MONITOR ACTION Dclare un segment moniteur. SYNTAXE void m_wait( void );

    #define MONITOR m_wait(); { DESCRIPTION Les moniteurs sont utiliss pour assurer l'exclusion mutuelle lors de l'accs aux sections

    critiques. Un seul processus utilisant la primitive moniteur peut tre actif un instant donn. m_wait est la procdure d'exclusion mutuelle la plus rapide. m_wait est galement implant sous la forme de la macro MONITOR dans la version C (voir mtr86W32.h) Cette macro doit tre utilise avec ENDM dans le mme bloc. La macro MONITOR effectue un contrle minimal de la smantique de la primitive. Lors de la destruction de tches utilisant un moniteur, il est indispensable que la tche fournissant le signal de destruction effectue la squence m_waitdetruitm_signal. Aprs destruction des tches, m_signal autorise l'limination du numro de la tche dtruite de la file des tches moniteurs.

    VOIR AUSSI r_wait, s_wait, ENDM, m_signal, s_signal, r_signal. EXEMPLE 'C' E32, E4

    m_signal, ENDM ACTION Libre un segment moniteur. SYNTAXE void m_signal( void );

    #define ENDM m_signal(); } DESCRIPTION L'utilisation des macros MONITOR et ENDM en 'C' permet au compilateur de raliser un

    contrle smantique minimal mais provoque des erreurs de syntaxe si le couple MONITOR ENDM n'est pas utilis dans le mme bloc.

    VOIR AUSSI r_wait, s_wait, MONITOR, m_wait, s_signal, r_signal. EXEMPLES Voir m_wait.

    verrouille ACTION Verrouille une section critique. SYNTAXE void verrouille( unsigned n ) ; PARAMETRES numro de la section critique 0..MAX_SECTIONS_CRITIQUES-1. DESCRIPTION Permet de verrouiller une section critique de faon efficace. Alternative m_wait

    lorsque le programme possde plus dune section critique. Mtr86 met disposition les sections critiques 0..MAX_SECTIONS_CRITIQUES-1.

    VOIR AUSSI deverouille, r_wait, s_wait, m_wait. EXEMPLES Pas dexemples

    deverrouille

  • Mtr86 Win32 rvision 2.1 Page -19-

    Liste des requtes par catgorie

    ACTION Dverrouille une section critique. SYNTAXE void deverrouille( unsigned n ) ; PARAMETRES numro de la section critique 0..MAX_SECTIONS_CRITIQUES-1. DESCRIPTION Permet de dverrouiller une section critique. VOIR AUSSI verrouille, r_signal, s_signal, m_signal. EXEMPLES Pas dexemples

    m_send ACTION Active une tche par passation de messages. SYNTAXE void m_send( HANDLE htache, void* message ); PARAMETRES Handle de la tche activer, pointeur vers le message. ERREUR FATALE M Tche non cre. DESCRIPTION m_send active une tche en lui passant le message point par le deuxime paramtre. Le

    message est recopi dans une file de messages limite. Le comportement de cette requte est identique active(). Le message pass doit tre un pointeur vers la donne transmettre. La taille totale du message doit tre infrieure ou gale 8 octets. Le type du message est dtermin par la tche active. m_send recopie l'objet dans la pile de la tche juste avant de lancer celle-ci. En consquence la donne doit exister jusqu'au moment de sa transmission effective la tche autorise le passage de tous les types de donnes. Transmission de variables: c'est l'adresse de la variable qui doit tre fournie. Transmission de l'adresse d'un tableau: dclarer un pointeur sur le tableau, et passer l'adresse du pointeur m_send. Transmission d'une constante: il n'est pas possible de transmettre directement une constante (comme pour l'adresse d'un tableau), celle-ci n'ayant pas d'adresse disponible en Pascal ou en C. La solution consiste alors l'affecter une variable, puis de transmettre l'adresse de celle-ci. Pour une chane de caractres, lorsque celle-ci est infrieure 8 caractres, l'adresse de la chane peut tre directement transmise, la tche reoit la chane complte en paramtre. Pour une chane de taille suprieure il faut affecter l'adresse de la chane un pointeur et passer l'adresse de ce pointeur m_send. La tche reoit alors l'adresse de la chane.

    VOIR AUSSI active. EXEMPLE C Voir exemple E5

    5.3. Gestionnaire de tches rythmes t_cree ACTION Cr une tche rythme. SYNTAXE HANDLE t_cree( TACHE_ADR adr_tache, unsigned size,

    unsigned ms); PARAMETRES Adresse de la tche

    Taille de la pile (minimum 4Ko), Intervalle d'excution en ms

    VAL. RENVOYEE Handle de la tche. DESCRIPTION t_cree cr une tche excute automatiquement intervalle rgulier (tche rythme). Ce

    type de tche doit tre utilis pour effectuer des travaux des instants garantis. Une tche rythme possde la priorit maximale des tches du processus. Une tche rythme ne doit faire appel aucune requte susceptible de la bloquer, elle ne doit pas tre reboucle et doit s'excuter dans l'intervalle du rythme prvu. Elle ne doit donc pas utiliser les requtes m_wait, r_wait, e_wait, s_wait, rv_signal, dort. Les tubes peuvent tre utiliss dans une tche rythme condition de vrifier auparavant leur tat (par

  • Mtr86 Win32 rvision 2.1 Page -20-

    Liste des requtes par catgorie

    p_plein et p_vide). Une tche rythme est lance par la primitive t_start et arrte par t_stop toujours la fin de celle-ci.

    VOIR AUSSI t_start, t_stop. EXEMPLE E7

    t_start ACTION Lance une tche rythme. SYNTAXE void t_start( HANDLE htache ); PARAMETRES Handle de la tche. DESCRIPTION t_start lance une tche cre par t_cree. Une fois lance la tche est automatiquement

    relance avec l'intervalle de temps dfini par t_cree.

    VOIR AUSSI t_cree, t_stop.

    t_stop ACTION Stoppe une tche rythme SYNTAXE void t_stop( HANDLE htache ); PARAMETRES Handle de la tche rythme. DESCRIPTION t_stop arrte l'excution d'une tche rythme, mais ne dtruit pas la tche. Une tche

    rythme ne doit pas tre dtruite..

    5.4. Gestion des vnements e_cree ACTION Crer un groupe d'vnements. SYNTAXE EVENEMENT e_cree ( void );

    FUNCTION e_cree : EVENEMENT; VAL. RENVOYEE Numro du groupe d'vnement cr. DESCRIPTION Un groupe d'vnements est constitu de 32 bits vnements. Les oprations possibles

    sur ces bits sont l'attente d'une ou plusieurs configurations d'vnements (opration m_wait), et l'envoie de signaux vers un groupe d'vnements (opration m_signal). Pour viter de signaler des vnements non encore crs, il est prfrable de crer les variables vnements dans la tche d'init..

    VOIR AUSSI e_close, e_wait, e_signal EXEMPLE C EVENEMENT numero_event_1;

    TACHE f1( void ) { ... numero_event_1 = e_cree(); } Exemple E4

    e_close ACTION Dtruit un groupe d'vnements. SYNTAXE void e_close( EVENEMENT ev );

    PROCEDURE e_close( evn : EVENEMENT ); PARAMETRES Numro du groupe. DESCRIPTION Dans une application taille critique, la requte e_close permet de rcuprer la mmoire

    alloue lorsque le groupe n'est plus utilis. Les groupes vnements sont automatiquement clos lors de l'arrt de l'application.

  • Mtr86 Win32 rvision 2.1 Page -21-

    Liste des requtes par catgorie

    VOIR AUSSI e_cree, e_wait, e_close.

    e_wait ACTION Synchronise une tche sur un vnement. SYNTAXE unsigned e_wait( EVENEMENT evn, unsigned valeur, unsigned mask,

    unsigned code, unsigned timeout ); PARAMETRES Numro du groupe d'vnement.

    Valeur du groupe vnement attendu Masque spcifiant les bits vnements du groupe Code spcifiant le type d'opration entre les bit: Opration EAND: Les bits attendus doivent avoir la valeur des bits signals pour que la tche ayant effectue la requte e_wait soit relance. Opration EOR: Un des bits attendus doit avoir la valeur du bit correspondant au bit signal pour que la tche ayant effectu la requte e_wait soit relance. Si l'attente est borne, au bout de timeout ms le systme relance la tche avec une indication TIM. Timeout = 0 attente de dure indtermine Timeout 0 attente durant ms timeout

    VAL. RENVOYEE Combinaison des bits vnements ayant satisfait la requte, ETM (0) si dpassement du temps imparti.

    DESCRIPTION L'opration e_wait permet une tche d'attendre une combinaison particulire de bits. Contrairement Mtr86Dos, les vnements sont mmoriss. Lorsqu'une tche se met en attente d'un vnement, elle ne se bloque pas lorsque lvnement est dj signal. Il n'est pas possible d'attendre simultanment une combinaison EAND et EOR. La solution consiste utiliser un bit vnement combinant cette opration. Exemple: vnement attendu : bit3 OU (bit2 ET bit1). Combiner bit2 ET bit1 = bitx dans la requte m_signal et attendre bit3 OU bitx. A partir de la version 2.11 il est possible de connatre la combinaison de bits ayant satisfait la requte en testant la valeur retourne par e_wait (ne prsente un intrt dans le cas EOR).

    ERREUR FATALE M Evnement non cr. VOIR AUSSI e_cree, e_close, e_signal.

    EXEMPLE C L'exemple suivant attend la configuration des bits suivant: xxxx 0011 xxxx xxxxb durant un temps maximal d'une seconde. EVENEMENT e; TACHE f1( void ) { if ( e_wait( e, 0x0300,0x0F00,EAND,cvrtic(1000) ) puts("Evnement reus"); else puts("Dpassement du temps d'attente pour e"); } L'exemple suivant indfiniment la figuration des bits suivant: xxxx xx11 xxxx xxxx b xxxx xx01 xxxx xxxx b, xxxx xx10 xxxx xxxx b TACHE f1( void ) { e_wait( e, 0x0300, 0x0300, EOR, 0); ... }

    e_signal ACTION Signale un vnement au groupe. SYNTAXE unsigned e_signal( EVENEMENT evn, unsigned vs );

  • Mtr86 Win32 rvision 2.1 Page -22-

    Liste des requtes par catgorie

    PARAMETRES Numro du groupe, Valeur du groupe

    VAL. RENVOYEE PAE si pas de tche en attente de cet vnement ou nombre de tches effectivement en attente.

    DESCRIPTION Le gestionnaire d'vnements recherche une concordance entre la valeur signale (vs) et la valeur attendue. Tche en attente sur une opration EAND: Si [valeur ET mask = vs] l'vnement signal est celui attendu, le gestionnaire d'vnements relance alors la tche en attente. Tche en attente sur une opration EOR: Si [((valeur ET mask) OU (vs ET mask) ) 0] l'vnement signal est celui attendu, le gestionnaire d'vnements relance alors la tche en attente. Les vnements signals sont mmoriss. La signalisation des vnements est relativement coteuse en temps CPU (fonction du nombre de tche en attente de ces vnements). Il est prfrable de ne signaler les vnements que si leur valeur a chang. Lorsqu'une tche signale un vnement, celui-ci est perdu si aucune tche n'est en attente. Il est possible de connatre combien de tches sont effectivement en attente en testant la valeur retourne par e_signal. Une valeur nulle (PAE) indique qu'il n'y a aucune tche en attente, une valeur non nulle donne le nombre de tches en attente de cet vnement. Le test de la valeur retourne permet ventuellement de grer les pertes de signaux.

    ERREUR FATALE M Evnement non cr. VOIR AUSSI e_cree, e_close, e_wait.

    5.5. Gestionnaire de rendez-vous rv_cree ACTION Cr et initialise un rendez-vous. SYNTAXE RV rv_cree( unsigned n, unsigned timeout ) ; PARAMETRES n = nombre de tches se donnant rendez-vous

    timeout : attente maximale en ms. VAL. RENVOYEE numro de la variable rendez-vous. DESCRIPTION Les rendez-vous permettent de rsoudre la plupart des problmes de synchronisation.

    Lorsqu'un rendez-vous a eu lieu, le gestionnaire de rendez-vous rinitialise automatiquement les structures de donnes utilises pour permettre un nouveau rendez-vous avec le nombre dfini lors de l'allocation de la variable. Il est donc inutile de rinitialiser un nouveau rendez-vous. Si le rendez-vous n'a pas lieu (sortie sur timeout) ou si le nombre de rendez est fix de faon dynamique, il convient d'effectuer une rinitialisation.

    ERREUR FATALE M Dpassement du nombre maximal de variables autorises, dbordement du tas.

    VOIR AUSSI rv_close, rv_signal. EXEMPLE C RV rv;

    TACHE init( void ){ ... rv = rv_cree( 3, cvrtic(10000)); ... } Exemple E11

    rv_close ACTION Dtruit une variable rendez-vous. SYNTAXE void rv_close( RV n );

  • Mtr86 Win32 rvision 2.1 Page -23-

    Liste des requtes par catgorie

    PARAMETRES numro de la variable de rendez-vous. DESCRIPTION Libre les structures de donnes utilises pour la gestion du rendez-vous concern. Ce

    requte n'est utiliser que si l'application doit utiliser un minimum de mmoire.

    VOIR AUSSI rv_cree, rv_signal.

    rv_signal ACTION Signale l'arrive au rendez-vous. SYNTAXE unsigned rv_signal( RV num ); PARAMETRES numro de la var de rendez-vous. VAL. RENVOYEE OK si rendez-vous,

    TIM en cas de dpassement du temps autoris. DESCRIPTION rv_signal suspend la tche effectuant cet appel sauf si elle est la dernire tche se

    rendre au rendez-vous. Le gestionnaire de rendez-vous relance alors toutes les autres tche et rinitialise la variable rendez-vous. Si le rendez-vous n'a pas lieu dans les dlais prvus, les tches sont relances avec une indication de timeout.

    VOIR AUSSI rv_close, rv_cree.

    rv_init ACTION Rinitialise un rendez-vous. SYNTAXE void rv_cree( RV n, unsigned val ) ; PARAMETRES numro de la var de rendez-vous.

    nb de tches au rendez-vous VAL. RENVOYEE OK si rendez-vous,

    TIM en cas de dpassement du temps autoris. DESCRIPTION rv_init permet dinitialiser des rendez-vous de faon dynamique. VOIR AUSSI rv_close, rv_cree.

    5.6. Gestionnaire de tubes p_open ACTION Cr un tube de communication inter-tches. SYNTAXE TUBE p_open(HANDLE producteur, HANDLE consommateur,

    unsigned timeout); PARAMETRES Handle du produteur

    Handle du consommateur Timeout sur l'accs au tube en ms: 0 = dure d'une transaction indtermine n = dure d'une transaction limite tics timeout

    DESCRIPTION Un tube tabli un modle dchange producteur consommateur. VAL. RENVOYEE Numro du tube cr. ERREUR FATALE M Plus de tube disponible. VOIR AUSSI p_close, p_write, p_read, p_plein, p_vide, detruit. EXEMPLE C TUBE t1, t2;

    TACHE init( void ) { unsigned nf1, nf2, nf3; nf1=cree(f1, 2, 4096); /* crer d'abord les tches */ nf2=cree(f2, 2, 4096); /* avant d'allouer les tubes*/ nf3=cree(f3, 1, 4096); t1 =p_open ( nf1, nf2, 500 );

  • Mtr86 Win32 rvision 2.1 Page -24-

    Liste des requtes par catgorie

    t2 =p_open ( nf1, nf3, 500 ); } Exemple E6

    p_close ACTION Dtruit un tube. SYNTAXE void p_close ( TUBE tube ); PARAMETRES Numro du tube. DESCRIPTION Libre les structures de donnes utilises par le tube spcifi. En dsallouant un tube,

    p_close peut tre utilis pour vider un tube (squences p_closep_open). p_close ne relance pas les tches bloques sur un tube vide ou plein.

    VOIR AUSSI p_open, p_write, p_read, p_plein, p_vide, detruit. EXEMPLE p_close( t1 );

    p_write ACTION Ecrit dans un tube. SYNTAXE unsigned p_write(TUBE tube, void* buf, unsigned size); PARAMETRES Numro du tube.

    Pointeur vers la zone source. Nombre d'octets crire.

    VAL. RENVOYEE OK si donne crite, TIM si dpassement du temps imparti. DESCRIPTION p_write crit dans le tube de numro spcifi. Lorsque le tube est plein, le rdacteur est

    suspendu jusqu' ce qu'une donne soit extraite du tube. Si aucune donne n'est extraite du tube avant tics timeout, la tche est relance avec une indication de temps dpass. Les tubes utilisent des tampons de 4Ko octets, mais rien interdit d'crire des donnes de taille quelconque.

    ERREUR FATALE M Producteur non propritaire du tube. VOIR AUSSI p_open, p_close, p_read, p_plein, p_vide. EXEMPLE C TACHE f1( void ) {

    long tableau[ 250 ]; int j; ... if (( p_write ( t1, tableau, sizeof(tableau))==TIM) puts("Donnes non crites dans le temps imparti"); }

    p_read ACTION Lit dans un tube. SYNTAXE unsigned p_read(TUBE tube, void *buf, unsigned size); PARAMETRES Numro du tube.

    Pointeur vers la zone destination. Nombre d'octets lire.

    VAL. RENVOYEE OK si donne lue, TIM si dpassement du temps imparti. DESCRIPTION p_read lit le tube de numro spcifi. Lorsque le tube est vide, le lecteur est suspendu

    jusqu' ce qu'une donne soit crite du tube. Si aucune donne n'est crite dans le tube avant tics timeout, la tche est relance avec une indication de temps dpass.

    ERREUR FATALE M Consommateur non propritaire du tube. VOIR AUSSI p_open, p_close, p_read, p_plein, p_vide. EXEMPLE C TACHE f1( void ){

    long tableau[ 250 ]; int j;

  • Mtr86 Win32 rvision 2.1 Page -25-

    Liste des requtes par catgorie

    ... if (( p_read ( t1, tableau, sizeof(tableau))==TIM) puts("Donnes non lues dans le temps imparti"); }

    p_plein ACTION Places restantes dans un tube. SYNTAXE unsigned p_plein( TUBE tube ); PARAMETRES Numro du tube. VAL. RENVOYEE Place disponible dans le tube. DESCRIPTION Cette requte ne se justifie que pour les tches ne devant pas se bloquer (tche

    matrielle). En permettant le test de la place disponible dans un tube, cette requte vite au gestionnaire de tubes de suspendre la tche sur un tube plein.

    VOIR AUSSI p_open, p_close, p_write, p_read, p_vide.

    p_vide ACTION Nombre de donnes prsentes dans un tube. SYNTAXE unsigned p_vide( TUBE tube ) ; PARAMETRES Numro du tube. VAL. RENVOYEE Nombres d'octets dans le tube. DESCRIPTION Cette requte ne se justifie que pour les tches ne devant pas se bloquer (tche

    matrielle). En permettant le test de la quantit de donnes disponibles dans un tube, cette requte vite au gestionnaire de tubes de suspendre la tche sur un tube vide.

    VOIR AUSSI p_open, p_close, p_write, p_read, p_plein.

    p_openEx ACTION Cr un tube de communication entre deux processus. SYNTAXE TUBE_EX p_openEx(char* szNomTube, DWORD dwTimout) PARAMETRES tableau de caractre ASCIIZ attribuant un nom au tube (max 31 caractres),

    Timeout sur l'accs au tube en ms: 0 = dure d'une transaction indtermine n = dure d'une transaction limite tics timeout

    DESCRIPTION Un tube tabli un modle dchange producteur consommateur entre deux processus. VAL. RENVOYEE Numro du tube cr. ERREUR FATALE M Plus de tube disponible. VOIR AUSSI p_closeEx, p_writeEx, p_readEx, p_pleinEx, p_videEx. EXEMPLE C tubeIPC.cpp

    p_closeEx ACTION Dtruit un tube. SYNTAXE void p_closeEx(TUBE_EX dwTube); PARAMETRES Numro du tube. DESCRIPTION Libre les structures de donnes utilises par le tube spcifi. En dsallouant un tube,

    p_close peut tre utilis pour vider un tube (squences p_closep_open). p_close ne relance pas les tches bloques sur un tube vide ou plein.

    VOIR AUSSI p_writeEx, p_readEx, p_pleinEx, p_videEx.

  • Mtr86 Win32 rvision 2.1 Page -26-

    Liste des requtes par catgorie

    p_writeEx ACTION Ecrit dans un tube IPC. SYNTAXE DWORD p_writeEx(TUBE_EX dwTube, void* lpVoidBuffer,

    DWORD dwSize); PARAMETRES Numro du tube.

    Pointeur vers la zone source. Nombre d'octets crire.

    VAL. RENVOYEE OK si donne crite, TIM si dpassement du temps imparti. DESCRIPTION p_write crit dans le tube de numro spcifi. Lorsque le tube est plein, le rdacteur est

    suspendu jusqu' ce qu'une donne soit extraite du tube. Si aucune donne n'est extraite du tube avant tics timeout, la tche est relance avec une indication de temps dpass. Les tubes utilisent des tampons de 4Ko octets, mais rien interdit d'crire des donnes de taille quelconque.

    ERREUR FATALE M Producteur non propritaire du tube. VOIR AUSSI p_writeEx, p_readEx, p_pleinEx, p_videEx.

    p_readEx ACTION Lit dans un tube. SYNTAXE DWORD p_readEx(DWORD TUBE_EX, void* lpVoidBuffer,

    DWORD dwSize); PARAMETRES Numro du tube.

    Pointeur vers la zone destination. Nombre d'octets lire.

    VAL. RENVOYEE OK si donne lue, TIM si dpassement du temps imparti. DESCRIPTION p_read lit le tube de numro spcifi. Lorsque le tube est vide, le lecteur est suspendu

    jusqu' ce qu'une donne soit crite du tube. Si aucune donne n'est crite dans le tube avant tics timeout, la tche est relance avec une indication de temps dpass.

    ERREUR FATALE M Consommateur non propritaire du tube. VOIR AUSSI p_writeEx, p_readEx, p_pleinEx, p_videEx.

    p_pleinEx ACTION Places restantes dans un tube. SYNTAXE DWORD p_pleinEx( TUBE_EX tube ); PARAMETRES Numro du tube. VAL. RENVOYEE Place disponible dans le tube. DESCRIPTION Cette requte ne se justifie que pour les tches ne devant pas se bloquer (tche

    matrielle). En permettant le test de la place disponible dans un tube, cette requte vite au gestionnaire de tubes de suspendre la tche sur un tube plein.

    p_videEx ACTION Nombre de donnes prsentes dans un tube. SYNTAXE DWORD p_videEx( TUBE_EX tube ) ; PARAMETRES Numro du tube. VAL. RENVOYEE Nombres d'octets dans le tube. DESCRIPTION Cette requte ne se justifie que pour les tches ne devant pas se bloquer (tche

    matrielle). En permettant le test de la quantit de donnes disponibles dans un tube, cette requte vite au gestionnaire de tubes de suspendre la tche sur un tube vide.

  • Mtr86 Win32 rvision 2.1 Page -27-

    Liste des requtes par catgorie

    5.7. Gestionnaire de ressources r_cree ACTION Cr une ressource. SYNTAXE RESSOURCE r_cree( void ); VAL. RENVOYEE Numro de la ressource cre. DESCRIPTION Le gestionnaires de ressources comporte des requtes destines raliser l'exclusion

    mutuelle (zone de donne globale, fonction non rentrante, priphrique non partageable). Elle sont alors similaires aux smaphores binaires avec les exceptions suivantes : l'attribution de la ressource s'effectue selon le critre d'ordre d'arrive et non en fonction de la priorit de la tche et seule la tche en possession de la ressource, est autorise la librer. Lors de la destruction de tches utilisant des variables ressources, il est indispensable que la tche fournissant le signal de destruction s'approprie la ressource en effectuant la requte r_wait. Aprs destruction des tches, r_signal autorise alors l'limination du numro de la tche dtruite de la file des tches en attente de la ressource. Ce processus ne fonctionne pas correctement si la tche dtruite est immdiatement relance puis suspendue. Dans le cas gnral il vaut mieux dtruire toutes les tches associes la ressource, puis recrer la ressource et ractiver les tches.

    ERREUR FATALE M Nombre maximal de ressources dpass. VOIR AUSSI r_close, r_wait, r_signal. EXEMPLE C E8

    r_close ACTION Dtruit une ressource. SYNTAXE void r_close( RESSOURCE nr ); PARAMETRES Numro de la ressource. DESCRIPTION Libre les structures de donnes utilises par le gestionnaire de ressources. Cette requte

    est effectue automatiquement la fin d'une application.

    ERREUR FATALE M Ressource non cre. VOIR AUSSI r_cree, r_wait, r_signal

    r_wait ACTION Rserve une ressource. SYNTAXE void r_wait( RESSOURCE nr );; PARAMETRES Numro de la ressource. DESCRIPTION r_wait rserve une ressource. Si la ressource est occupe, la tche ayant effectue la

    requte est place dans une file d'attente jusqu' la libration de celle-ci. Si la ressource est attribue la tche, elle devient la proprit exclusive de la tche et elle seule peut la librer par r_signal. Une tche matrielle ne doit pas effectuer cette requte.

    ERREUR FATALE M Ressource non cre. VOIR AUSSI r_cree, r_close, r_signal.

    r_signal ACTION Libre une ressource. SYNTAXE void r_signal( RESSOURCE nr ); PARAMETRES Numro de la ressource.

  • Mtr86 Win32 rvision 2.1 Page -28-

    Liste des requtes par catgorie

    DESCRIPTION Le gestionnaire libre la ressource nr accapare avec r_wait. Si d'autres tches sont en attente de cette ressource, le gestionnaire l'attribue la tche suivante en attente de cette ressource.

    ERREUR FATALE M Tche non propritaire de la ressource. VOIR AUSSI r_cree, r_close, r_wait.

    5.8. Gestionnaire de smaphores s_cree, s_creeEx, s_openEx ACTION Cr un smaphore ordinaire (s_cree) ,

    Cr un smaphore utilisable entre processus. Ouvre un smaphore dj cre entre processus.

    SYNTAXE HANDLE s_cree ( DWORD valeurInit ); HANDLE s_creeEx ( DWORD valeurInit, DWORD MaxCount, char* szNom );

    HANDLE s_openEx ( char* szNom ); PARAMETRES Valeur initiale du smaphore (0).

    Valeur maximale du smaphore ( 1 et valeurInit). Nom attribu au smaphore (max 32 caractres) ou NULL si le smaphore est utilis dans le mme processus.

    VAL. RENVOYEE handle du smaphore cr ou NULL. DESCRIPTION s_cree, cr et initialise un smaphore. Lors de la destruction de tches utilisant les

    smaphores, il est indispensable que la tche fournissant le signal de destruction effectue d'abord la requte s_wait avec le smaphore considr. Dans le cas gnral il vaut mieux dtruire toutes les tches associes au smaphore, puis recrer le smaphore et ractiver les tches. s_creeEx, cr et initialise un smaphore qui peut tre utilis entre plusieurs processus. Chaque processus voulant utiliser le mme smaphore fait appel a s_creeEx en lui attribuant le mme nom, puis utilise le handle retourn dans les primitives de synchronisation. Le premier processus faisant appel s_creeEx cre le smaphore, les processus suivants ouvrent le smaphore de mme nom dj cre. s_openEx, ouvre le smaphore cre par s_creeEx (mme nom). Une utilisation possible de cette requte est de dterminer si une instance de processus et dj active (voir exemple tubeIPC).

    VOIR AUSSI s_cree, s_close, s_wait, s_signal.

    s_close ACTION Dtruit un smaphore. SYNTAXE void s_close( HANDLE sem ); PARAMETRES Numro du smaphore. DESCRIPTION Cette requte permet de rcuprer un smaphore. VOIR AUSSI s_cree, s_wait, s_signal. EXEMPLE s_close ( sem )

    s_wait ACTION ralise l'opration P(s). SYNTAXE unsigned s_wait( HANDLE s, unsigned timeout ); PARAMETRES Numro du smaphore

    Timeout=0 attente de dure indtermine. Timeout 0 attente borne de tic timeout.

    VAL. RENVOYEE OK si opration P(s) russie, TIM si dpassement du temps imparti.

  • Mtr86 Win32 rvision 2.1 Page -29-

    Liste des requtes par catgorie

    DESCRIPTION s_wait effectue l'opration P(s) sur le smaphore s. Si le smaphore est < 0, la tche ayant effectue la requte est place dans la file d'attente du smaphore considr. Dans le cas ou la tche se bloque, timeout permet de spcifier la dure maximale d'attente en nombre de quantum. Algorithme de principe de la primitive s_wait(sem): P(sem): sem := sem - 1 si sem < 0 alors bloquer la tche courante et la placer dans la file d'attente du smaphore is

    ERREUR FATALE M Smaphore non cr. VOIR AUSSI s_cree, s_close, s_signal. EXEMPLE Voir les exemples e2, e14

    s_signal ACTION ralise l'opration V(s) SYNTAXE void s_signal( HANDLE sem );

    void s_signalEx( HANDLE sem, unsigned val ); PARAMETRES Handle du smaphore.

    Valeur ajouter au smaphore. DESCRIPTION s_wait effectue l'opration V(s) sur le smaphore s. Si le smaphore est gal 0 la tche

    en tte de la file d'attente est attribue au processeur. Algorithme de principe de la primitive s_signal(sem): V(sem) : sem := sem + 1 si sem

  • Mtr86 Win32 rvision 2.1 Page -30-

    Liste des requtes par catgorie

    VOIR AUSSI fct_disable. EXEMPLE fct_enable(CTRL_BREAK_EVENT);

    5.10. Accs aux ports E/S sous Windows NT OpenPort ACTION Ouvre une plage de port E/S SYNTAXE HANDLE OpenPort (char* szDev); PARAMETRES Nom du priphrique : Port1..Port5 prcd de \\.\ DESCRIPTION OpenPort retourne un handle vers le pilote de priphrique en mode noyau permettant

    daccder aux adresses entres-sorties spcifies par le pilote concern (voir installation). Le pilote doit tre install et tre dans l'tat dmarr (voir installation des pilotes E/S).

    VAL. RETOURNEE Handle du port ou 1 si pilote non charg EXEMPLE hPort1 = OpenPort("\\\\.\\port1");

    InPortb, InPortw, InPortdw ACTION Lit un port E/S SYNTAXE BYTE InPortb ( HANDLE hPort, DWORD dwOffset );

    WORD InPortw ( HANDLE hPort, DWORD dwOffset ); DWORD InPortdw ( HANDLE hPort, DWORD dwOffset) ;

    PARAMETRES handle du pilote retourn par OpenPort adresse relative par rapport ladresse de base prcise dans le pilote (voir installation).

    VAL. RETOURNEE Valeur lue ladresse E/S spcifie.

    OutPortb, OutPortw, OutPortdw ACTION Ecrit un port E/S SYNTAXE void OutPortb ( HANDLE hPort, DWORD dwOffset, DWORD dwData);

    void OutPortw ( HANDLE hPort, DWORD dwOffset, DWORD dwData); void OutPortdw( HANDLE hPort, DWORD dwOffset, DWORD dwData);

    PARAMETRES handle du pilote retourn par OpenPort adresse relative par rapport ladresse de base prcise dans le pilote (voir installation). Valeur crire ladresse E/S spcifie par la valeur relative dwOffset.

    ClosePort ACTION Ferme une plage de port E/S SYNTAXE void ClosePort (HANDLE hPort); PARAMETRES handle du pilote retourn par OpenPort

  • Mtr86 Win32 rvision 2.1 Page -31-

    Liste des requtes par catgorie

    6. EXEMPLES FOURNIS Les exemples illustrant l'utilisation des requtes sont fournis dans le rpertoire exemples et traitent les thmes suivant : e0 : cration dinstance multiples de tches.

    e32 : exemple de rsolution du problme des lecteurs et rdacteurs.

    e4 : synchronisations par vnements, utilisation des groupes d'vnements.

    e5 : mise en uvre des primitives d'activation par passation de messages.

    e6 : communication par tubes.

    e7 : cration de tches rythmes.

    e8 : exclusion mutuelle l'aide du gestionnaire de ressources.

    e11 : synchronisation par rendez-vous.

    e14 : lment de solution du dner des philosophes (utilisation des smaphores pour la synchronisation

    et l'exclusion mutuelle).

    e17 : exemple de cration d'instances multiples d'une mme tche.

    priorite : exemple Mtr86Win32 de type GUI mettant en vidence les mcanismes dordonnancement des

    tches en entre tches et entre processus.

    tubeIPC : exemple en code C++ de type GUI mettant en uvre lchange de donnes entre deux processus

    l'aide de tubes.

    d_tic : mise en vidence de l'inflence de la rsolution de l'horloge sur la prcision des temporisations.

    t_com : valuation du temps de commutation.

  • Mtr86 Win32 noyau objet -32-

    Ecriture des applications

    6. MTR86 OBJET 6.1. Prsentation de Mtr86 Win32 noyau objet Mtr86 Win32 noyau objet encapsule les primitives de Mtr86Win32 et possde des caractristiques similaires Mtr86Win32. Mtr86 Win32 objet est fourni sous forme de librairie dynamique et de pilote de priphrique en mode noyau (NT). Les librairies dynamiques : Mtr86WOM.dll ( Visual C6 ) et Mtr86WOI.dll (Borland 5.X, Inprise Builder C++) sont copis dans le rpertoire systme de windows. Diffrences avec Mtr86Win32 Bien que conu de faon trs diffrente de Mtr86Win32, Mtr86Objt reste trs semblable son homologue mais prsente dans l'ensemble plus d'efficacit en particulier grce l'utilisation de la STL dans le gestion des listes. Les diffrences essentielles concernent les primitives suivantes :

    Primitive Version Objet Version non Objet send Envoie un message (256 octets) vers une

    tche sans activer celle-ci. La rception du message se fait par receive.

    (m_send). Envoie un message la tche et l'active. Le message est reu en tant que paramtre de tche.

    fc_xxx Non implment. Utiliser SetConsoleCtrlHandler de l'api Win32

    Gre les CTRL BREAK

    num_tache Non implment. Retourne le numro de la tche tache_id Retourne un identificateur unique de tche Retourne le numro de la tche 1..n thread_id Non implment. Fourni le handle dune tche partir de son

    numro

    6.2. Installation et configuration de Mtr86 Win32 Objet Voir installation de Mtr86Win32, ajouter au projet les librairies dimportation Mtr86WOM.Lib (Visual C++) et Mtr86WOI.lib (Borland). Linstallation copie toutes les DLL dans le rpertoire Windows. Utiliser les mmes options du lieur ( utiliser la RTL dynamique) que pour Mtr86W32. 6.3. Constitution de Mtr86 Win32 Objet Mtr86Win32 objet est constitu de 10 classes :

    Classe Description

    Tache Classe virtuelle pure servant de classe de base toutes les tches. Toutes les taches doivent hriter de cette classe et doivent surcharger la fonction virtuelle pure void main(void*)

    TacheRythmee Classe virtuelle pure servant de classe de base toutes les tches rythmes. Toutes les tches rythmes doivent hriter de cette classe et doivent surcharger la fonction virtuelle pure : void main(DWORD* dwIntervalle)

    Monitor Classe permettant de crer des objets dexclusion mutuelle l'intrieur d'un mme processus.

    Mutex Classe permettant de crer des objets dexclusion mutuelle l'intrieur d'un mme processus et entre processus diffrents.

    Semaphore Classe permettant de crer des objets smaphores lintrieur dun mme processus.

    RendezVous Classe permettant de crer des objets de synchronisation lintrieur dun mme processus et entre processus diffrents.

    Evenement Classe permettant de crer des objets de synchronisation lintrieur dun mme processus.

    Pipe Classe permettant de crer des objets utilisant le modle producteur consommateur lintrieur dun mme processus.

    PipeEx Classe permettant de crer des objets utilisant le modle producteur consommateur tendus aux processus.

    Port Classe permettant de crer des objets accdant aux ports E/S (Windows NT).

  • Mtr86 Win32 noyau objet -33-

    Ecriture des applications

    6.4. Description des classes Constantes

    Priorit des tches Description

    priorite_normale Priorit de base. Variations possibles de 2..2

    priorite_minimale Priorit minimale.

    priorite_maximale Priorit maximale.

    Priorit processus Description

    classe_priorite_temps_reel Classe priorit temps rel. Priorit suprieure celle du systme dexploitation. Sous NT, toute attente active avec ce niveau de priorit bloque le systme dexploitation.

    classe_priorite_haute Priorit un cran au dessus de la classe normale.

    classe_priorite_normale Priorit par dfaut.

    classe_priorite_basse Priorit minimale du processus

    6.5. Constructeurs de copie et constructeurs par dfaut Toutes les classes ont un constructeur de copie prive non dfini. Par consquent toute copie dobjet Mtr86 est impossible

    Toutes les classes dfinissent un constructeur par dfaut. Ce constructeur est indispensable pour agrger les objets. Certains constructeurs par dfaut produisent des objets inutilisables tels quels . La classe dfinit alors une mthode de construction cree.

    Constructeurs par dfaut Description

    Tache Cre un objet Tache valide, de priorit normale et non activ.

    TacheRythmee Crer un objet TacheRytmee incomplet. Doit tre utilis avec cree.

    Monitor Crer un objet monitor valide.

    Mutex Crer un objet Mutex valide. Si celui-ci ne doit uniquement tre instanci sans tre cre, driver une classe appelant le constructeur Mutex(NO_CREATE)(voir exemple PipeInterProcess).

    Semaphore Cre un objet Semaphore incomplet. Doit tre utilis conjointement avec cree.

    RendezVous Cre un objet RendezVous incomplet. Doit tre utilis conjointement avec init.

    Evenement Cre un objet Evenement valide.

    Pipe Cre un objet Pipe incomplet. Doit tre utilis conjointement avec open

    PipeEx Cre un objet PipeEx incomplet. Doit tre utilis conjointement avec openEx

    Port Cre un objet Pipe incomplet. Doit tre utilis conjointement avec open

  • Mtr86 Win32 noyau objet -34-

    Ecriture des applications

    Classe Tache

    Types dfinis Description Valeurs

    RUNNING Utilis comme paramtre de constructeur WAIT : cration sans activation RUN : cration suivi d'activation

    WAIT_RESULT Type de valeur retourne par les primitives effectuant une attente borne temporelle (dort, wait, ...).

    OK : tche relance par un signal de rveil. TIM : tche relance au bout du temps spcifi.

    Membres non statiques Description Exemples

    Tache() Constructeur par dfaut. Cre une tche de priorit normale avec une taille de pile par dfaut. La tche nest pas active.

    tous

    Tache(int priorite) Cre une tche de priorit spcifie. La tche nest pas active. e11, e17,

    Tache(int priorite, RUNNING running)

    Cre une tche de priorit spcifie avec possibilit d'activation immdiate (running==RUN, compteur de suspension = 0) ou diffre (running==WAIT, compteur de suspension = 1).

    e11, e17,

    Tache(int priorite, RUNNING running, void* param)

    Cre une tche de priorit spcifie avec possibilit d'activation immdiate( running==RUN) ou diffre (running==WAIT) et de passation dun paramtre la tche (voir exemple e17.cpp).

    e17, e32, philo

    Tache(int priorite, RUNNING running, void* param, unsigned pile)

    Cre une tche de priorit spcifie avec possibilit d'activation immdiate( running==RUN) ou diffre (running==WAIT), de passation dun paramtre la tche (voir exemple e17.cpp) et de spcification de taille de pile (minimum 4K).

    tous

    void cree() Mmes paramtres que le constructeur Tache. Cette requte est utilise pour crer une tche aprs suppression de celle-ci.

    e19

    void active() Active la tache rfrence. Les signaux dactivation sont mmoriss. Chaque activation dcrmente le compteur de suspension de la tche. Lorsque celui-ci arrive 0, la tche est effectivement active.

    DWORD suspend() Incrmente le compteur de suspension (voir active). Suspend la tache rfrence quand le compteur passe de 0 1. Une tche suspendue peut tre relance par active. Retourne 0xFFFFFFFF en cas derreur.

    PipeInterP.., priorite

    HANDLE handle() Retourne lidentificateur systme de la tche.

    DWORD tache_id() Retourne lidentificateur entier de la tche.

    DWORD dort(DWORD ms) Suspend la tche courante pour ms * 10-3 secondes. La valeur 0 correspond une suspension de dure indtermine. Se diffrencie de suspend par le fait que les signaux ne sont pas mmoriss. Retourne TIM ou OK si la tche a reu un signal de rveil.

    e19,

    void reveille() Relance une tche suspendue par dort

    int priorite() Retourne la priorit de la tache courante.

  • Mtr86 Win32 noyau objet -35-

    Ecriture des applications

    void supprime() Fait passer une tche ltat non cre. e19

    BOOL fixe_priorite( int priorite )

    Fixe la priorit dune tche. Retourne 0 en cas dchec. priorite

    void send(const void* buff) Envoie un message une tche. Attention, la tche doit avoir t instancie. La taille maximale du message est de 256 octets.

    e19, e19_0

    void receive(void* buf) Rceptionne un message dune tche. Attention, la tche doit avoir t instancie. Prvoir un tampon de 256 octets ( taille du message).

    e19, e19_0

    Membres statiques Description ( description plus complte plus haut ) Exemples

    void active(Tache& t) Active la tache t. tous

    DWORD suspend(Tache& t) Suspend la tache t. Celle ci est relance par active. PipeInterP.., priorite

    void reveille(Tache& t) Relance la tache t endormie par dort.

    void supprime(Tache& t) Fait passer la tache t ltat non cre. e19

    BOOL fixe_priorite(Tache& t, int priorite )

    Fixe la priorit la tache t. priorite

    void send(Tache& t, const void* buff)

    Envoie un message une tche. Attention, la tche doit avoir t instancie. La taille maximale du message est de 256 octets.

    e19

    HANDLE tache_c() Retourne lidentificateur de la tche courante.

    Membres statiques Membres statiques nutilisant pas dobjet tache Exemples

    DWORD d_tic(DWORD tic) Permet de modifier la rsolution de l'horloge pour l