Présentation du noyau
de Windows NT
Version 1.0
06 février 2014
Présentation du noyau de Windows NT
Figure 1 – Capture d’écran de Windows NT 3.51
1 Présentation
Windows NT est un système d’exploitation à destination des stations de travail et des serveurs. Son
développement a commencé en 1989 et la première version est sortie en 1993. C’est un système d’ex-
ploitation portable et qui existe selon les versions pour des plate-formes 32-bits et 64-bits (Intel x86,
PowerPC, MIPS, DEC Alpha, AMD64, Itanium et ARM). Il a été inspiré par DOS et Windows pour
l’interface utilisateur et par VMS pour certains composants du noyau.
Depuis sa sortie, 4 versions majeures de Windows NT se sont succédées :
NT 3.x avec NT 3.1 (1993), NT 3.50 et NT 3.51 (1995) ; voir fig. 1.
NT 4.0 (1996) et NT 4.0 Terminal Server (1998).
NT 5.x avec Windows 2000 (NT 5.0, 2000), Windows XP (NT 5.1, 2001), Windows 2003 (NT 5.2,
2003).
NT 6.x avec Windows Vista et Server 2008 (NT 6.0, 2007), Windows 7 et Server 2008R2 (NT 6.1,
2009), Windows 8 et Server 2012 (NT 6.2, 2012) et Windows 8.1 et Server 2012R2 (NT 6.3, 2013).
Jusqu’en 2002 avec l’arrivée de Windows XP, les systèmes Windows NT cohabitaient avec les systèmes
Windows “classiques” tels que Windows 98. Ces systèmes non-NT, bien que partageant la même interface
graphique et la même API pour les programmes, fonctionnent très différemment ; ils sont basés sur MS-
DOS, n’ont aucune notion de sécurité et sont peu fiables. Windows Millenium Edition sorti en 2000 a
été le dernier système de cette lignée, principalement destinée à une utilisation familiale.
2 Architecture générale
2.1 Vue d’ensemble
La figure 2 présente une vue générale de l’architecture de Windows 7 (NT 6.1). Sur ce schéma les
composants à fond gris font partie du système d’exploitation alors que les composants à fond blanc
proviennent de l’extérieur. Tous ces composants seront détaillés dans les sections suivantes. Les noms en
italique correspondent aux noms des fichiers qui contiennent le code relatif au composant.
2 / 17
Présentation du noyau de Windows NT
Ring 3
Ring 0
ntoskrnl.exe
hal.dll Couche d’abstraction matérielle (HAL)
Matériel
win32k.sys
USER
GDI
Driver vidéo
Sockets
afd.sys
TCP/IP
tcpip.sys
NDIS
ndis.sys
Drv réseau
Syst de
fichiers
ntfs.sys
fastfat.sys
Driver 3
Driver 4
Driver 1
Driver 2
Cache
Plug’n’Play
Power man
I/O manager
Executive
Kernel
Process manager
Virtual memory man
Config man (registre)
ALPC (com inter-proc)
SRM (sécurité)
Object manager
API native
ntdll.dll
Appel système (int 2Eh/sysenter/syscall)
user32.dll gdi32.dll
kernel32.dll
advapi32.dll
VDM
ntvdm.exe
Applis DOS
Applications Win32
psxdll.dll
Applis POSIX
Figure 2 – Architecture de Windows NT 6.x
3 / 17
Présentation du noyau de Windows NT
Préfixe Composant Description
Nt et Zw Appels systèmes (fonctions de haut niveau)
Rtl Runtime Library Fonctions auxiliaires telles qu’une implémentation spéci-
fique de la bibliothèque standard C
Ex Executive Fonctions de haut niveau agissant sur des structures du
système ou faisant appel à une couche inférieure
Ke et Ki Kernel Fonctions du noyau bas niveau, souvent spécifiques au type
de processeur (gestion des interruptions, scheduler. . .)
Io Input / Output Manager Gestionnaire des entrées/sorties, gérant les lectures/écri-
tures en communiquant avec les pilotes de périphériques
Se Security Reference Monitor Gestionnaire de sécurité gérant les listes de contrôle d’ac-
cès, les jetons d’accès, vérifiant que l’accès à un objet est
autorisé et enregistrant les tentatives d’accès
Mm Memory Manager Gestionnaire de mémoire virtuelle affectant des pages au
système et aux processus
Cm Configuration Manager Gestionnaire de la base de registre (base de donnée conte-
nant de nombreux paramètres liés aussi bien au système ou
aux périphériques qu’aux applications)
Cc Cache Manager À la frontière de Io et Mm, gère la mise en cache des fichiers
des disques
Ob Object Manager Gestionnaire d’objets gérant l’arborescence des objets (dont
les fichiers) et les handles
Ps Process Manager Gestionnaire des processus
Alpc Advanced Local Procedure Call Ports de communication inter-processus utilisés par le sys-
tème
Table 1 – Principaux composants du noyau NT
Le fichier ntoskrnl.exe contient le noyau de Windows NT. On trouvera dans le tableau 1 la liste des
principaux composants du noyau avec leur description et le préfixe de nom de fonction correspondant.
Le fichier win32k.sys contient le “noyau graphique”, c’est-à-dire le gestionnaire de fenêtrage.
Dans le mode utilisateur, le fichier ntdll.dll est une librairie (DLL pour Dynamic Link Library)
qui contient tous les appels systèmes non graphiques ; l’ensemble de ces appels systèmes s’appelle l’API
native ; les rares programmes fonctionnant uniquement avec la librarie ntdll.dll sont dits natifs. Il
existe plusieurs sous-systèmes qui fonctionnent par-dessus ntdll :
Le sous-système Win32 constitué de nombreuses DLL (kernel32.dll,user32.dll,gdi32.dll,
advapi32.dll en sont les principales) dont les fonctions constituent l’API Win32. Il permet
l’exécution des applications Windows, fenêtrées ou console. La VDM (Virtual Dos Machine),
uniquement présente dans les versions 32-bits de Windows, permet d’émuler une machine 16-bits
et d’exécuter des applications MS-DOS et Windows 16-bits.
Le sous-système POSIX, non installé par défaut, offre une émulation des appels systèmes Unix
(librairie psxdll.dll) et permet d’utiliser des applications provenant du monde Unix en facilitant
leur portage pour Windows.
Le sous-système OS/2, qui a disparu après Windows 2000, permettait d’exécuter des applications
en mode texte prévues pour IBM OS/2.
2.2 Segmentation et pagination
Les systèmes d’exploitation modernes utilisent des fonctionnalités offertes par les processeurs pour
assurer la fiabilité de l’ordinateur en empêchant les programmes de “faire n’importe quoi”. Nous nous
concentrerons sur les processeurs Intel x86. Dans ces processeurs, deux principaux mécanismes existent
et sont souvent utilisés conjointement :
la segmentation, apparue avec la famille de processeurs 286 ;
la pagination, ou “mémoire virtuelle”, apparue avec la famille 386.
4 / 17
Présentation du noyau de Windows NT
2.2.1 La segmentation, les niveaux de privilèges et les appels systèmes
À l’origine la segmentation était un mécanisme qui permettait de découper la mémoire vive en “seg-
ments” de taille variable et d’affecter ces segments aux différentes tâches (programmes) pour empêcher
une tâche d’accéder à la mémoire affectée à une autre tâche. Les systèmes modernes dont NT utilisent
plutôt la pagination pour cela. Par contre la segmentation reste utilisée pour ses niveaux de privilèges.
Un niveau de privilège, dans les processeurs x86, est une valeur nommée Ring comprise entre 0 et 3
affectée à chaque segment et indiquant quelles instructions le code s’exécutant dans ce segment aura le
droit d’effectuer. La plupart des systèmes comme NT ou Linux utilisent seulement deux niveaux (IBM
OS/2 en utilise 3). On a alors :
Le Ring 0, aussi appelé mode noyau (kernel) ou superviseur (supervisor) est utilisé par le noyau
du système d’exploitation et les pilotes de périphériques. Un programme s’exécutant en ring 0
peut utiliser toutes les instructions fournies par le processeur.
Le Ring 3, aussi appelé mode utilisateur (user) est utilisé pour exécuter les applications. Un
programme s’exécutant en ring 3 ne peut accéder à certains registres du processeur, ne peut
exécuter certaines instructions et ne peut accéder aux ports d’entrée/sortie.
Comme on peut le voir sur la figure 2, les applications fonctionnant en Ring 3 ne peuvent accéder au
matériel. Elles doivent donc faire appel au noyau du système pour toute opération impliquant le matériel
(lire un fichier, accéder au réseau, afficher quelque chose à l’écran. . .). Pour cela elles effectuent des appels
systèmes au moyen de l’interruption 0x2E, ou dans les systèmes plus modernes le couple d’instructions
sysenter/sysexit ou syscall/sysret. L’utilisation de ces instructions provoque l’exécution d’une fonction
du noyau appelée KiSystemService qui se chargera d’appeler la fonction demandée dans le noyau.
Il existe une liste faisant correspondre chaque appel système à un numéro, numéro qui est chargé dans
un registre avant l’appel. Sous Windows NT, les noms des appels systèmes commencent tous par le préfixe
Nt. Il existe dans Windows 7 environ 400 appels systèmes généralistes (par exemple NtReadFile pour
lire dans un fichier ou encore NtQuerySystemInformation pour demander des informations sur l’état du
système) et environ 800 appels systèmes relatifs à l’interface graphique (comme NtUserCreateWindowEx
pour créer une fenêtre ou NtGdiLineTo pour tracer une ligne droite à l’écran ou sur une imprimante).
En effet sous Windows toute la gestion de l’interface graphique (système de fenêtrage) a lieu en mode
noyau.
Si on observe la liste des fonctions appelées lors de la lecture d’un fichier par le programme cmd
(figure 3), on observe que la fonction ReadFile de KernelBase.dll utilise l’appel système NtReadFile
et que l’on passe du mode utilisateur (icône Ubleue) au mode noyau (icône Krose).
2.2.2 La pagination
Dans cette section, on se concentrera sur les processeurs x86 ; les principes présentés restent valables
pour les processeurs AMD64, seules les valeurs diffèrent.
La pagination, ou mémoire virtuelle, permet de faire abstraction de la mémoire vive réelle et de
présenter à chaque processus un espace d’adressage de 4 Go. Chaque processus “croit” être le seul à
s’exécuter ; dans ses 4 Go de mémoire virtuelle, il ne voit que ses données et son code. Le processeur se
charge automatiquement de traduire les adresses mémoire virtuelles en adresses physiques.
Sous Windows, les 4 Go sont coupés en deux. Les deux giga-octets inférieurs (adresses de 0x0 à
0x7FFFFFFF) sont spécifiques au processus et librement accessibles par lui et le noyau. Les deux giga-
octets supérieurs (adresses de 0x80000000 à0xFFFFFFFF) pointent vers les mêmes données quelque-soit
le processus ; ils s’agit de données uniquement accessibles depuis le mode noyau et contenant tout le code
et les données du noyau et des drivers.
Les deux giga-octets réservés au noyau et aux drivers sont composés entre autres de deux zones dans
lesquelles il est possible d’allouer de la mémoire :
le paged pool est une zone dont certaines pages peuvent être déchargées de la mémoire (stockées
dans le fichier swap) ; cette zone est donc à privilégier si possible ;
le nonpaged pool dont les pages restent toujours résidentes en mémoire; à utiliser si on doit accéder
aux données à un IRQL élevé (voir plus bas).
5 / 17
1 / 17 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !