Ce document présente l'architecture générale de Windows NT4. Nous verrons dans un premier temps rapidement le cahier des charges auquel il devait répondre, puis nous étudierons un peu plus en détail les modules qui constituent ce système d'exploitation. Je me suis efforcé de traduire tous les termes anglais en français, je spécifierai toutefois leur véritables noms, c'est plus pratique pour faire des recherches si on veut approfondir le sujet. Sur le menu de droite, vous pouvez télécharger une présentation sur le sujet au format PPT, au cas où vous auriez à faire une présentation vous aussi... La présentation à le même plan que ce document, c'est quand même bien fait !

1. Le cahier des charges

Le cahier des charges se résume en six critères principaux et évidents, auxquels tout tout système d'exploitation moderne devrait répondre :

2. L'architecture générale en quelques mots

Le système d'exploitation Windows NT est très objet. Chaque entité, physique ou virtuelle, est représentée; comme un objet dans le système. Le coeur du système d'exploitation lui-même est divisé en objets, ce qui en fait un système d'exploitation modulaire. L'avantage de la méthode objet, quand certaines règles sont bien appliquées, est que chaque objet est indépendant. Un objet n'a aucune connaissance de comment sont constitués les autres. La seule chose qu'il connaisse des autres objets est leur interface. C'est uniquement à travers des interfaces que les objets vont dialoguer entre eux, ce qui assure, avec des interfaces bien définies, un bon fonctionnement d'ensemble. Si par hasard un problème survenait, ce serait une bogue dans le code de l'un des objets ou une mauvaise définition des interfaces. Une autre règle en programmation objet est d'avoir un couplage faible, c'est à dire que les interfaces ne doivent pas être trop grosses et qu'un objet ne devrait pas avoir à connaître trop d'objets. Ce dernier critère devient difficile à respecter dans le développement d'un système d'exploitation. En effet, tous les objets du système ont besoin des services des autres, un couplage fort est donc inévitable. Windows NT n'y a pas échappé. En résumé, Windows NT n'est pas un système d'exploitation monolithique, mais c'est tout comme (d'accord, j'exagère).

Windows NT, comme tout système d'exploitation moderne, est préemptif et multitâches. Préemptif signifie qu'il est capable de faire tourner sur le microprocesseur plusieurs processus (programmes) en concurrence. C'est le système d'exploitation qui va se charger de remplacer un processus en cours d'exécution par un autre (changement de contexte...).

Windows NT est multi-processeurs, il peut gérer 4 processeurs, et même jusqu'à 32 avec un développement spécifique des constructeurs.

Windows NT est basé sur une architecture client-serveur. Le système est un ensemble d'objets. Certains sont propres au système, d'autres sont des objets "utilisateur". Quand un objet demande un service à un autre, il joue le rôle de client. Le fournisseur de service joue le rôle du serveur.

Un adressage 32 bits permet à Windows NT d'allouer 4 Go d'espace mémoire (virtuel) pour chaque processus.

Windows NT supporte plusieurs systèmes de fichier, la MS-DOS FAT (File Allocation Table), HPFS (High Performance File System), le système de fichier pour le CD-Rom, NTFS (NT File System). Pour le système Win32, je crois qu'il faut ajouter un petit programme. Pourtant c'est aussi du Microsoft, eh oui. A croire que ce système de fichier soit mauvais, et qu'il risquerait de rendre Windows NT instable.

Les langages de programmation C et C++ ont été principalement utilisés pour le développement de Windows NT.

Les services réseau sont intégrés au système d'exploitation (normal, c'est un NOS : Network Operating System, Système d'exploitation réseau).

3. Structure détaillée de l'architecture Windows NT

Windows NT fonctionne dans deux mode différents, le mode noyau et le mode utilisateur.
La stabilité de Windows NT est assurée grâce à ces deux modes. Le mode noyau est le coeur du système d'exploitation, la partie la plus petite possible, la plus optimisée et sans aucune bogue. Tout ce qui tourne en mode utilisateur est controlé par les programmes du mode noyau et ne peut donc pas faire planter le système, en théorie.

Sur l'image qui suit, la séparation entre les deux modes est matérialisée par une ligne horizontale en pointillés :



La suite de ce document va se baser sur cette représentation de l'architecture NT. Si vous voulez avoir cette image à porté de souris, cliquez dessus, elle vous en fera une copie dans un coin.

Tout ce qui apparaît en vert, c'est à dire, tout ce qui est en mode noyau, sauf le matériel, s'appelle le NT Executive. Il regroupe le noyau, la HAL et les services systèmes. Les services systèmes sont tous les modules tournant en mode noyau, autour du noyau (ne pas confondre noyau et mode noyau) : le I/O Manager, l'Object Manager, le Security Ressource Manager, le Process Manager, le LPC, le Virtual Memory Manager et le Graphic Manager. Sur l'image, les services systèmes sont représentés comme une surcouche, c'est en fait la vision que tout programme tournant en mode utilisateur a du système d'exploitation. Les programmes vont faire appel aux services système via des API appelées "Native API". Il ne vont pas s'adresser directement à tel ou tel service.
Détaillons un peu le rôle de chacune de ces boites noires...

3.1. HAL

HAL pour Hadware Abstraction Layer, ou en français, Couche d'Abstraction Matérielle. C'est grâce à cette couche que Windows NT est portable sur plusieurs types de machines. Son rôle est de masquer complètement la partie matérielle au système d'exploitation lui-même. Tout matériel va être représenté virtuellement au système d'exploitation. Le système d'exploitation va utiliser le matériel via une interface unique, sans se soucier du matériel. C'est à la couche d'abstraction matérielle de traduire les demandes au système physique. A un type de machine correspond une couche HAL spécifique. Grâce à cette couche, Windows NT peut tourner sur plusieurs types de microprocesseurs : Intel, MIPS, PowerPC, Alpha.
C'est encore la couche HAL qui gère les systèmes multi-processeurs, en intégrant l'interface SMP (Symmetric Multi Processing). La couche HAL est différente suivant le nombre de processeurs dans le système.
La couche HAL représente chaque processeur comme un processeur virtuel au noyau. Le noyau, on le verra plus tard, dispatchera ses tâches sur ces différents processeurs. Que ce soient des processeurs Alpha, Intel ou autre, le noyau voit toujours des processeurs virtuels. La couche HAL n'est accessible que par le NT Executive. Pour accéder au matériel, les programmes utilisateurs sont donc obligés de passer par les
Native APIs (enfin presque).

3.2. Le noyau

Le noyau est aussi appelé micro-noyau ou Kernel pour les anglicistes. Son principal rôle est de planifier les thread sur les différents processeurs virtuels, en fonction de leur priorité. Il va préempter les processus qui n'auront pas rendu d'eux-mêmes la main après le quantum de temps (slice) attribué. Il traite toutes les interruptions système. Il traite les exceptions processeurs (divisions par zéro, ou des choses que le processeur s'interdit lui-même de faire). Le noyau est aussi un programme. Un noyau tourne sur chaque processeur. Le noyau ne peut être préempté et ne peut donc pas non plus être swappé (swappé signifie que le code d'exécution est transféré de la mémoire vive vers le disque pour récupérer un peu de mémoire ; il sera replacé en mémoire quand on en aura besoin).
Les parties critiques du noyau sont écrites en assembleur.
Tout ce que le noyau ne fait pas est fait par les services du NT Executive.

3.3. Les services du NT Executive

Les services du NT Executive tournent aussi en mode noyau. Ce sont donc des parties importantes, indispensables au système d'exploitation. Leur rôle est de fournir les services de base aux sous-systèmes d'environnement.



Détaillons le rôle de chacun :

4. Les Sous-systèmes d'environnement

Tous les sous-systèmes d'environnement tournent en mode utilisateur. Ils sont au nombre de trois : Win32, POSIX et OS/2. Leur rôle est d'offrir aux applications un environnement d'exécution. Le sous-environnement natif de Windows NT est Win32. Les deux autres ont étés rajoutés pour que Windows NT se dise compatible. Windows NT sait dans quel sous-environnement faire tourner une application grâce à l'entête du fichier.

5. Les VDM, Virtual DOS Machines

Windows NT propose deux types de Machine Virtuelle DOS (VDM) : une VDM MS-DOS et une VDM Win16. Elles sont là pour que Windows NT supporte les anciennes applications DOS et Windows 16 bits. Elles reconstituent donc l'environnement adéquate pour ces applications. Toutefois, elles ne sont pas considérées comme des sous-systèmes d'environnement parce-qu'elles tournent (ce sont des programmes) dans le sous-environnement Win32. Ces deux VDM ont certaines différences :

6. Bibliographie

Voici les principales références sur lesquelles je me suis appuyé pour rédiger cette présentation. Vous pourrez y trouver un complément d'information.


Je remercie leurs auteurs et ceux qui m'ont aidé à écrire ce document
N'hésitez pas à m'envoyer vos remarques : jducharl@m6net.fr