Microsoft Windows NT en 5 leçons

Partie 1 _ Un peu d'histoire et de théorie

Leçon 1 Leçon 2 Leçon 3 Leçon 4 Leçon 5

eric@netline.be

Parce qu'il porte l'étiquette Windows, trop de gens imaginent Windows NT comme un simple Windows 95 un peu gonflé disposant d'un espace adressable 32 bits, d'une meilleure gestion multitâches et d'une meilleure conception de la sécurité. Non, Windows NT ne vise pas le même marché que son petit frère Windows. NT ne cible pas le monde des applications bureautiques personnelles. NT veut toucher le domaine des systèmes d'informations d'entreprises, d'Internet, les environnements client/serveur, les stations à traitement graphique ou numérique intensif, les serveurs d'applications réseau, bref le haut du panier. L'objectif n'est pas uniquement de grapiller des parts du marché de Windows 95 mais d'attaquer de front OS/2, Netware et Unix, d'attirer à lui les utilisateurs de Sun, AS/400, VAX et autres RS/6000. L'idée n'est pas neuve: il s'agit de faire éclater encore davantage le monde des mainframes et de le morceler en plusieurs serveurs tous voués à la cause de NT.

Dès la parution de la version 1.0 de OS/2 en 1987, Microsoft s'est attelé à une nouvelle tâche ambitieuse: créer un système d'exploitation digne des années 90. Fin 1988, Bill Gates débauche chez Digital Equipment Corporation le fameux Dave Cutler, auteur remarqué du système VAX/VMS et de plusieurs compilateurs pour les stations DEC. Dave Cutler se voit confier les rênes d'un projet baptisé à l'époque 'NT OS/2', ou 'OS/2 3.0' ou encore 'Portable OS/2'. A l'époque, rappelez-vous, IBM et Microsoft travaillent encore main dans la main sur la version 1.2 d'OS/2, les deux sociétés proposant leur propre version du produit. Mais les deux compagnies n'arrivent pas à se mettre d'accord sur l'architecture de la version 2 d'OS/2. IBM voudrait qu'OS/2 2.0 fonctionne sur un simple processeur Intel 286 tandis que Microsoft, plus fonceur ou plus visionnaire, sait déjà que le 286, qui passe encore difficilement du mode protégé au mode réel, est une voie sans issue et que seul le prochain Intel 386 sera à même de faire tourner un système d'exploitation digne de ce nom. Un compromis à la Belge s'établit entre les deux firmes dinosaures : IBM se consacrera à la version 2.0 d'OS/2 pendant que Microsoft travaille déjà sur la version 3.0 baptisé du doux nom de NT OS/2 - NT signifiant New Technology et non Ninja Turtles ou Not There comme l'ont rebaptisé les opposants.

Ce n'est qu'en 1990, année de tous les succès pour Windows 3.0, que Microsoft rue dans les brancards. Les développeurs Microsoft se plaignent de la qualité du code généré par leurs collègues d'IBM, ils se rebellent contre un OS/2 qu'ils critiquent pour sa lourdeur, sa gourmandise et sa dépendance par rapport au processeur 286. C'est la guerre ouverte entre IBM et Microsoft qui renoncent à leur collaboration et se retrouvent frères ennemis. C'est en 1990 donc que le projet NT est débaptisé et acquiert son nom définitif de 'Microsoft Windows NT'.

En août 1991, Steve Ballmer, à l'époque vice-président de Microsoft, inaugure la grosse artillerie commerciale qui sera une part indéniable du succès de Windows NT. Steve lançait deux paris devant la presse . Premier pari , il mangerait une disquette si IBM arrivait à publier OS/2 2.0 en 1991 comme cela avait été annoncé. Deuxième pari , Microsoft sortirait en 1992 un nouveau système d'exploitation appelé Windows NT, système dont les premières versions tests quitteraient les locaux de Microsoft dès fin 1991. Au grand soulagement de son estomac, Ballmer a remporté son premier pari même si la première version de NT ( appelée non 1.0 mais 3.1 pour coïncider avec la numérotation Windows ) n'est finalement sortie qu'en 1993, la première bêta ayant vu le jour en août 1992.

Le cahier de charges NT tel qu'il a été arrêté pour sa première versions met principalement l'accent sur les points suivants :

Conception révolutionnaire

NT est un système d'exploitation modulaire, conçu comme une série de couches indépendantes et inspiré du système Mach développé par la Carnegie-Mellon University. Entièrement écrit en C pour des raisons de portabilité, NT repose sur une architecture 32-bit. Ses 32 bits confèrent à NT un adressage mémoire linéaire de maximum 4 GB. Ses 3 millions de lignes de code sont le fruit d'un mariage, quelque peu hors nature, entre Windows, l'interface graphique hérité des ordinateurs personnels et des fonctionnalités originaires du monde des 'minis'. David Cutler dit de son système d'exploitation qu'il n'est pas vraiment un système micro-kernel mais plutôt un OS client/serveur. Ici, le terme de serveur est appliqué à tout sous-système qui fournit des services à d'autres sous-systèmes, celui de client est associé à tout programme faisant appel à un de ces services. NT a été conçu pour remédier aux limitations d'OS comme Dos ou Windows qui ne sont ni sûrs, ni portables. L'architecture client/serveur de Windows NT fait qu'aucune application n'a le droit d'accéder directement au hardware ou à des portions sensibles du système d'exploitation. Tous ces accès sont contrôlés par la couche executive de NT. Tous les systèmes d'exploitation disposent d'un noyau ou kernel comprenant un jeu de fonctions minimum qui doivent rester en mémoire. Dans le DOS par exemple, le kernel est constitué du BIOS ( Basic Input/Output System), du BDOS ( Basic Disk Operating System). Sous Windows NT, le noyau est en fait un microkernel qui comprend les seuls services qui doivent absolument rester en mémoire. Il a été désigné pour être aussi petit que possible. Le microkernel est même si petit que, dans le cas d'une machine multiprocesseurs, une copie du micronoyau est exécutée sur chaque CPU. C'est ce qui permet à Windows NT d'être un véritable OS à symmetric multiprocessing. Les seuls autres OS SMP sont le Mach de Carnegie-Mellon, le Dynix de Sequent et le Solaris de Sun.

Portabilité

Prévu pour les PC traditionnels à base de processeurs INTEL 80386 ou 80486, NT vise aussi le créneau des ordinateurs équipés de processeurs RISC R4000 de la firme MIPS. Ces processeurs à jeu réduit d'instructions ont été sélectionnés comme pièce maîtresse du nouveau standard ACE/ARC édicté par Microsoft, Compaq, Digital et consorts. Digital a aussi manifesté son attachement à Windows NT qui équipe en standard ses nouvelles stations de travail dotées du processeur RISC et 64-bit ALPHA. Le processeur Power PC est supporté depuis la version 3.51 de NT. Le concept de portabilité ayant un peu passé de mode, le processeur MIPS est abandonné depuis belle lurette et le portage Power PC sera abandonné dans NT 5.0. Lors du portage vers un nouveau processeur, seul le noyau, ou 'micro-kernel', d'une cinquantaine de KB est à réécrire pour tirer parti des spécifités du nouvel environnement. Pour rendre NT disponible sur un nouveau type de machine, son concepteur doit simplement réécrire un HAL (Hardware Abstraction Layer) spécifique, disposer d'un compilateur C compatible avec celui de Microsoft, obtenir les sources de Microsoft et les recompiler pour cette nouvelle architecture. Cette portabilité n'a pas que des avantages. Pour fonctionner sur différentes machines, une application doit être compilée plusieurs fois mais il n'est pas rare qu'une compagnie ne développe et maintienne qu'une seule version Intel de son programme. Ensuite, il y a une perte de performance importante lorsqu'on fait tourner des applications Dos ou Windows 16 bits sur d'autres processeurs que celui d'Intel. Enfin, il n'est pas possible avec cette philosophie portable d'optimiser certaines portions du code en assembleur, le langage C n'offrant pas une optimisation idéale pour certaines tâches intensives.

Pour garantir l'universalité de NT, Microsoft s'est donc lancé dans la grande aventure des systèmes d'exploitation portables. Comme SunSoft, comme SCO, comme USL, comme l'alliance IBM/Apple, Microsoft s'est mis à développer un système d'exploitation qui est conçu pour différents processeurs, qu'ils soient RISC ou CISC. NT entend briser la dépendance qui lie un système d'exploitation à un processeur, à un bus de données ou à des particularités matérielles. Solaris, OpenDesktop, Taligent, USL SVR4 et NT jettent leur dévolu sur ces nouveaux processeurs qui ont pour nom Sparc, Alpha, MIPS R4000 ou Power PC. Tous visent ainsi deux objectifs: se soustraire à l'hégémonie d'Intel et veiller à leur pérennité. Cette préoccupation de portabilité débouche sur une nouvelle philosophie de la programmation: mémoires, périphériques de stockage, écran, outils de saisie ne sont plus traités comme des pièces de hardware mais comme des abstractions, des métaphores. Le système d'exploitation interagit virtuellement avec le hardware, passe moins de temps à surveiller ce qui se passe "en dessous" et se préoccupe davantage du "dessus" : la couche applicative. Du coup, les systèmes d'exploitation deviennent plus ambitieux et s'intéressent à de nouveaux domaines : interface GUI intégrée, multi-threading, architecture multiprocesseurs, environnement distribué, sécurité, connectivité intégrée. NT n'a perdu de vue aucune de ces nouvelles opportunités.

NT, comme tous les systèmes d'exploitation portables, nous oblige à revoir complètement la façon de concevoir un programme. Plus question d'attaquer directement un port série, d'écrire directement dans la zone mémoire d'une carte graphique, plus question bref de "bidouiller" pour améliorer les performances d'un programme. L'encapsulation des objets, la répartition de Win32 en plusieurs couches et sous-systèmes obligent le programmeur à utiliser exclusivement les fonctions API mises à sa disposition au détriment parfois de la vitesse d'exécution. Sur le terrain des télécommunications par exemple, à force d'opérer sur des ports séries virtuels en respectant la philosophie de Win32, il est très difficile pour un programme d'atteindre des taux de transfert qui sont pourtant monnaie courante sur une machine MS-DOS. Seuls des processeurs très rapides et des machines regorgeant de mémoire sont à même de compenser les dégradations de performance provoquées par ce nouveau niveau d'abstraction. Aujourd'hui, Windows NT ne s'utilise avec confort que sur des stations équipées au minimum de Pentium et de 64 MB de RAM.

Sécurité

Les concepts de sécurité et de protection des données de Windows NT ont été largement inspirées des directives et recommandations émises par le National Computer Security System du Département Américain de la Défense. NT répond au niveau de sécurité C2. A ce niveau, un contrôle d'accès discrétionnaire est spécifié par le créateur d'un objet. Il y détermine quels sont les utilisateurs ou groupes d'utilisateurs qui ont l'autorisation d'utiliser cet objet. Un autre mécanisme de sécurité s'assure que les données résiduelles sont complètement effacées de la mémoire et des disques lorsqu'elles ne sont plus indispensables ou lorsqu'elles sont assignées à un nouvel utilisateur. Chaque démarrage d'une station de travail passe par une procédure d'identification de l'utilisateur qui garantit aux données leur confidentialité. Une nouvelle gestion des fichiers, appelée NTFS, fournit à NT un nombre impressionnant de mécanismes pour la tolérance de fautes : disques en miroir et/ou en duplex, système de récupération des données etc.

Le modèle de sécurité de Windows NT est basé sur le concept d'objet. Un objet sécurité peut représenter n'importe quelle ressource système : un fichier, un périphérique, un programme, un utilisateur. Chaque objet transporte sa propre information sur ce qu'il lui est permis de faire ou non.

Multi Processeurs

NT a été conçu pour supporter plusieurs processeurs à la fois au sein d'une seule et unique machine. Il ne s'agit pas d'une rudimentaire gestion asymétrique des processeurs où un processeur graphique, par exemple, délivre le processeur central d'une série de tâches accessoires. Il s'agit ici d'une véritable gestion symétrique de processeurs identiques où chaque processeur gère une sous-tâche,ou 'thread', particulière. L'ajout d'un processeur débouche sur une augmentation linéaire des performances. NT peut gérer jusqu'à trente processeurs dans une seule machine.

Compatibilité

Au dessus de la couche responsable de l'interaction avec le hardware, Windows NT peut accueillir toute une série d'autres couches, appelées sous-systèmes, d'autres personnalités qui assurent la compatibilité avec d'autres systèmes d'exploitation. Les applications Windows NT en mode 32-bit cotoient, sans le moindre heurt, des programmes MS-DOS, des programmes Windows 16-bit, des applications OS/2 1.3 en mode caractère et même des logiciels conformes aux normes POSIX. Pour reprendre l'expression consacrée par IBM, Windows NT est lui aussi un meilleur Windows que Windows puisque chaque programme dispose de son propre espace mémoire et est incapable de bloquer le système ou de corrompre les données provenant d'autres applications. Mieux encore, il est possible d'échanger des données entre ces programmes hétéroclites via le presse-papier, de simples pipes ou les mécanismes DDE et OLE. Seules les applications Dos, Windows et OS/2 1.x correctement écrites pourront tourner dans l'environnement NT. Ces applications ne pourront pas, par exemple, faire des accès de bas niveau au contrôleur du disque dur, écrire directement sur le port série, attaquer la mémoire de la carte graphique. Ce genre de comportement est régulièrement utilisé par les programmeurs MS-DOS pour accélérer certaines tâches qui seraient trop lentes si elles étaient gérées uniquement par l'API du BIOS. Les applications Windows 16 bits faisant appel à des fonctions non-documentées ou à des pilotes de périphérique propriétaires n'auront pas plus de chances de fonctionner sous NT

Réseau

Tout simple mais efficace: NT permet le partage des imprimantes et des fichiers logés sur des disques durs locaux avec d'autres utilisateurs du réseau. Pour le travail en groupe, un système de courrier électronique est disponible en standard. Pour les utilisateurs plus exigeants, NT s'est plié au standard Distributed Computing Equipment ( DCE ) émis par l'Open Systems Foundation. Grâce au DCE, NT se connecte et interagit sans problèmes avec des serveurs Unix, VMS ou autres. Les supports IPX, NETBIOS et TCP/IP sont bien entendu présents. Microsoft collabore avec Digital, Novell et Banyan pour mettre sur pied un nouvelle norme, baptisée Windows Open Systems Architecture, qui s'efforce de standardiser les services réseaux tels que partage d'imprimante, courrier électronique, administration du système, accès aux bases de données, le tout dans un environnement multi-vendeurs.

Préemptivité

Depuis l'apparition de l'Intel 386, l'utilisation simultanée de plusieurs tâches est devenue possible. Windows 3.x est un système multitâche mais de type coopératif. Cela signifie que toutes les applications se partagent une seule queue de messages et que chaque application a la responsabilité de passer la main aux autres tâches. Si une application ne prend pas soin de rendre la main aux autres, si elle se perd dans une boucle de longue durée ou contient un bug qui l'empêche de se comporter correctement, l'ensemble des autres tâches n'a plus accès au temps CPU. Dans un système multitâche préemptif, c'est le système d'exploitation lui-même qui, via le Task Scheduler, détermine quelle application prend le contrôle du processeur en fonction de niveaux de priorité. C'est ce même Task Scheduler qui distribue le temps CPU entre toutes les tâches. Cela signifie que, même en cas d'applications errantes ou buggées, les autres tâches peuvent reprendre le contrôle du CPU sans un fatal Ctrl-Alt-Del. L'application qui tourne en avant-plan a toujours une priorité un peu plus élevée et les Entrées/Sorties en temps réel ( la saisie au clavier par exemple) ont toujours une priorité maximale.

Chaque tâche dispose de son propre espace mémoire privé . Il est désormais impossible pour une application mal écrite d'écraser involontairement des données appartenant au système ou à d'autres programmes. La principale vulnérabilité du Dos et de Windows 3.0 est donc contournée. La sécurité des données est renforcée par la gestion mémoire de WIN32 qui permet à chaque application de déterminer les permissions d'accès en lecture et écriture de ses différents composants.

Un thread est un processus qui peut être activé ou désactivé par le Task Scheduler sans la surcharge de travail causée par le démarrage et la terminaison d'une complète application. Un thread hérite des ressources de l'application parente. Si un programme de traitement de texte est découpé en threads, cela signifie qu'un correcteur orthographique peut être activé pendant qu'un autre thread se charge de l'impression en tâche de fond et un autre de la correction orthographique.

Chaque programme a à sa disposition un espace mémoire adressable linéaire de 2 GB découpé en pages de 4 KB. Ces pages peuvent être chargées et déchargées de la mémoire, placées sur disque par le memory manager via une procédure appelée page fault. Chaque fois qu'une application tente d'accéder à une page qui n'est pas physiquement présente en mémoire, une page fault est générée. L'executive de NT se charge alors de la charger en mémoire en déchargeant éventuellement de la mémoire des pages qui n'ont plus été utilisées depuis longtemps pour faire de la place à la nouvelle application. Le memory manager fournit un mécanisme de protection de la mémoire empêchant une application de manipuler un espace mémoire qui appartient à une autre application.

Glossaire

API
Application Program Interface. Un ensemble de fonctions disponibles pour invoquer les services d'un logiciel

BIOS
Basic Input Output System - Système de base de gestion des entrées/sorties

CISC
Complex Instruction Set Computing - Architecture à jeu d'instructions complexe

DDE
Dynamic Data Exchange

DOD
Department Of Defense - Département de la Défense

DOS
Disk Operating System - Système d'Exploitation Disque

FAT
File Allocation Table - Table d'Allocation de Fichiers

GUI
Graphical User Interface - Interface Graphique Utilisateur

IPX/SPX
Il s’agit d’un protocole conçu par Novell pour son réseau NetWare. Il signifie Internetwork Packet Exchange/Sequential Packet Exchange et s'inspire des protocoles conçus par Xerox pour son Xerow Networking System

LAN
Local Area Network. Réseau local

NETBEUI
NetBEUI signifie NetBIOS Extended User Interface. Il s’agit d’un protocole inventé par IBM en 1985. A l’époque, l’idée était qu’un réseau LAN devait être segmenté en groupes de travail de 20 à 200 ordinateurs et que des passerelles devaient être utilisées pour connecter ces segments ou groupes entre eux.

NTFS
NT File System : système de gestion de fichiers baptisé NTFS incluant de nouveaux attributs de sécurité plus la tolérance de fautes

RISC
Reduced Instruction Set Computer - Ordinateur à jeu d'instructions réduit