Faculté des Sciences Département d'informatique. IFT628, groupe 01 Système d'exploitation II. Projet de session Étude de cas WinXP et Linux



Documents pareils
6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Partie 7 : Gestion de la mémoire

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

Installation d un poste i. Partage et Portage & permissions NTFS

Système de Gestion de Fichiers

Systèmes d Exploitation - ENSIN6U3. Aix-Marseille Université

DAns un système multi-utilisateurs à temps partagé, plusieurs processus

Chapitre 3 : Système de gestion de fichiers

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

<Insert Picture Here> Solaris pour la base de donnés Oracle

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

1. Systèmes d entrée/sortie 2. Systèmes de fichiers 3. Structure de mémoire de masse (disques)

Encryptions, compression et partitionnement des données

Gestion de mémoire secondaire F. Boyer, Laboratoire Sardes

Manuel de System Monitor

Structure fonctionnelle d un SGBD

Gestion des sauvegardes

Microsoft Virtual Server, trucs et astuces avancés

Windows Internet Name Service (WINS)

Ne laissez pas le stockage cloud pénaliser votre retour sur investissement

Cours de Système : Gestion de Fichiers

«clustering» et «load balancing» avec Zope et ZEO

Créer et partager des fichiers

Gestion répartie de données - 1

SYSTÈME DE GESTION DE FICHIERS

Le Network File System de Sun (NFS)

Introduction à LDAP et à Active Directory Étude de cas... 37

VMware ESX/ESXi. 1. Les composants d ESX. VMware ESX4 est le cœur de l infrastructure vsphere 4.

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Démarrer et quitter... 13

Technologie de déduplication de Barracuda Backup. Livre blanc

Ordinateur Logiciel Mémoire. Entrées/sorties Périphériques. Suite d'instructions permettant de réaliser une ou plusieurs tâche(s), de résoudre un

Systèmes d Exploitation - ENSIN6U3. Aix-Marseille Université

Guide d'installation et de configuration de Pervasive.SQL 7 dans un environnement réseau Microsoft Windows NT

Tsoft et Groupe Eyrolles, 2005, ISBN :

Comment configurer Kubuntu

Exécutif temps réel Pierre-Yves Duval (cppm)

TP redondance DHCP. Gillard Frédéric Page 1/17. Vue d ensemble du basculement DHCP

Oracle Maximum Availability Architecture

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Cours A7 : Temps Réel

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

La mémoire. Un ordinateur. L'octet. Le bit

Administration de Parc Informatique TP07 : Installation de Linux Debian

Métriques de performance pour les algorithmes et programmes parallèles

4D v11 SQL Release 5 (11.5) ADDENDUM

Système de stockage IBM XIV Storage System Description technique

Chapitre 3. Sécurité des Objets

IDEC. Windows Server. Installation, configuration, gestion et dépannage

Commandes Linux. Gestion des fichiers et des répertoires. Gestion des droits. Gestion des imprimantes. Formation Use-IT

La Continuité d Activité

Ordonnancement temps réel

Administration Centrale : Opérations

A -Systèmes de fichiers 1 - FAT vs NTFS

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Lutter contre les virus et les attaques... 15

Windows Server Chapitre 1: Découvrir Windows Server 2008

LES SYSTÈMES DE FICHIERS

FAMILLE EMC VPLEX. Disponibilité continue et mobilité des données dans et entre les datacenters AVANTAGES

Guide de l administrateur CorpoBack

LIVRE BLANC Pratiques recommandées pour l utilisation de Diskeeper sur les réseaux SAN (Storage Area Networks)

THEME 1 : L ORDINATEUR ET SON ENVIRONNEMENT. Objectifs

Windows 2000: W2K: Architecture. Introduction. W2K: amélioration du noyau. Gamme windows W2K pro: configuration.

Livre blanc. Au cœur de Diskeeper 2010 avec IntelliWrite

IV- Comment fonctionne un ordinateur?

Mise en oeuvre TSM 6.1

SGM. Master S.T.S. mention informatique, première année. Isabelle Puaut. Septembre Université de Rennes I - IRISA

L annuaire et le Service DNS

_ PARAMETRE DU COMPTE _ ACCEUIL. 1 ere Etape «Créer un compte principal» Créer un compte secondaire. Ouvrir un compte principal

Concept de machine virtuelle

Introduction aux SGBDR

FAMILLE EMC VPLEX. Disponibilité continue et mobilité des données dans et entre les datacenters

Fonctionnalités d Acronis :

PARAGON Disk Wiper. Guide de l utilisateur. Paragon Technology GmbH, System Programmierung. Copyright Paragon Technology GmbH

VMWare Infrastructure 3

Organiser le disque dur Dossiers Fichiers

KoinKoin. Système d exploitation à architecture basée micro-noyau. Antoine Castaing Nicolas Clermont Damien Laniel

Virtualisation CITRIX, MICROSOFT, VMWARE OLIVIER D.

Clients et agents Symantec NetBackup 7

IFT Systèmes d exploitation - TP n 1-20%

Leçon 1 : Les principaux composants d un ordinateur

Le Ro le Hyper V Troisie me Partie Haute disponibilite des machines virtuelles

EX4C Systèmes d exploitation. Séance 14 Structure des stockages de masse

Sauvegarde et restauration de données

Acronis True Image 10 Home Edition

La haute disponibilité

FAMILLE EMC RECOVERPOINT

Windows XP niveau 2. D. Hourquin, Médiapôle St Ouen l'aumône

CH.3 SYSTÈMES D'EXPLOITATION

Sécurisation de Windows NT 4.0. et Windows 2000

Sommaire. 3. Les grands principes de GFS L architecture L accès de fichier en lecture L accès de fichier en écriture Bilan

Dynamic Computing Services solution de backup. White Paper Stefan Ruckstuhl

Le stockage. 1. Architecture de stockage disponible. a. Stockage local ou centralisé. b. Différences entre les architectures

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

M1101a Cours 4. Réseaux IP, Travail à distance. Département Informatique IUT2, UPMF 2014/2015

Cloud public d Ikoula Documentation de prise en main 2.0

Services Réseaux - Couche Application. TODARO Cédric

Les méthodes de sauvegarde en environnement virtuel

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

Transcription:

Système d'exploitation II Étude de cas WinXP et Linux Travail remis à : M Gabriel Girard Présenté par : Frédéric Gauthier-Boutin (03 374 734) Stéphane Chouinard (04 462 959) Date de remise : 20 décembre 2006

Table des matières Introduction... 4 Système de fichiers... 5 Windows... 6 Master File Table... 6 Compression... 7 Encryption... 8 Linux... 9 Fichier / i-node... 9 Type de fichiers... 10 Droits d accès... 10 Répertoire... 10 Partition... 11 VFS... 11 / PROC... 11 Tableau comparatif... 12 Mémoire virtuelle... 13 Windows... 13 Organisation de la mémoire... 13 Page Table Entry (PTE)... 15 Large Pages... 15 Prototype Page Table Entry (PPTE)... 15 Allocation de la mémoire... 16 Logical Prefetcher... 17 Linux... 17 Région... 17 Pages... 18 Swap... 19 Planification... 21 Windows... 21 Définitions... 21 Organisation... 21 Cycle de vie d un processus... 23 Les jobs... 24 Les fibres... 24 Thread Pool... 25 États d un thread... 25 Algorithme de planification... 25 Priorités d un thread... 26 Planification multiprocesseurs... 26 Linux... 27 Région... 27 Système préemptif... 27 Files d exécution «Runqueues»... 28 «Load balancer»... 29 Table des matières

Processus en temps réels... 30 Processus classiques... 30 Communication... 31 Windows... 31 Tubes (Pipes)... 31 Tubes anonymes... 31 Tubes nommés... 32 Files de messages (Mailslots)... 32 Mémoire partagée... 33 Linux... 33 Signaux (signals)... 34 Tubes (pipes)... 35 IPC (inter process communication / System V IPC Facilities)... 36 Files de messages (Message queues)... 36 Mémoire partagée (Shared memory)... 37 Sémaphores (System V Semaphore)... 37 Conclusion... 39 Annexes... 39 Annexes... 40 Liste des répertoires principaux et leur rôle... 40 8 états d un cadre sous Windows... 41 Partitions de l espace virtuelle d un processus sous Windows... 41 Liste des signaux Unix/Linux... 42 Références... 43 Table des figures Figure 1 - Gestionnaire système de fichiers sous Windows... 6 Figure 2 - Vue globale de la compression sous NTFS... 8 Figure 3 - Vue globale de l'encryption sous NTFS... 9 Figure 4 - Vue globale VFS... 11 Figure 5 - Organisation de la mémoire et génération d adresse sous Windows... 14 Figure 6 - Table des pages multi-niveaux sous Linux... 19 Figure 7 - Hiérarchie des unités d'exécution sous Windows... 23 Figure 8 - Fin du quantum d un processus sous Linux... 28 Figure 9 - Linux O(1) scheduler algorithm... 29 Figure 10 - "Load balancer" de Linux... 29 Figure 11 - Exemple de tube en Linux... 35 Figure 12 - Exemple de communication avec tube en Linux... 36 Table des matières

Introduction Ce travail constitue le projet du cours IFT628, Système d Exploitation II, et compte pour 35% de la note finale du cours. Il s agit d une étude de cas et d une comparaison implicite de plusieurs caractéristiques des systèmes d exploitation Windows expérience de Microsoft et Linux toutes distributions confondues, comme : Les Systèmes de fichiers ; La planification des tâches ; La mémoire virtuelle ; La communication interprocessus. Il est à noter que nous n avons pas eu la chance de suivre le cours IFT320, Système d Exploitation (I). Il faut donc tenir compte de ce détail étant donné qu il peut sembler au lecteur que nous avons perduré dans des détails qui, pour des non initiés, ne sont pas à négliger surtout en ce qui à trait à la mémoire virtuelle et aux systèmes de fichiers. Page 4 sur 44

Système de fichiers Le système de fichiers est responsable : des mécanismes de sécurisation, de partage, de référence et d enregistrement des fichiers ; de l intégrité des données ; de la conservation des données sur un support de masse non volatile ; de fournir des méthodes d accès aux fichiers ; Etc. Un système de fichier doit être indépendant du matériel, son rôle est d offrir une «couche» entre le matériel et les fichiers à proprement dit. L utilisateur fait appel au système de fichiers pour accéder une ressource sans connaître explicitement son emplacement matériel, via un nom de fichier dit symbolique. Le système de fichiers se charge alors de déterminer l emplacement physique, dit le nom physique (comme le numéro de secteur/bloc et la longueur du segment de données), via une table nommée «répertoire» qui contient les informations de gestion des fichiers comme : le nom logique ; la taille ; l adresse physique ; la date de création ; le type ; Etc. Un tel système de fichiers est appelé hiérarchique, car il regroupe les fichiers selon une structure en arborescence. Comparativement à un système de fichier à niveau simple (arborescence unique), où il ne peut y avoir qu un seul nom de fichier dans tout le système, le système de fichiers hiérarchique permet de créer plusieurs fichiers au même nom logique tant qu ils ne sont pas dans le même répertoire, c est-à-dire au même niveau hiérarchique. Pour éviter les dédoublements inutiles, le système de fichiers offre la possibilité de créer ce qu on appel un lien. Il existe deux(2) types de liens, soit : symbolique («soft link») ou physique («hard link»). Un lien physique pointe vers un nom physique tandis qu un lien symbolique pointe vers un nom logique d un fichier. On peut voir un lien comme étant un fichier qui pointe vers un autre fichier, et ce, récursivement. Ils sont utiles pour faire apparaître un même fichier dans plusieurs répertoires ou sous des noms différents et assurent aussi une forme de cohérence lors des mises à jour. Page 5 sur 44

Windows Sous WinXP, le système de fichiers se situe au deuxième niveau à l intérieur d une hiérarchie de pilotes à trois(3) niveaux. Le premier niveau, le plus bas, est celui des pilotes pour les volumes matériels. Au dessus du pilote du système de fichiers, c est-à-dire au troisième niveau, se retrouve le filtre système qui se charge principalement de la compression, l encryption ainsi que la recherche de virus. Figure 1 - Gestionnaire système de fichiers sous Windows Sous Windows il existe principalement deux(2) pilotes de systèmes de fichiers, soit : FAT et NTFS. Par défaut, WinXP utilise NTFS qui supporte les disques durs à grande capacité, la compression et l encryption. Master File Table NTFS se caractérise principalement par un fichier spécial, le plus important qu il ait, nommé «Master File Table» (MFT). De par son importance, il est aléatoirement dédoublé à plusieurs endroits sur le volume, afin de minimiser les risques de perte. Le MFT contient les informations sur tous les fichiers de son volume, incluant le metadata. Chaque fichier contient minimalement une(1) entrée dans le MFT mais peut en utiliser davantage. Techniquement, la table est constituée d enregistrements d un(1) kilo-octet (ko) chacun. Toute information d un fichier est enregistrée dans un attribut, généralement constitué d un «header» et de sa valeur. Si la taille de la valeur est trop imposante pour résider directement dans la table, NTFS crée un attribut spécial agissant comme pointeurs vers les attributs de la valeur fractionnée. Page 6 sur 44

Les fichiers d une taille inférieure à un (1) ko sont dits «résident», car ils sont directement contenus dans la MFT. À l inverse, le système doit utiliser trois(3) attributs pour situer les segments d un fichier non-résident, soit : le numéro logique de cluster (LCN), la longueur du segment et ainsi que son numéro virtuel de cluster (VNC). Le dernier attribut sert principalement à lier les différents «morceaux» du fichier. NTFS enregistre les répertoires comme des fichiers et chaque entrée dans la MFT contient un attribut nommé «index» qui contient la liste des fichiers (en noms logiques) qu il contient. Les entrées des répertoires sont triées par ordre alphabétique, question de performance lors de recherches. Dans le cas d un répertoire volumineux, un «B-Tree» est utilisé. WinXP permet la création de multiples entrés dans la MFT qui pointent vers le même fichier d un même volume physique et est communément appelé «hard link». Le décompte de tous ces liens est gardé dans un attribut spécial nommé «hard_link». Pour chaque nouveau pointeur, il y a incrémentation de cet attribut et inversement lors de la suppression d un pointeur. Lorsque l attribut atteint zero(0) le fichier est détruit. Finalement, le contenu de chaque fichier réside dans un attribut nommé «default stream». Une même entrées peut avoir plusieurs autres «stream» et sont nommés «alternate data stream». Cela est à la discrétion de l utilisateur. Compression NTFS permet la compression et l encryption des fichiers. La compression est un procédé transparent à l utilisateur, c est-à-dire qu il ne nécessite pas d appels d API spéciaux pour chaque entrée sortie (E/S). Cela est possible, car NTFS effectue ses manipulations justes avant le passage au niveau «Volume Drivers». L algorithme de compression utilisé s appel «Lempel-Ziv» et est celui couramment utilisé par ZIP et GZIP. Contrairement à ce que l on pourrait croire, NTFS n effectue pas l opération de compression sur l ensemble d un fichier en même temps. Il compresse par segment de seize(16) clusters, soit entre deux(2) et quatre(4) ko dépendamment du système. Si le ratio de compression d un segment n est pas significatif, NTFS sauvegarde le segment tel quel, non compressé. Étant donné l achalandage Page 7 sur 44

possible pour plusieurs même segments de fichier, la compression est réalisée par un thread dit «lâche» qui s occupe de compression et d envoyer au premier niveau les segments les moins utilisé. Figure 2 - Vue globale de la compression sous NTFS Encryption Chaque segment d un fichier est encrypté ou non selon l utilisateur et les applications utilisées, c est-à-dire d après les appels API effectués lors des E/S. La décryption est cependant entièrement transparente à l utilisateur dans le sens où elle ne nécessite pas d appels spéciaux. Tous les «stream» d un fichier sont encryptés même si l encryption s effectue par segment, comme la compression. Évidemment, l encryption est impossible pour les fichiers et répertoires systèmes étant donné qu ils sont utilisés par tous les utilisateurs. La méthode d encryption de NTFS est dite à clé «Publique/Privé» et il crée toujours des clés nommées «recovery keys» pour les administrateurs. Les clefs sont enregistrées dans un endroit spécial non paginé en mémoire. Pour des raisons de sécurité, elles ne sont jamais emmagasinées directement sur le volume physique sans être elles même encrypté par une clé dite symétrique. Cette clé symétrique, nommé «master key» est générée aléatoirement. Elle est elle-même encryptée par une autre clé générée par le mot de passe de l utilisateur avant d être emmagasinée. Ce processus est similaire pour les «recovery keys». Il est à noter que le transfert de fichiers accédées à distance via un système de fichiers «remote» situé sur un serveur est non crypté et c est à l utilisateur de se créer un moyen logiciel (comme utiliser SSH). Page 8 sur 44

Figure 3 - Vue globale de l'encryption sous NTFS Linux Le système de fichiers par défaut en linux est généralement «ext2», mais de plus en plus «ext3» qui est un système de fichiers journalisé (comme NTFS). Ce qui implique que le recouvrement des erreurs est automatique à chaque redémarrage de la machine. Linux peut gérer plusieurs systèmes de fichiers différents à l aide du VFS (le système de gestion de fichiers virtuel). La liste est donnée dans le sousrépertoire «/proc/filesystems». Étant donnée que tout est considéré comme un fichier en linux, il faut que tous les systèmes de fichiers peu importe leurs emplacements physiques, soient intégrés dans l unique arborescence de Linux. Fichier / i-node Un fichier physique est identifié par un nom et tout le reste des informations le concernant est emmagasiné dans un descripteur de fichiers appelé «inode». Chaque système de fichiers contient une table d inodes (ou table des descripteurs de fichiers). L inode est une structure inscrite sur le disque qui est allouée lors de la création du fichier et qui comporte un numéro unique pour pouvoir y accéder. Elle contient plusieurs informations sur le fichier dont les suivantes 1 : 1 Elle ne contient pas le nom du fichier qui lui est inscrit dans l inode du répertoire. Page 9 sur 44

Le type de fichier et ses droits d accès ; Le nombre de liens vers d autres fichiers ; La taille du fichier, son nombre de bloc alloués ; Des informations statistiques sur les accès (dernière modification, etc.) ; Une table d adresses des blocs de données Deux(2) listes de contrôle des accès pour le fichier et le répertoire. Normaux Répertoires Type de fichiers Voici une liste des différents types/catégories de fichiers utilisés par Linux : Type Spéciaux (fichiers de périphériques) Liens symboliques Tubes nommés et sockets Droits d accès Description Fichiers contenant les données des utilisateurs. Par exemple, les fichiers textes (source, ) et binaires (exe, image, ). Ils sont sauvegardés comme une suite d octets sur le disque. Les répertoires contiennent une liste de références (pointeurs) vers d autres fichiers. Ils sont situé dans le répertoire «/dev». Ce sont les points d accès aux périphériques créé lors de l opération de montage (mount). Par exemple, le fichier «/dev/hda» permet d accéder au premier disque. Ces fichiers contiennent une seule référence vers un autre fichier Ce sont des outils de communication entre processus. Les droits d accès aux fichiers sont à peu près comme windows, mais il y en a 3 spéciaux : «setuid», «setgid» et «sticky. Les deux premiers permettre de faire exécuter un programme sous l identité du propriétaire ou du groupe à la place de l utilisateur qui est connecté au système. Le dernier interdit l élimination du fichier par un utilisateur autre que le propriétaire. Répertoire Un répertoire est un type de fichier qui contient à son tour une liste de fichiers et les informations nécessaires pour accéder à ceux-ci. Soit ; le numéro d inode, le type de fichier, sont nom, la longueur du nom (max 255) et la longueur de l entrée du répertoire. 2 2 Voir la structure des répertoires en annexe. Page 10 sur 44

Partition Un disque dur peut être séparé en une ou plusieurs partitions contenant ou non un système de fichiers. Une partition est créé à l aide de la fonction de montage «mount». Une Partition est composée d un bloc d amorçage utilisé lors du démarrage et d un ensemble de groupes de blocs contenant des données et une liste d inodes. Chaque groupe contient un vecteur de bits permettant de gérer la liste des blocs libres et un autre pour la liste des inodes vides. Il contient également une copie du «super-bloc» et des descripteurs de groupe de blocs. La réplication des 2 dernières informations permet au système, lors de corruption, de se rétablir et de revenir à un état stable. Une particularité de Linux, est qu il réduit l effet de la fragmentation en utilisant un algorithme pour emmagasiner les fichiers dans des blocs rapprochés d un même groupe ou d un groupe près de lui. VFS Le système de gestion de fichiers virtuel (VFS), qui permet d utiliser de multiples types de systèmes de fichiers, est une couche logicielle insérée dans le noyau de Linux. Elle offre à l utilisateur un modèle de gestion des fichiers commun et un ensemble de primitives permettant de le manipuler. En voici une représentation : Figure 4 - Vue globale VFS / PROC Le système de fichiers /proc supporté par VFS est particulier, car il ne contient pas de données stockées sur le disque. Il a comme rôle de fournir à l utilisateur un ensemble d informations sur le noyau et les processus à travers une interface. Le répertoire /proc contient des fichiers tels que cpuinfo (description Page 11 sur 44

du ou des processeurs de la machine), filesystem, net (fichiers de protocoles réseaux), un répertoire par processus actifs, etc. Tableau comparatif Windows Linux Système de fichier New Technology File System NTFS Second extended file system EXT2 Allocation des fichiers Bitmap/Extents I-nodes Taille maximale fichier 16 Tr 2 Tr Nombre maximal de fichiers 2 32-1 10 18 Taille maximale nom fichier 255 caractères 255 caractères Sensible aux majuscules Non Oui Taille maximale volume 256 Tr 16 Tr Encryption transparente Triple DES Non Compression transparent Algorithme Lempel-Ziv Oui Table Master Table File Dédoublé aléatoirement Page 12 sur 44

Mémoire virtuelle Windows Le gestionnaire de mémoire virtuelle 3 (VMM) donne l illusion à chaque processus qu il possède quatre(4) giga-octets (go) de mémoire contigüe. Étant donné que cela dépasse la capacité en mémoire vive de la plupart des ordinateurs et qu il y a habituellement plusieurs dizaines de processus qui s exécutent simultanément, le VMM emmagasine sur le disque des fichiers nommées pages («Page Files»). C est sommairement cela que constitue ce qu on appel la mémoire virtuelle dans le cas de Windows. Organisation de la mémoire WinXP fourni un espace d adressage de 32 ou 64 bits, dépendamment du processeur et de l édition de Windows. Chaque processus, même s il croît posséder quatre(4) go de mémoire, accède par défaut à seulement deux(2) go de son espace virtuel d adressage, car le reste est utilisé par le système 4. Tout processus possède une «Page Directory Table» qui est utilisée et chargée dans la «Page Directory Register» lors de chaque changement de contexte, c est-à-dire à chaque fois que le système décide d exécuter un autre processus. Cette table est composée de «Page Directory Entries» (PDE), chaque PDE pointe vers une table de pages («Page Table») et celle-ci contient des «Page Table Entries» (PTE) qui pointent finalement vers une page, normalement d une taille de quatre(4) kilo-octets (ko) sur un système 32 bits, en mémoire ou sur disque dur. Une adresse virtuelle est ainsi composée de trois(3) portions : l offset de la «Page Directory Table», l offset de la table de pages et le déplacement physique. Le VMM converti ou traduit une adresse virtuelle en une adresse physique en trois(3) étapes. 1. Il calcul la somme de la valeur dans la «Page Directory Register» 5 et de la première portion de l adresse virtuelle. Le résultat est l entrée dans la PDE de la «Page Directory Table». 3 Traduction libre pour «Virtual Memory Manager». 4 Voir en annexes le tableau de partition de l espace virtuel d un processus sous Windows pour plus de détails. 5 Qui est equivalent à la Page Directory Table étant donné la copie lors du changement de contexte. Page 13 sur 44

2. Il calcul ensuite la somme de la valeur de l entrée dans la PDE et de la seconde portion de l adresse virtuelle. Le résultat est l entrée dans la PTE de la «Page Table». 3. Finalement, il concatène la valeur de l entrée dans la PTE et la troisième et dernière portion de l adresse virtuelle. Le résultat est l adresse physique de la page désirée. Figure 5 - Organisation de la mémoire et génération d adresse sous Windows La traduction peut être accélérée par le «Translation Lock-Aside Buffer» (TLB) via une correspondance Associative/Directe 6. Ainsi, plutôt que d effectuer les trois(3) étapes du calcul, ce qui nécessite de lire en mémoire principale les entrées dans la PDE et la PTE, le TLB agît comme un cache contenant certaines pages qui sont ainsi rapidement accessibles. 6 Ainsi que par un circuit électronique appelé MMU («Memory Management Unit»). Page 14 sur 44

Page Table Entry (PTE) Dépendamment si elle pointe en mémoire ou dans un page file, chaque entrée est structurée différemment. Ainsi, cinq(5) des 32 bits sont utilisés pour la protection 7, vingt(20) autres bits comme index pointant en mémoire ou pointant un index de page file sur disque 8. Si la page est sur disque, quatre(4) bits indiquent où des seize(16) page files 9 elle se situe, sinon trois(3) bits indiquent l état de la page en mémoire. Large Pages WinXP permet d allouer un ensemble contigu de pages qu il traite cependant comme si s en était qu une seule. Cela est particulièrement utile lors de l utilisation répétitive de plusieurs pages imposantes, considérant en plus qu une large page ne correspond qu à une seule entrée dans la TLB. Essentiellement, WinXP utilise ce mécanisme pour ne pas «swapper» la «Memory Maps» ainsi que le «Nonpaged pool». Il y a cependant quelques restrictions à cette utilisation : Chaque «large page», d après le processeur, doit être minimalement un multiple de deux(2) mo ; Par défaut, il y a accès en lecture et écriture aux «large pages», ce qui ne convient pas, par exemple, aux DLL qui doivent être en lecture seule seulement ; Les pages de la «large page» doivent être contigus en mémoire virtuelle et physique. Prototype Page Table Entry (PPTE) WinXP ajoute un niveau d indirection supplémentaire à l organisation de la mémoire lorsque l on parle de pages dites «copy-on write». Ainsi, il utilise des «Prototype Page Tables» contenant des «Prototype Page Table Entries» (PPTE) et le PTE d un «copy-on write» pointe vers l une de ces entrées. L avantage réside dans le partage de la mémoire 10 pour la communication entre processus. Quand un processus modifie une page, le VMM copie la page dans un nouveau cadre (ou «frame») et modifie la PPTE pour pointer vers celle-ci plutôt que vers l ancienne page. Il y a donc économie de mémoire dû au partage de la même PPTE ce qui redonne à chaque processus une partie de ce gain. Cela réduit à son tour les problèmes de fautes de pages («Page fault»). Seul inconvénient, cette manière de procéder rajoute une 7 Read, write, execute, copy-on-write, etc. 8 Ce qui constitu 1 048 576 pages virtuelles. 9 Pour obtenir de meilleur performance, il est recommandé de placer les page file sur different disques (read/write concurents). 10 Plus précisement le File Mapping Page 15 sur 44

quatrième étape lors de la conversion d une adresse virtuelle en adresse physique ce qui est particulièrement lent, surtout dans le cas où on doit effectivement réaliser toutes ces étapes si on a une page qui n est pas dans la TLB. Allocation de la mémoire L allocation mémoire sous WinXP à un processus s effectue en trois(3) étapes, soit : 1. Réservation de l espace virtuel; 2. «Commit» afin de confirmer la demande et le début de l utilisation ; 11 3. Accès à la mémoire. Lors de la deuxième étape, le VMM vérifie qu il reste suffisamment d espace et alloue la mémoire demandée en créant une nouvelle PTE. Dans le cas où la mémoire se fait rare, le VMM met en branle un mécanisme spécial nommé «I/O Throttling». Ainsi, plutôt que de gérer plusieurs allocations mémoires simultanément comme elle fait à l habitude afin d optimiser les performances système, elle n en traite qu une seule à la fois. Cela à pour effet, évidemment, de ralentir globalement le système lors des accès aux pages, ce qui prévient davantage les crashes et rationalise l accès au disque. Pour chaque huit(8) état possible d une «page frames» 12, le VMM possède huit(8) listes triées nommées «page list» et forment ensemble la «page frame database». Cela permet à WinXP d améliorer significativement la gestion des pages, par exemple comme allouer de la mémoire à un processus. En effet, comme les pages sont déjà triées, le VMM n a qu à défiler le nombre de pages nécessaires dans la file de «page frames» à état «Zeroed». WinXP tente d anticiper les pages demandées sur le disque et déplace certaines de ces pages en mémoire pour prévenir les fautes. Aussi, lors du chargement d une ou plusieurs pages, il charge aussi les pages «spatialement proches» de celles chargées. Plus précisément, sachant que le système de fichier divise le disque en clusters d octets, WinXP charge toutes les pages d un même cluster. Ce mécanisme se 11 Les deux(2) premières étapes sont réalisées en même temps par l API Windows ce qui évite qu un processus puisse réserver de la mémoire et ne pas l utilisée. 12 Voir la table en annexe Page 16 sur 44

nomme prépagination ou «Clustered demand paging». Cette méthode d optimisation est par contre moins efficace lors de périodes à haute fréquence d entrées-sorties (E/S) sur le disque, car elle risque de charger inutilement des pages qui ne seront jamais utilisées et qui retournerons sur le disque. Logical Prefetcher Un autre fabuleux mécanisme de WinXP pour améliorer ses performances en ce qui attrait à la mémoire virtuelle, surtout quand on parle de chargement d applications 13, est le pré-chargement («Prefetching») de fichiers. Le système enregistre simplement les pages accédées et leurs ordres durant les huit(8) derniers chargements de l application dans un fichier de scénario. Ainsi, à partir du neuvième (9 e ) chargement, WinXP consulte le scénario, demande la liste des pages et les charges en un seul appel asynchrone. Cela à pour effet de réduire la charge du disque. Dans le cas du chargement de Windows, comme l initialisation des périphériques ne nécessite pratiquement pas de travail de la part du système, si ce n est que d attendre la fin de l initialisation de chaque périphérique 14, le système en profite alors pour charger simultanément les pages du scénario de démarrage de Windows. L exécution de ce mécanisme est due au «Logical Prefetcher». Le «Logical Prefetcher» effectue périodiquement en arrière plan l optimisation de la position des pages en consultant les différents scénarios et en se créant une configuration optimale nommée «Layout File» du disque. Son objectif est de placer de manière contigüe les pages sur le disque et effectue ce travail lors d inactivités («Idle») du système. Linux Région La mémoire virtuelle en Linux est divisée en deux(2) sections : les régions et les pages. L espace d adressage d un processus, qui est constitué de cinq(5) parties principales : soit le code, les données initialisées et non initialisées, le tas et la pile, est découpé en parties nommées «régions». Une région est une zone de l espace d adressage qui est contiguë. Elle peut être partagée ou protégée. En plus de ces régions habituelles, d autres seront allouées au processus pour contenir les données des bibliothèques 13 Incluant Windows lui-même. 14 Où on prend pour acquis que chaque périphérique s initialise en grande partie par lui-même. Page 17 sur 44

partagées utilisées par le processus. Pour gérer ces régions, il y a un descripteur d espace d adressage par processus. Le descripteur contient plusieurs informations dont les suivantes : 1. La liste des régions ; 2. Les adresses de début et de fin des sections de code, de données non initialisées, etc. ; 3. L adresse de la table globale des pages du processus ; 4. La taille de l espace d adressage du processus ; 5. Etc. La liste des régions est implémentée par une liste chaînée simple de descripteur de région. Ces descripteurs contiennent des attributs associés à chaque région, soit les adresses de début et de fin de la région qui, en passant, est d une taille d un multiple de 4096. Ils contiennent également les propriétés associés à la région, tel que les attributs de lecture, écriture, partage, etc. Un fait à noter est que si un processus contient un trop grand nombre de régions 15, l utilisation des liste chaînées est écartée et les descripteurs des régions sont enregistrés dans une structure de données de type AVL pour augmenter la performance. Étant donné que tout est fichier en linux, les régions mémoires inscrites dans l espace d adressage d un processus n y échappent pas et sont contenus dans le fichier «maps» qui est situé dans le répertoire /proc/[nom du processus]. Pages Chaque région est à son tour divisée en pages. La taille d une page est généralement de quatre(4) ko et est fixée par une constante inscrite dans le fichier «asm/page.h». Cette table est définie sur trois(3) niveaux : table globale, intermédiaire et table des pages. Pour accéder à une page, il utilise le format <gp,ip,p,d>. 15 D un maximum de 65 536 Page 18 sur 44

Figure 6 - Table des pages multi-niveaux sous Linux Un entrée dans la table contient un champ «présent (present)» qui indique si la page est chargée en mémoire ou non, un champ «accédé (accessed)» et un champ «modifié (dirty)» qui indique si les données de la page ont été modifiées ou non. Elle contient également d autres champs qui contiennent les droits d accès, les privilèges, etc. Le noyau de Linux permet à des processus différents de partager des pages selon certaines conditions. Si l accès aux pages est en lecture, tout est ok. Lorsqu un processus modifie une de ces pages, une copie de celle-ci est faite pour ce processus («copy on-write»). De même lorsqu un processus crée un processus fils, ses tables des pages sont dupliqués, mais pas toutes. Les pages contenant le code exécutable par exemple, sont mises en partage entre les deux(2) processus. Swap Lorsque le noyau a besoin de mémoire, il décharge des pages présentes en mémoire centrale dans une zone appelée «zone de swap». Il y a un thread nommé «kswapd» s exécutant à un intervalle régulier 16 qui est responsable de sélectionner les pages à retirer de la mémoire. Pour prendre sa décision, il utilise les champs «âge» du descripteur de case et «accédé» de la table des pages. C est en fait, l algorithme de la seconde chance : 1. La page la plus ancienne chargée en mémoire (attribut «âge») est nommé comme étant la victime possible ; 16 À toutes les dix(10) secondes. Page 19 sur 44

2. Si «accédé» = 0, la page est remplacée ; 3. Sinon, une seconde chance lui est donnée, le bit «accédé» est remis à zéro et la page la plus anciennement chargée suivante est sélectionnée jusqu à ce qu une victime soir trouvée. Un périphérique de swap peut être soit : une partition, un fichier régulier ou un périphérique en mode bloc. Le noyau de linux peut utiliser plusieurs périphériques de swap différents en même temps. Chacun ayant une priorité. Chaque périphérique de swap est géré par une suite de bits correspond à une page dans la zone de swap. Le bit prenant la valeur 1 pour indiquer que la page est utilisée et 0 pour le contraire. Page 20 sur 44

Planification Windows Dans un premier temps, il est important de bien expliquer ce qu est un thread, un processus, une fibre, etc. Définitions Sous WinXP, un processus est constitué : Du code du programme ; D un contexte d exécution ; Des ressources utilisées ; Et d un ou plusieurs threads. Le thread est l unité de base de toute exécution, il exécute une partie du code sous le contexte d exécution et les ressources de son processus parent. Le thread lui-même contient son propre contexte d exécution, incluant sa pile d exécution, les états des registres machine, sa priorité, etc. Ce qui est particulier avec les threads et les processus est qu ils sont utilisés et partagés tout les deux(2) de la même manière par les autres threads et processus. Par exemple, un thread peut attendre un autre thread ou un processus et un processus peut obtenir la poignée d un autre processus ou d un thread. En d autres termes, les threads et les processus sont deux(2) unités d exécution. Organisation Les informations contextuelles de chaque thread ou processus sont gardées dans plusieurs structures différentes. Ainsi, l «Executive Process Block» (EPROCESS) est la principale structure d information d un processus. Il contient des informations utilisées par son appelant comme : l ID du processus, un pointeur vers la table des poignées du processus, un pointeur sur le jeton d accès du processus et des infos diverses regroupant l historique des fautes de pages, la taille minimale et maximale permises, etc. Chaque EPROCESS contient un «Kernel Process Block» (KPROCESS) qui contient des informations pour chaque thread utiles au micronoyau 17 comme : la classe de priorité de base, le quantum par défaut et son «spin lock». 17 Partie du noyau de Windows dévouée à la gestion et la synchronisation des threads. Page 21 sur 44

Les deux(2) blocs sont présent dans l espace du noyau et possède donc de l information utiles aux composants du micronoyau lorsqu ils manipulent un processus. Le système enregistre aussi les informations du processus dans un «Process Environment Block» (PEB) qui fait parti de l espace d adressage du processus. L EPROCESS pointe vers ce dernier qui contient des informations utiles pour les processus dits «utilisateur», comme la liste des DLL liées au processus ainsi que des informations sur l espace mémoire («heap») du processus. Dans le cas du thread, l «Executive Thread Block» (ETHREAD) est l équivalent du EPROCESS et contient l ID du thread, son adresse de début, son jeton d accès ainsi qu une liste de ses E/S en cours d exécution et finalement possède un pointeur vers le EPROCESS de son processus parent. Chaque ETHREAD contient un «Kernel Thread Block» (KTHREAD) équivalent au KPROCESS qu utilise le micronoyau pour la synchronisation et la planification des thread et contient des informations comme : la priorité de base et celle courante, son état courant ainsi qu une liste d objets de synchronisation pour lesquels il attend. Les blocs ETHREAD et KTHREAD ne sont pas accessible à l utilisateur. Ainsi, comme pour les processus, il existe un bloc qui contient les infos concernant l espace d adressage du thread dans son processus nommé cette fois «Thread Environment Block» (TEB). Donc, chaque KTHREAD pointe vers un TEB qui contient des informations telles que : les sections critiques maintenues par le thread, son ID, ses informations sur sa pile d exécution et un pointeur vers le PEB de son processus parent. Tous les threads d un même processus partagent le même espace virtuel d adressage qui est majoritairement global. Chaque thread possède son espace mémoire qui lui est propre dans un «Thread Local Storage» (TLS) ou via sa pile d exécution qu il peut aussi utiliser comme espace. Page 22 sur 44

Figure 7 - Hiérarchie des unités d'exécution sous Windows Cycle de vie d un processus Via des APIs, un processus peut créer un autre processus, mais Windows ne considère aucune relation parent/enfant lors de cette création. Ainsi, le nouveau processus se voit octroyer un tout nouvel espace virtuel d adresse complètement indépendant de son créateur. Par contre, le créateur peut toutefois spécifier des attributs dont va obligatoirement hériter le processus créé, comme : les types de poignées, des variables d environnement, le répertoire en cours, etc. Lors de la création d un processus, le système créé automatiquement un «Primary Thread» qui sert un de point d entrée et agit comme n importe quel autre thread, c est-à-dire qu il permet de créer de nouveaux threads à l intérieur du processus. Pour plusieurs raison, un processus peut se terminer, par exemple : si tous ses thread sont eux-mêmes terminés ou si l un de ces thread termine explicitement son processus parent, etc. Même s il n existe pas de relation parent/enfant entre processus, lorsque l usager ferme sa session tous les processus associés au contexte de cette session sont détruits. Page 23 sur 44

Les jobs Un «Job Object» sert principalement à regrouper un ou plusieurs processus et permet au développeur de définir des règles et des limites sur l ensemble de ces processus comme : la classe de priorité, le contexte de sécurité, la taille minimale et maximale du «Working Set», la limite sur la taille de la mémoire virtuelle utilisée ainsi que le temps processeur utilisé par la job ou par processus. Comme un thread hérite de certains attributs de son processus parent, il hérite donc des paramètres de la job associée. Les jobs sont surtout utiles pour configurer avec plus de précision certains attributs d un processus, c est pourquoi certains utilisateurs créés des jobs seulement pour avoir plus de contrôle avec les attributs des processus. Dans ce cas, la job constitue une extension du processus et, par transitivité, l extension du thread. 18 Les fibres WinXP permet de créer des unités d exécution niveau usager, invisibles au noyau, qu on appel des fibres («Fiber»). Un thread peut créer une fibre, son exécution est planifiée par celui-ci plutôt que par le micronoyau et s exécute dans le contexte du thread. La fibre s exécute lorsque le micronoyau décide d exécuter le thread associé et le thread s exécute jusqu à un changement de contexte ou que toutes les fibres, une après l autre, aient fini de s exécuter 19. Chaque fibre contient des informations comme : la prochaine instruction à exécuter, les valeurs des registres système, etc. Tout comme le thread possède un TLS, chaque fibre possède son «Fiber Local Storage» (FLS) qui sert de manière identique au TLS, d ailleurs la fibre à accès au TLS de son thread parent. Fait important à noter, même s il est possible d utiliser un unique thread avec plusieurs fibres plutôt qu un unique processus avec plusieurs threads, il faut savoir que le planificateur du micronoyau ne traite que des threads et applique une certaine politique d égalité entre les threads pour une priorité et une classe équivalente. Ainsi, un seul thread reçoit moins de temps machine qu un processus et donc, l utilisation de fibres, dans ce cas, est pénalisante. 18 Les jobs peuvent notamment servir à terminer tous les processus d un même groupe en même temps. 19 Le changement de contexte entre fibre est rapide, car il n implique pas d intervention du noyau Page 24 sur 44

Thread Pool Chaque processus possède un «Thread Pool» qui regroupe des threads dits travailleur («Worker Thread») dont le rôle est d exécuter les fonctions placées en queue par les thread usagers et de dormir le reste du temps. Ce mécanisme est fort utile pour gérer les E/S clients et les threads qui occupent la plupart de leur temps à attendre. Plutôt que de créer un thread pour chaque E/S, l usager enfile simplement la demande vers un thread travailleur qui sait alors quelle fonction exécuter et dans quel contexte. Il faut par contre fait attention, car utiliser la file de manière disproportionnée et intensivement conduit à des lacunes de performances étant donné que le système doit constamment adapter la taille de la mémoire utilisée par le processus. États d un thread Sous WinXP un thread peut prendre huit(8) états : État Description / Moment Initialized» Lors de la création ; «Ready» Une fois la création terminée ; «Stand by» Lorsque le planificateur sélectionne le thread pour son exécution future ; «Running» Lors de l exécution ; «Terminated» Lorsque l exécution du thread est terminée ; «Waiting» Lorsque le thread attend une ressource ; «Transition» Si le thread est suspendu depuis longtemps et que sa pile d exécution n est plus en mémoire ; «unknow» Lors d une erreur d exécution. Algorithme de planification Lorsqu un thread devient «Ready», et tant qu il reste à cet état ou «Running, il est enfilé selon sa priorité dans l une des 32 files numérotées de 0 à 31 où 31 est le niveau le plus élevé, le plus prioritaire. Le planificateur défile selon le modèle «Round-Robin» en commençant par la priorité la plus élevée jusqu à épuisement successif ou jusqu à ce qu une file à plus grande priorité possède un thread à exécuter. Page 25 sur 44

Priorités d un thread Les 32 priorités d un thread sont divisées en deux(2) catégories, soit : temps réel (r >= 16) et dynamique (0 < d < 16) 20. Chaque thread possède aussi une priorité de base (ou minimale) définie par la priorité de base du processus parent associé ainsi que la catégorie de base de priorité. Cette catégorie de base de priorité possède six(6) états, soit : «idle», «below normal», «normal», «above normal», «high» et «real-time». Les cinq(5) premières catégories sont appelées classes de priorité dynamique et possède une priorité inférieure à 16. La classe de priorité temps réelle possède une priorité supérieur ou égale à 16 et ont une priorité dite statique, contrairement à dynamique. Les priorités dynamiques permettent à un thread qui, par exemple, est longtemps en attente, de bénéficier d un bonus (ou d un élan supplémentaire) de temps machine une fois qu il aura obtenu son E/S. Aussi, un thread qui s exécute longtemps, à chaque changement de contexte, perd un(1) degré de priorité 21. Chaque classe de priorité est elle-même réduite en niveaux de priorités de base comme : «idle», «below normal», «normal», «above normal», «highest» et «critical». À chaque combinaison de classe de priorité de base et de niveaux de priorité de base correspond une priorité spécifique. Le fait d augmenter la priorité des threads en «wait» prévient l inversion de priorité, c est-à-dire, le fait qu un thread de niveau intermédiaire prenne le dessus sur un thread de niveau élevé. Cela se produit lorsqu un thread de niveau élevé attend indéfiniment une ressource en provenance (ou utilisée) par un thread à basse priorité. Planification multiprocesseurs Sauf la version «Home», WinXP supporte la planification sur plusieurs processeurs et toutes les versions supportent les multiprocesseurs symétriques (SMP) 22. Généralement, dans le cas des SMP, le 20 La priorité 0 est exclusive au thread vidant les pages mémoires («zeroed»). 21 La priorité du thread ne peut alors aller au delà de la priorité de base que lui confère sa catégorie. Par exemple, un thread dynamique qui attend longtemps ne peut pas devenir un thread temps réel. 22 Notamment comme le processeur hyper-threading (HT) d Intel. Page 26 sur 44

planificateur tente de planifier le thread de la file la plus prioritaire sur le même processeur déjà utilisé par celui-ci. Cela, afin de tirer profit de la mémoire cache. Chaque thread et processus peut spécifier sur quel processeur il désire s exécuter via un masque d affinité. Ce masque peut être spécifié pour une job et cela défini récursivement le masque d affinité des threads qui le compose. L avantage des masques est de ne pas surcharger un système au complet lors de calculs fastidieux, mais de limiter le calcul sur les processeurs définis. En plus du masque d affinité, chaque thread possède une valeur définissant le processeur idéal et une autre pour le dernier processeur utilisé. La première valeur offre un meilleur contrôle du parallélisme ou du partage de ressource tandis que la seconde valeur est utilisée par le planificateur pour maximiser l utilisateur des caches. Par défaut, WinXP tente d assigner le même processeur idéal à tous les threads d un même processus. En résumé, le planificateur doit considérer la priorité, le processeur idéal, le dernier processeur et le temps d attente de chaque thread pour planifier son exécution. Linux Région La planification/ordonnancement est une fonction qui gère le partage du ou des processeurs entre les différents processus en attente pour s exécuter. Linux utilise trois (3) politiques de planification différentes qui sont divisées en deux (2) types : une pour les processus en temps réels et une autre pour les processus dit classiques. Le planificateur (scheduler) de Linux est de type préemptif et est basé sur un algorithme de priorité divisé en deux (2) intervalles : de 0 à 99 pour les processus en temps réels et de 100 à 140 (nice value) pour les autres processus. Système préemptif Dans un système préemptif, le planificateur décide quand un processus doit arrêter de s exécuter et quand un autre processus doit débuter ou reprendre son exécution. Le temps alloué avant qu un processus soit arrêté se nomme une tranche de temps (timeslice/quantum). Cette portion de temps permet à chaque processus d utiliser du temps d un processeur. Lorsque la portion de temps allouée pour un processus est complètement utilisée, celui-ci est considéré «expiré» et il ne sera éligible pour une prochaine exécution que lorsque tout les Page 27 sur 44

autres processus auront écoulés leurs timeslice. Il y a une exception pour les processus qui sont considérés très interactifs, ceux-ci sont immédiatement remis dans le tableau des processus actifs pour leurs permettent de terminer plus rapidement. Avec l algorithme O(1) utilisé par Linux, c est au moment où un processus devient expiré que sa priorité et son prochain timeslice est recalculé. Voici une figure représentant ce qui se passe lors de la fin du quantum d un processus : Figure 8 - Fin du quantum d un processus sous Linux Files d exécution «Runqueues» Une file d exécution est une liste des processus exécutables. Il y en a une par processeur dans le système Linux et un processus est dans une et une seule liste. Chaque file contient deux (2) tableaux de priorités, un actif pour les processus qui n ont pas achevé leur quantum et un expiré. Ces tableaux servent pour l algorithme O(1). Chaque tableau contient une file des processus par niveau de priorité. Le tableau des priorités contient également un «bitmap» utilisé pour découvrir efficacement le processus le prioritaire dans le système. Page 28 sur 44

Figure 9 - Linux O(1) scheduler algorithm «Load balancer» Puisque chaque processeur contient sa propre liste de processus qu il gère, il faut qu il y ait une sorte de planification globale dans le système. Un problème qui peut survenir est lorsqu un processeur par exemple devient débalancé par rapport aux autres, c est-à-dire qu il contient plus ou bien moins de processus que les autres. C est là qu entre en compte le «load balancer» qui s occupe de rendre les files d exécutions de chaque processeur balancée. Figure 10 - "Load balancer" de Linux Page 29 sur 44

Processus en temps réels Linux utilise deux (2) politiques pour l ordonnancement des processus en temps réels, soit SCHED_FIFO et SCHED_RR. SHED_FIFO utilise un algorithme de type premier arrivée premier servi (firstin, first-out) pour les processus de même priorité et ce, sans tranche de temps maximum. Cela implique qu un processus qui s exécute, arrêtera son exécution, soit à la fin de celui-ci, soit lorsqu il sera bloqué ou bien s il est arrêté lorsqu un processus de plus haute priorité est prêt à s exécuter. Si plusieurs processus ont la même priorité, ils seront exécutés un après l autres. SHED_RR est identique à SHED_FIFO à l exception que chaque processus s exécute durant un maximum de temps prédéterminé (quantum). Ce type d algorithme est appelé «round-robin scheduling algorithm». Ces deux (2) politiques implémentent une priorité statique, c est-à-dire qui ne change pas. Processus classiques La politique utilisé pour ce type de processus se nomme SHED_OTHER. Le système de planification de Linux utilise une priorité dynamique pour les processus classiques. Ce concept permet d augmenter ou de réduire la priorité d un processus selon qu il fait plus d I/O (attend plus souvent pour une opération d entrée/sortie (I/O bound)) ou qu il utilise plus le processeur (processor bound). Sous Linux, les processus de type (I/O bound) recevront une priorité plus grande. Cette priorité est implémentée dans l intervalle des «nice value». Un nombre allant de moins vingt (-20) à dix-neuf (19) avec un défaut de 0 est attribué selon le type de processus (I/O ou processor bound). Un processus qui reçoit la plus petite valeur sera exécuté en premier et recevra également un «timeslice» plus grand. Page 30 sur 44

Communication Windows Windows implémente plusieurs mécanismes de communication interprocessus (IPC) permettant l échange de données entre les tâches. Tout comme Unix, il utilise les tubes (Pipes), les files de messages («message queues» ou «mailslots» sous Windows) ainsi que la mémoire partagée. En plus de ces trois(3) mécanisme orientés données, il existe trois(3) autres manières de communiquer : l une orientée objets comme «Microsoft s Component Object Model», l autre orientée procédure comme l appel distant de procédures et finalement l une orientée réseau via les sockets. Tubes (Pipes) Les tubes sont utilisés pour la communication dite directe entre deux(2) processus. L accès aux données du tube s effectue de la même manière que l accès à un fichier. Le processus qui créé le tube est dit serveur du tube. À son tour, le processus qui se connecte au tube est dit client du tube. Chaque tube client ne communique qu avec serveur seulement. En d autres termes, il est impossible pour un client de communiquer avec un autre client du tube. Il y a trois(3) modes d utilisation du tube, soit : En lecture seul : où le serveur ne fait que recevoir des données clients ; En écriture : où le serveur ne fait qu envoyer des données aux clients ; et duplex. Tubes anonymes Les tubes anonymes sont utilisés pour la communication dite unidirectionnelle et ne peuvent être utilisé que par les processus locaux 23. Un processus qui créé un tube anonyme reçoit une poignée de lecture et une d écriture. La lecture et l écriture s effectuent en passant la poignée nécessaire aux fonctions. Pour communiquer avec un autre processus, le serveur doit partager l une de ses poignées avec ce dernier. Les tubes anonymes ne supportent que la communication synchrone, c est-à-dire que la lecture et l écriture au tube est une fonction bloquante. 23 Processus dont la communication ne nécessite pas l utilisation du réseau. Page 31 sur 44

Tubes nommés Les tubes nommés peuvent être bidirectionnel et partagés par des processus distants. Ils supportent la communication asynchrone. Cependant ils ajoutent de la surcharge additionnelle comparativement aux autres types de tubes. Lors de la création, le serveur spécifie le mode, le nom et le nombre maximal d instances partagées du tube. Un client peut obtenir une poignée pour le tube en spécifiant son identifiant. Si le nombre maximal d instances n est pas atteint, le client se connecte. Les tubes nommés offrent deux(2) manières d écrire les données, soit par flots binaire ou par messages 24. Toutes les instances utilisant le tube doivent utiliser le même format. WinXP permet à un processus d effectuer des écritures bloquantes («Write-Through»). Par défaut, le format par message n utilise que cette méthode tandis que par flots permet l écriture non bloquante. L écriture bloquante facilite la synchronisation et augmente la tolérance aux fautes. Cependant, cela dégrade les performances (surtout en réseau) étant donné que le processus qui écrit doit attendre une confirmation que le processus qui lit à bien reçu les données. L accès asynchrone aux données du tube s effectue facilement via des objets d événements ou encore via une routine d E/S. Files de messages (Mailslots) Les files de messages permettent la communication unidirectionnelle entre le serveur et les clients. Le processus qui créé la file est le serveur et les utilisateurs sont les clients. Les files de messages agissent comme entrepôt de messages, locaux ou distant, entre le serveur et les clients. Il n y a par contre aucune confirmation de réception. Une file de messages réside en mémoire et est considérée comme un fichier temporaire 25 par Windows. Le gestionnaire d objets détruit automatiquement, comme un collecteur, les files de messages dont aucun processus ne fait référence. Les messages peuvent être transmis de deux(2) manières : les petits messages sont envoyés comme datagrammes 26 (UDP) et les autres sont envoyés via une connexion SMB 27 («Server Message Block»). 24 Dépendamment des besoins, les flots binaires sont plus rapides tandis que les messages sont plus simples à utiliser. 25 Ou «pseudo» fichier. 26 Et peuvent donc être diffusés globalement («broadcast») à plusieurs files de messages. 27 Protocole réseau de partage de fichier utilisé par Windows. Page 32 sur 44