La chronique de Ben


Comment fonctionne un programme sous Windows?

Dans ce premier texte, je vais tenter d'expliquer aussi simplement que possible le fonctionnement des applications qui tournent sous Windows. J'ai choisi Windows parce que plus utilisé, mais cette démarche reste tout aussi valable pour d'autres gestionnaires de fenêtres comme Mac OS ou OS2. Ensemble, nous allons disséquer différents aspects des programmes et tenter de comprendre comment ils interagissent avec le gestionnaire de fenêtres. Que les pros de l'informatique passent leur chemin, cet article s'adresse avant tout aux débutants.

La forme de programmation la plus connue et la plus évidente est la forme séquentielle, qui consiste à placer des instructions à la suite les unes des autres afin que le processeur les traite dans l'ordre. On pourrait imaginer par exemple un programme très simple qui afficherait « Bonjour » à l'écran et qui serait constitué des instructions « écrire 'B' », « écrire 'o' », écrire 'n' » et ainsi de suite. La programmation est enrichie par des instructions qui permettent de se placer à un autre endroit de la séquence ainsi que d'instructions conditionnelles, l'ensemble permet notamment de faire des boucles. Imaginons un autre programme qui aurait pour but d'écrire les nombres allant de 1 à 10, on pourrait bien entendu reprendre le même système que précédemment « écrire '1' », « écrire '2' » et ainsi de suite mais cela ne serait pas très pratique. Grâce aux boucles il est possible d' écrire « la variable i vaut 1, tant que i est inférieure à 11 écris i et augmente i de 1 » ce qui aura le même effet.

Voilà qui permet d'expliquer les programmes les plus simples, pour les plus complexes il s'agit en fait de répétitions et d'imbrications de ces structures, une boucle peut contenir des branchements conditionnels, des autres boucles et ainsi de suite. Mais avec ces quelques indications il paraît encore difficile d'expliquer comment il est possible de faire tourner une dizaine de programmes en même temps sur votre machine, en particulier si elle ne possède qu'un seul processeur. Dans un ordinateur, qu'il comporte un ou plusieurs processeurs, chaque processeur exécute sa propre séquence d' instructions. Il peut donc y avoir autant de programmes exécutés au même moment que de processeurs. Pourtant de notre point de vue, notre PC monoprocesseur exécute souvent plusieurs programmes à la fois. Sur une machine puissante on peut sans problème lancer Excel, Word, Outlook et l' Internet explorer, ou d'autres programmes qui fonctionneront en même temps. Sans compter le système d'exploitation lui-même, qui continue d'effectuer ses petits travaux (gestion de la mémoire, connexion Internet, affichage, etc..). C'est justement le système d'exploitation qui gère notre problème grâce à ce que l'on appelle le « multitâche ». Il s'agit du partage du processeur entre les différents programmes. Le système d'exploitation permet à un programme d'utiliser le processeur pendant un certain temps, après quoi il permet à un autre programme de continuer et ainsi de suite. Comme ce temps est largement inférieur à la seconde, il nous semble que tous les programmes soient exécutés simultanément.

Nous comprenons maintenant le principe de base de la programmation et pourquoi plusieurs programmes peuvent sembler être exécutés au même moment. Il reste cependant un problème, comment un programme sait il que je viens de cliquer dans sa fenêtre, et comment Word sait il que la touche que je viens de presser devait lui parvenir et pas à Outlook ou à Excel ? La réponse est simple, c'est Windows qui les prévient. Windows gère la souris, le clavier et tous les périphériques en général. Lorsque l'on clique, Windows regarde si la souris est dans la zone fenêtrée d'un programme et le prévient le cas échéant. Le programme reçoit le message de Windows, qui lui dit « l' utilisateur à cliqué à tel endroit » et réagit en fonction de cela. Ce n'est plus de la programmation séquentielle classique mais ce qu'on appelle de la programmation événementielle. Chaque événement (click de souris, touche du clavier, agrandissement et fermeture d'une fenêtre, etc..) est analysé par Windows et peut donner lieu à un ou plusieurs messages auquel le ou les programmes concernés réagiront. Les programmes sont en fait constitués d'une grande boucle d'analyse de message du type « si c'est un clic je fais ça, si c'est une touche je fais ça, etc. ».

Une autre caractéristique des programmes qui tournent sous Windows est qu' ils se ressemblent très fort. Par exemple la boite de dialogue qui permet de charger ou sauver un document est presque toujours identique quelque soit le programme. Ce n'est pas un hasard, en fait Windows permet de faire appel a ce genre de dialogue au travers des « DLL » systèmes (DLL pour dynamic link library, ou bibliothèque à liaison dynamique, en gros ce sont des collections de fonctions que les programmes peuvent réutiliser sans qu'elles fassent partie de leur code). Windows permet aussi l'utilisation de divers périphériques, notamment au travers de DirectX pour les cartes graphiques et sonores, ce qui permet de programmer sans se soucier de la configuration matérielle de l'utilisateur. Même si la carte graphique est différente, le programme s'exécutera de la même façon (excepté du point de vue des performance qui dépends de la qualité de la carte en question).

En résumé, on peut donc considérer une application Windows comme un programme événementiel exécuté dans un environnement multitâche qui propose une interface simplifiée vers les périphériques.

Pour tout commentaire, Benoit Fries
© Ben (Benoit Fries) 2000.