Introduction

 

 

Remarque: Ce qui suit ne peut fonctionner qu'avec des programmes 32 bits à partir de WindowsSouvent associé au système d'exploitation de Microsoft pour les PC compatibles. Initialiement, un simple gestionnaire de fenêtres fonctionnant sous DOS. Windows ou au singulier Window peut aussi représenter une fenêtre (traduction du mot anglais Window !) dans d'autres gestionnaires de fenêtres pour d'autres systèmes d'exploitation. Window peut aussi représenter la touche Windows sur un clavier pour PC compatible (il y a deux touchent "window": Entre Ctrl et Alt à gauche du clavier ou entre Alt Gr Ctrl à droite par exemple). 95. Et vous allez comprendre pourquoi...

Ca y est, WindowsSouvent associé au système d'exploitation de Microsoft pour les PC compatibles. Initialiement, un simple gestionnaire de fenêtres fonctionnant sous DOS. Windows ou au singulier Window peut aussi représenter une fenêtre (traduction du mot anglais Window !) dans d'autres gestionnaires de fenêtres pour d'autres systèmes d'exploitation. Window peut aussi représenter la touche Windows sur un clavier pour PC compatible (il y a deux touchent "window": Entre Ctrl et Alt à gauche du clavier ou entre Alt Gr Ctrl à droite par exemple). est un système en temps partagé. Pour gérer tout cela, le système utilise le thread. Un thread : C'est la plus petite unité d'exécution dans WindowsSouvent associé au système d'exploitation de Microsoft pour les PC compatibles. Initialiement, un simple gestionnaire de fenêtres fonctionnant sous DOS. Windows ou au singulier Window peut aussi représenter une fenêtre (traduction du mot anglais Window !) dans d'autres gestionnaires de fenêtres pour d'autres systèmes d'exploitation. Window peut aussi représenter la touche Windows sur un clavier pour PC compatible (il y a deux touchent "window": Entre Ctrl et Alt à gauche du clavier ou entre Alt Gr Ctrl à droite par exemple).. Le temps d'exécution est découpé en tranches ou quantum ou quotas (time slice). Lorsqu'un thread en exécution a épuisé son slot de temps, qu'il est fini ou non ses traitements en cours, il sera remis (préempté) dans une queue d'élection dans l'attente d'être choisi à nouveau par le sheduler (répartiteur). C'est le multi tâche préemptif contrairement aux windowsSouvent associé au système d'exploitation de Microsoft pour les PC compatibles. Initialiement, un simple gestionnaire de fenêtres fonctionnant sous DOS. Windows ou au singulier Window peut aussi représenter une fenêtre (traduction du mot anglais Window !) dans d'autres gestionnaires de fenêtres pour d'autres systèmes d'exploitation. Window peut aussi représenter la touche Windows sur un clavier pour PC compatible (il y a deux touchent "window": Entre Ctrl et Alt à gauche du clavier ou entre Alt Gr Ctrl à droite par exemple). 16 bits qui eux ne sont pas préemptés, c'est à dire que lorsque le système donne la main à une application, il ne sait pas quand il la récupérera !

Une application donne ainsi l'impression de tourner seule sur l'ordinateur ce qui est vrai, mais pendant de très courte période. Mais voilà, je parle d'application maintenant, mais c'est quoi une application au juste ?

Voici un schéma:

 

Application

Process 1

Thread 1-1 Thread 1-2 Thread 1-3

 

Process 2

Thread 2-1 Thread 2-2 Thread 2-3 Thread 2-4 Thread 2-5

 

 

 

Process 3

Thread 3-1

 

Cela se complique un peu diront-on ?

Le process(us) est en fait un fichier exécutable chargé en mémoire. Il possède donc:

o Un ou plusieurs threads.
o Evidemment le code et les données...
o Un espace d'adressage virtuel privé.

Une application est alors un ensemble de processus coopérant.

Le Thread : Il n'appartient qu' a un seul process et ne peut utilisé que les ressources du process

Il possède un contexte thread avec :

o Un compteur d'instructions,
o Un environnement, une pile en mode utilisateur et une pile en mode noyau.
o Un ensemble de valeurs pour les registres (état des registres de l'UC)
o Une zone privée de données

WindowsSouvent associé au système d'exploitation de Microsoft pour les PC compatibles. Initialiement, un simple gestionnaire de fenêtres fonctionnant sous DOS. Windows ou au singulier Window peut aussi représenter une fenêtre (traduction du mot anglais Window !) dans d'autres gestionnaires de fenêtres pour d'autres systèmes d'exploitation. Window peut aussi représenter la touche Windows sur un clavier pour PC compatible (il y a deux touchent "window": Entre Ctrl et Alt à gauche du clavier ou entre Alt Gr Ctrl à droite par exemple). va créer par défaut un thread (c'est le thread primaire) par processus lancés. Le système donne la main à un thread et non un processus. Ce thread a alors la possibilité d'utiliser le microprocesseur et tout ce qu'il veut (enfin dans certaines limites quand même). Il sera ensuite automatiquement interrompu par le système lorsque sont quotas de temps sera passé. Un thread ne sera détruit que lorsque le processus sera terminée.

Vous allez me dire: "Oui, c'est bien beau, que l'on appelle cela thread ou processus, cela revient au même !". Et bien non !!! En effet, rien ne nous empêche d'allouer plusieurs thread pour le même processus. Ils se partagerons alors tout entre eux. Plusieurs codes de notre application peuvent alors tourner "simultanément", mieux encore, le même code peut être exécuté plusieurs fois "simultanément". C'est le multithreading.

Tout de suite quelques remarques:

Le fait d'avoir plusieurs threads qui tournent pour la même application n'accèlera généralement pour autant notre application. L'un des cas où il pourrait y avoir accélération serait le cas où il y aurait autant de microprocesseur que de thread. Généralement nous n'avons qu'un microprocessuer et donc les applications tournent tous sur le même microprocesseur. Or l'unité de temps du microprocesseur ne changeant pas. Plus il y a de thread, plus court sera le temps alloué aux threads. De même, il y a un programme au niveau du système nommé le sheduler qui s'occupe de la gestion de ces threads. Avant de donner la main à un thread, il doit tout d'abord pour ce thread remettre l'ordinateur dans l'état où il en était précédement. Cela prend forcement du temps. Enfin, les threads peuvent avoir des priorités d'exécution.Par exemple, le traitement de données en provenance d'un lecteur de CD-ROM est URGENT, alors que votre traitement de calcul lui ne l'est pas...Le thread traitant le CD-ROM sera donc prioritaire est pourra alors être exécuté plus souvent que le notre (C'est ce qui fait que votre machine semble brusquement ralentir ou carrément se bloquer !).

Il y a quelques règles à respecter: N'oubliez pas que les threads d'un même processus se partagent (presque) tout, il ne faut donc pas faire certaines opérations qui risqueraient de faire "planter" votre processus. Par exemple par des modifications de compteurs...ou encore des modification de pointeurs qu'ils soient des variables ou encore des pointeurs de fichier. Imaginez qu'un thread veuille lire le début d'un fichier et qu'un autre lire la fin, si les deux threads changent sans arrêt le pointeur de fichier, les résultats risquent d'être catastrophiques ! Il va donc falloir coordonner tout cela, mais heureusement, il y a des méthodes qui le permettent, les mutex par exemple...