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

Mémoire partagée La mémoire partagée permet la communication bidirectionnelle entre les processus en partageant le même fichier en mémoire («File Mapping»). Un processus peut créer un objet de type «File Mapping» pointant vers un fichier ou une page en mémoire. Le processus partage sa poignée avec les autres processus soit par son nom ou par héritage. Le partage des données s effectue alors quand les processus écrivent et lisent des données dans ces zones partagées. Afin de limiter l utilisation de la mémoire par chaque processus et d accélérer la lecture, il est possible de spécifier des vues («File View») sur une partie de la mémoire partagée. Les objets de type «File Mapping» ne fournissent pas de mécanismes de synchronisation. Ainsi, deux(2) processus peuvent écrire sur la même portion de mémoire en même temps. Afin de prévenir cela, les processus peuvent utiliser les mutex ou les sémaphores. Linux Il existe plusieurs façons/outils de communication possibles pour que les processus puissent discuter/échanger de l information entre eux. En voici la liste : Outil / Manière Signaux (Signals) 28 Tubes anonymes (unnamed pipes) Tubes nommés (FIFOS Named pipes) Files de messages (Message queues) 29 Mémoire partagée (Shared memory) Sémaphores (System V Semaphores) Description Message asynchrone envoyé par un processus ou bien par le noyau à un autre processus pour lui indiquer l apparition/l occurrence d une nouvelle condition/événement. Identifier par le système normalement avec le caractère pour transférer la sortie d un programme vers l entrée d un autre. Accessibles par plusieurs processus et fonctionnent avec le principe «first-in First-out». Mécanisme qui permet à un ou plusieurs processus d écrire des messages qui seront lus par un ou plusieurs autres processus. Emplacement mémoire partagée entre processus. Compteurs utilisés pour contrôler l accès à une ressource partagée. Les trois(3) premiers outils sont considérés comme étant des IPCM (mécanisme de communication interprocessus) et les trois derniers comme étant des IPCR (ressource de communication interprocessus). 28 Voir le tableau contenant la liste des signaux en annexe. 29 Les files de messages, les sémaphores et la mémoire partagée peuvent être accédés par un processus seulement s il en a les droits. Page 33 sur 44

Signaux (signals) Les signaux sont des messages qui ne contiennent pas d information propre à eux, leur numéro/nom étant significatif de l événement rapporté par un autre processus ou par le noyau. Par exemple, le signal «SIGCHLD» indique au processus père la mort d un de ses processus enfant. Les signaux sont généralement associés à la gestion des trappes / erreurs par le noyau. C est grâce à ce procédé que le noyau informe un processus l apparition d une erreur/faute dans l exécution de celui-ci. Le noyau de Linux 2.2 admet 64 signaux différents. Les signaux 1 à 31 correspondent aux signaux classiques tandis que les 32 autres correspondent à des signaux à temps réel. Le signal zéro (0) n a pas de nom. Il y a trois(3) actions possibles lors de la réception d un message par un processus; il peut l ignorer, exécuter son action correspondante par défaut ou bien exécuter une fonction spécifique grâce à la création dans le code d une partie appelée «gestionnaire de signal» (signal handler) qui utilise les primitives «signals» ou «sigaction». Quatre(4) champs contenus dans le descripteur du processus «PCB» permettent à celui-ci de les gérer, soit : 1. Signal. Variable de type «sigset_t» qui garde en mémoire les signaux envoyés au processus. Elle est constitué de deux(2) entiers de 32 bits, dont chacun des bits prend la valeur zéro(0) pour indiquer que le signal correspondant n a pas été reçu et un(1) dans le cas contraire. 2. Blocked Variable de type «sigset_t» qui emmagasine les signaux bloqués (qui n ont pas encore été pris en compte par le processus). 3. sigpending C est un drapeau «flag» qui indique s il y a un ou plusieurs signaux bloqués en attente. 4. gsig C est un pointeur vers une structure de type «signal_struct» qui contient de l information pour chaque signal, comme par exemple, la définition de l action qui lui est associé. Pour envoyer un signal à partir d un processus, il faut utiliser la primitive «kill». Son format est le suivant : int kill (pid_t pid, int num_sig); pid correspond à l identificateur du processus à lequel on envoie un message et num_sig contient le numéro du signal envoyé. Il est possible de bloquer des signaux grâce à la Page 34 sur 44

primitive «sigprocmask()». Cela permet par exemple, de capturer l événement relié aux touches «CTRL C» et d empêcher un processus d être interrompue par l utilisateur. Les signaux en temps réels correspondent à la norme POSIX.1b. Ils n ont pas de non associés et les caractéristiques qui les différencient des premiers signaux sont : 1. l empilement des occurrences de chaque signal par l utilisation d une file. Contrairement aux signaux ordinaires qui ne contiennent qu un «flag» prenant les valeurs zéro(0) ou un(1), les signaux en temps réel utilisent une file qui permet de garder toutes les occurrences des signaux (jusqu à un maximum de 1024). Cela permet d envoyer au processus un signal à plusieurs reprises et de faire en sorte que le processus traite chaque apparition de ce signal. Dans le cas des signaux ordinaires, l envoie multiple d un même signal n est pas prise en compte et le processus ne traite que la première occurrence de celui-ci. 2. Ils sont délivrés en ordre de priorité, soit du plus petit au plus grand. 3. Ils peuvent transporter une petite quantité d information supplémentaire qui sera traitée par le gestionnaire de signal (champs «siginfo»). Tubes (pipes) Les tubes (pipe) sont un genre de tuyau à partir duquel un processus peut écrire des données qu un autre processus peut lire. La communication dans un tube est unidirectionnelle. Si on a besoin d une communication bidirectionnelle entre deux(2) processus, il faut alors en créer deux(2). Les tubes sont gérés par le SGF (système de gestion de fichiers) du noyau de Linux et sont considérés comme des fichiers. Lors de la création d un tube, deux(2) descripteurs sont créés; un permettant de lire et l autre d écrire de l information. La lecture se fait avec l utilisation de la primitive read() et l écriture à partir de la primitive write() du VFS (système de fichiers virtuel). Les données sont traitées en tant que flot d octets (elles n ont pas de structures fixes) et sont lues de la plus ancienne à la plus récente. Lorsqu une information est lue, elle est détruite du tube. C est le même fonctionnement que les «sockets» en réseau. Figure 11 - Exemple de tube en Linux Exemple d un tube dont les extrémités sont référencées par des descripteurs de fichiers fd[x]. Page 35 sur 44

30 Pour être certain de savoir qui va écrire et qui va lire dans le tube, il est préférable que les processus ferment/bloquent les extrémités qu ils n utilisent pas. Figure 12 - Exemple de communication avec tube en Linux Un tube peut être utilisé à partir de l interpréteur de commandes shell de Linux pour transmettre les résultats (sortie) d un programme à l entrée d un autre à l aide du caractère bien connu. Un tube anonyme correspond à un fichier sans nom et est connu que par le processus père et ses processus fils. Pour sa part, un tube nommé correspond aussi à un fichier, mais à un fichier ayant un nom. Il peut être utilisé par plusieurs processus (sans avoir besoin de lien de parenté père-fils) pourvu que ceux-ci connaissent son nom et qu ils aient les droits d accès nécessaires pour y accéder. La liste des tubes nommés peut être obtenue grâce à la commande «ls lf» qui liste les fichiers d un répertoire. Les tubes ont un type de fichier «p». Une autre différence entre les tubes nommés et ceux anonymes est que l on peut indiquer un option supplémentaire lors de l ouverture d un tube. Cet option permet d indiquer si le tube est en lecture/écriture seulement et si il est bloquant ou non. S il est bloquant, lorsque le tampon est plein et qu un processus tente d écrire dedans, celuici sera bloqué et c est la même chose lorsqu un processus lit un tube vide. IPC (inter process communication / System V IPC Facilities) Les IPC forment un groupe de trois(3) outils de communication qui n appartiennent pas au système de gestion de fichiers. Ils sont composés des files de messages, des régions de mémoire partagée et des sémaphores. Ils sont gérés séparément dans des tables du système et sont identifiés de manière unique par une clé de type (key_t). La commande «ipcs» permet justement d obtenir la liste des outils IPC présentement existants dans le système. Ils sont identifiables par leur type (soit q pour message queues, s pour sémaphores et m pour les zones/régions de mémoires partagées). Files de messages (Message queues) Le noyau Linux gère un maximum de 128 files de messages par défaut qui peuvent contenir des messages d une taille maximale de 4 056 octets. Une qualité importante des files de messages est leur lien 30 Les (deux) 2 figures précédentes ont été prisent sur la page web «http://www.zeitoun.net/index.php?2004/09/26/17- communication-par-tuyau» Page 36 sur 44

bidirectionnel, c est-à-dire qu un processus peut lire et écrire dans une file. La communication dans une file est de type «boîte aux lettres». Chaque message comporte deux(2) parties dont un type (entier) qui permet d identifier le destinataire du message et une seconde partie qui contient le message. L envoie d un message se fait à l aide de la primitive msgsend() : Int msgsend (int idint, const void *msg, int longueur, int option); 1. idint : identificateur de la file de messages 2. *msg : adresse du message en mémoire 3. longueur : taille du message (données seulement) 4. option : envoie bloquant ou non (IPC_NOWAIT) La réception d un message se fait tant qu à elle, à l aide de la primitive msgrcv() : Int msgrcv (int idint, const void *msg, int longueur, long letype, int option); 1. idint : identificateur de la file de messages 2. *msg : adresse en mémoire pouvant recevoir le message 3. longueur : taille du message (données seulement) 4. letype : valeur servant à identifier quel message sera extrait de la file dans le cas où il existe plusieurs messages du même type 5. option : réception bloquante ou non (IPC_NOWAIT) Mémoire partagée (Shared memory) La mémoire d un processus pouvant être partagée et donc accessible par plus d un processus est appelée «mémoire partagée». Elle est créée par la primitive shmget() et est accessible par un processus si celui-ci connait son identification externe et s il a les droits d accès requis. Le partage de cette zone de mémoire implique qu elle doit être synchronisée lors des différents accès à celle-ci par les processus pour rester cohérente. La synchronisation peut être réalisée par le dernier outil des IPC, soit les sémaphores. À la fin du dernier processus, il ne faut pas oublier d éliminer la zone de mémoire partagée avec la primitive shmctl(), car celle-ci ne sera pas détruite et les segments resteront utilisés à la fin de l exécution du processus. Sémaphores (System V Semaphore) Les sémaphores du système V sont une généralisation des sémaphores de dijkstra utilisées avec POSIX. Ils servent à faire la gestion des accès concurrents à une ou des ressources par des processus en Page 37 sur 44

implémentant les régions critiques. Chaque ensemble de sémaphores est repéré par une clef qui représente un tableau de sémaphores. Un sémaphore en système V, est constitué de : 1. La valeur du sémaphore. 2. Le numéro du dernier processus l'ayant manipulé. 3. Le nombre de processus en attente d'une augmentation. 4. Le nombre de processus en attente d'une mise à zéro. Ils permettent d éviter les verrous mortels (dead lock) grâce à leur garantie d atomicité d opérations sur un ensemble de sémaphores. Seulement un processus à la fois peut modifier les sémaphores. En fait, tous les sémaphores sont modifiés ou aucun lors d une opération. Lorsqu'un processus est mis en attente d'un événement, tous les sémaphores qui ont été modifiés par la primitive semop sont restaurés afin de garantir l'atomicité (sem_undo). Page 38 sur 44

Conclusion Personnellement, nous avons constaté, à notre grand étonnement, que Windows possède plusieurs mécanismes et qualités que nous ne soupçonnions. De plus, certains aspects de Windows ressemblent beaucoup à Linux surtout en ce qui à trait à la communication interprocesssus. D autres sont plutôt différents, mais globalement équivalents. Il est à noté que nous nous considérons très chanceux d avoir eu accès à autant de bonne documentation concernant Windows étant donné la teneur propriétaire du système comparativement à Linux. Étant donné que ce document fait déjà plusieurs dizaines de pages, que nous considérons sincèrement bien remplis, nous avons omit la section traitant des mécanismes de synchronisation. De plus, nous considérons que ce sujet à déjà été bien couvert dans le cours. Éventuellement, il serait intéressant d approfondir d autres aspects traités dans ce document pour faire ressortir davantage les similitudes. Une suite honnête à ce document pourrait porter sur les différences et similitudes du point de vue usager des systèmes, plutôt que dans le fonctionnement même! Page 39 sur 44

Annexes Liste des répertoires principaux et leur rôle /bin les fichiers exécutables (en binaire) (initialisation du système + commandes "essentielles") /boot le noyau vmlinuz et les fichiers de démarrage /dev répertoire de fichiers spéciaux, qui servent de canaux de communication avec les périphériques (disques, adaptateur réseau, cartes son etc...) /etc les fichiers de configuration du système et les principaux scripts de paramétrage o o o o o /etc/rc.d scripts de démarrage du système /etc/x11 scripts de configuration du serveur X /etc/sysconfig configuration des périphériques /etc/cron description des tâches périodiques à effectuer /etc/skel fichiers recopiés dans le rép. personnel d'un nouvel utilisateur /home la racine des répertoires personnels des utilisateurs /lib les bibliothèques et les modules du noyau /mnt la racine des points de montage des systèmes de fichiers périphériques ou extérieurs (cd, disquette, nfs..). /opt lieu d'installation d'applications supplémentaires (comme staroffice, java..) /root répertoire personnel du super-utilisateur root /sbin les fichiers exécutables pour l'administration du système /tmp stockage des fichiers temporaires /usr programmes accessibles à tout utilisateur; sa structure reproduit celle de la racine / /var données variables liées à la machine (fichiers d'impression, traces de connexions http, smb.. dans /var/log) /proc ce pseudo-répertoire contient une "image" du système ( /proc/kcore est l'image de la RAM Page 40 sur 44

8 états d un cadre sous Windows État Définition Valide Page utilisée par un processus et possédant une entrée valide dans la PTE. Transition État dans lequel une page attend d être transférer vers ou chargée depuis le disque. Attente («Standby») Page dont l utilisation par un processus vient de se terminer. L entrée correspondante dans la PTE prend l état invalide et en transition. Modifié Page dont la modification par un processus vient de se terminer et dont le VMM va e charger d enregistrer sur le disque. L entrée correspondante dans la PTE prend l étant invalide et en transition. Modifié, sans écriture Page dont la modification par un processus vient de se terminer, et dont le VMM ne va («No-Write») pas enregistrer la nouvelle version de la page sur disque, mais va plutôt se contenter d inscrire l événement dans un log. L entrée correspondante dans la PTE prend l étant invalide et en transition. Libre («Free») Page utilisée par aucun processus et dont aucune PTE ne pointe vers elle. «Zeroed» Page libre dont la valeur est essentiellement une suite de zéros et est ainsi prête à être utilisée par un autre processus. Invalide («Bad») Page générant une erreur d E/S matériel. Partitions de l espace virtuelle d un processus sous Windows Partition NULL-pointeur assignment Dos compatibility User-mode Off-Limit Shared Memory-Mapped File Kernel-Mode Rôle Zone toujours interdite d'accès pour capturer les erreurs liées aux pointeurs NULL. Cette zone de 4 Mo existe pour maintenir la compatibilité avec les applications Dos et Windows 16 bits. Espace mémoire utilisable par un processus. Avant de pouvoir lire ou écrire dans cette zone, le processus doit faire une demande d'allocation mémoire Protéger d'éventuels overflows la zone système en créant délibérément une frontière-tampon de 64 Ko interdite d'accès. Zone de chargement des données partagées entre tous les processus (Kernel32.dll, User32.dll,...) et des fichiers mappés. Zone où réside le code du système d'exploitation. Page 41 sur 44

Liste des signaux Unix/Linux Numéro Nom Signification 1 SIGHUP Fin de session 2 SIGINT Interruption 3 SIGQUIT Instruction 4 SIGILL Instruction illégale 5 SIGTRAP Trace 6 SIGABRT Instruction IOT ou abort 7 SIGEMT Instruction EMT 8 SIGFPE Exception arithmétique 9 SIGKILL 10 SIGBUS «Bus error» 11 SIGSEGV Violation de mémoire 12 SIGSYS Erreur appel système 13 SIGPIPE Écriture dans un pipe sans lecteur 14 SIGALRM Alarme de l'horloge 15 SIGTERM Signal de terminaison 16 SIGURG Information urgente sur socket 17 SIGSTOP Demande de suspension 18 SIGTSTP Demande de suspension depuis le terminal 19 SIGCONT Demande de reprise de processus 20 SIGCHLD Terminaison d'un processus fils 21 SIGTTIN Lecture au terminal en background 22 SIGTTOU Écriture au terminal en background 23 SIGIO Occurrence d'événement scruté 24 SIGXCPU Temps CPU maximal écoulé 25 SIGXFSZ Taille maximale de fichier atteinte 26 SIGVTALRM Horloge virtuelle 27 SIGPROF Horloge 28 SIGWINCH Changement de taille de fenêtre 29 SIGINFO 30 SIGUSR1 Signal 2 pour utilisateurs 31 SIGUSR2 Signal 2 pour utilisateurs 32 SIGUNUSED Non utilisé La liste des signaux, ainsi que les différentes fonctions de manipulation des signaux sont définies dans les fichiers /usr/include/signal.h et /usr/include/bits/signum.h. Page 42 sur 44

Références Wikipedia. NTFS. < http://en.wikipedia.org/wiki/ntfs >. Wikipedia. Ext2. < http://en.wikipedia.org/wiki/ext2 >. ac-creteil.fr. Systèmes de fichiers LINUX. < http://www.ac-creteil.fr/reseaux/systemes/linux/systemes-fichiers.html >. Wikipedia. Virtual Memory. < http://fr.wikipedia.org/wiki/m%c3%a9moire_virtuelle >. minso.free.fr. La mémoire virtuelle. < http://minso.free.fr/cavinfo/systeme/memoirevirtuelle.html >. Quartzkyte. La Mémoire Virtuelle. < http://homeordi.free.fr/viewpage.php?page_id=20 >. CCM. Système de fichiers. < http://www.commentcamarche.net/repar/filesys.php3 >. Linux Plus-Value. Defragmentation de Ext2. < http://www.linuxplusvalue.be/mylpv.php?id=20 >. LinuxHQ. The Linux Kernel. < http://www.linuxhq.com/guides/tlk/tlk.html >. comptechdoc.org. Linux Signals. < http://www.comptechdoc.org/os/linux/programming/linux_pgsignals.html >. Linux Plus-Value. Les signaux Linux/Unix. < http://www.linuxplusvalue.be/mylpv.php?id=185 > ZEiTOUN.NET. Communication par tuyau. < http://www.zeitoun.net/index.php?2004/09/26/17- communication-par-tuyau > science.unitn.it. Shared Memory. < http://www.science.unitn.it/~fiorella/guidelinux/tlk/node59.html > IPC System V. Segment de mémoire partagée. < http://www-igm.univmlv.fr/~dr/xpose2001/perlipc/segmentde%20m%e9m.html > IPC. Semaphores. < http://www.cs.cf.ac.uk/dave/c/node26.html > SAMS. The Linux Process Scheduler. < http://www.samspublishing.com/articles/printerfriendly.asp?p=101760&rl=1 > P. Sens. Cours sur l ordonnancement. < http://www-licence.ufr-info-p6.jussieu.fr/lmd/licence/2005/ue/li324-2006fev/public/ordonnancement.html > Informit.com. Linux Scheduling and Kernel synchronization < http://www.informit.com/articles/article.asp?p=414983&rl=1 > Page 43 sur 44

Deitel Deitel Choffnes (third edition), Operating Systems, Pearson Prentice Hall Joëlle Delacrois, Linux Programmation Système et réseau, Dunod Gabriel Girard, Notes de cours IFT518, Université de Sherbrooke Silberschatz Galvin Gagne (seventh edition), Operating System Concepts, Wiley Page 44 sur 44