INTRODUCTION AUX SYSTÈMES
D’EXPLOITATION
Diomède Nzisabira
Avant-propos
L’Université virtuelle africaine (UVA) est fière de participer à l’accès croissant à l’éducation dans les pays africains grâce à la production de matériaux d’apprentissage de qualité. Nous sommes également fiers de contribuer à la connaissance globale car nos ressources éducatives ouvertes sont principalement accessibles depuis le continent africain.
Ce module a été développé dans le cadre d’un programme de diplôme et d’études en
informatique appliquée, en collaboration avec 18 institutions partenaires africaines de 16 pays.
Au total, 156 modules ont été développés ou traduits pour assurer la disponibilité en anglais, en français et en portugais. Ces modules ont également été mis à disposition en tant que ressources éducatives ouvertes (OER) sur oer.avu.org.
Au nom de l’Université virtuelle africaine et de notre patron, nos institutions partenaires, la Banque africaine de développement, je vous invite à utiliser ce module dans votre institution, pour votre propre éducation, à le partager aussi largement que possible et à participer
activement à l’AVU Communautés de pratique de votre intérêt. Nous nous sommes engagés à être en première ligne de développement et de partage de ressources éducatives ouvertes.
L’université virtuelle africaine (UVA) est une organisation intergouvernementale panafricain créée par une charte qui a pour mandat d’augmenter considérablement l’accès à une éducation et à une formation supérieures de qualité grâce à l’utilisation innovante des technologies de communication d’information. Une charte établissant l’UVA en tant
qu’organisation intergouvernementale a été signée à ce jour par dix-neuf (19) gouvernements africains - Kenya, Sénégal, Mauritanie, Mali, Côte d’Ivoire, Tanzanie, Mozambique, République démocratique du Congo, Bénin, Ghana, République de Guinée, Burkina Faso, Niger, Soudan du Sud, Soudan, Gambie, Guinée-Bissau, Éthiopie et Cap-Vert.
Les institutions suivantes ont participé au Programme des sciences informatiques appliquées:
(1) Université d’Abomey Calavi au Bénin; (2) Université de Ougagadougou au Burkina Faso;
(3) Université Lumière de Bujumbura au Burundi; (4) Université de Douala au Cameroun; (5) Université de Nouakchott en Mauritanie; (6) Université Gaston Berger au Sénégal; (7) Université des Sciences, Techniques et Technologies de Bamako au Mali (8) Institut de gestion et
d’administration publique du Ghana; (9) Université Kwame Nkrumah de Science et Technologie au Ghana; (10) L’Université Kenyatta au Kenya; (11) Egerton University au Kenya; (12) Université d’Addis-Abeba en Ethiopie (13) Université du Rwanda; (14) Université de Dar es-Salaam en Tanzanie; (15) Université Abdou Moumouni de Niamey au Niger; (16) Université Cheikh Anta
Diop au Sénégal; (17) Université Pedagógica au Mozambique; Et (18) L’Université de Gambie en Gambie.
Bakary Diallo Le Recteur
Université virtuelle africaine
Auteur
Diomede Nzisabira
Pair Réviseur
Sagbo Romaric
UVA – Coordination Académique
Dr. Marilena Cabral
Coordinateur global Sciences Informatiques Apliquées
Prof Tim Mwololo Waema
Coordinateur du module
Victor Odumuyiwa
Concepteurs pédagogiques
Elizabeth Mbasu Benta Ochola Diana Tuel
Equipe Média
Sidney McGregor Michal Abigael Koyier
Barry Savala Mercy Tabi Ojwang
Edwin Kiprono Josiah Mutsogu
Kelvin Muriithi Kefa Murimi
Victor Oluoch Otieno Gerisson Mulongo
Droits d’auteur
Ce document est publié dans les conditions de la Creative Commons Http://fr.wikipedia.org/wiki/Creative_Commons
Attribution http://creativecommons.org/licenses/by/2.5/
Le gabarit est copyright African Virtual University sous licence Creative Commons Attribution- ShareAlike 4.0 International License. CC-BY, SA
Supporté par
Projet Multinational II de l’UVA financé par la Banque africaine de développement.
Avant-propos 2
Crédits de production 3
Droits d’auteur 4
Supporté par 4
Aperçu sur du cours 10
Bienvenu dans le module d’introduction au système d’exploitation 10
Prérequis 10
Matériels 10
Objectifs du module 10
Unités 11
Unité 1: Principes des SE 11Unité 2: Gestion des processus 11
Unité 3: Gestion de la mémoire 11
Unité 4 : Gestion des périphériques et systèmes de fichiers 11
Unité 5: La Sécurité et la protection 11
Unité 6: Thèmes spéciaux 11
Calendrier 11
Évaluation 12Ressources documentaires 13
Les ressources documentaires à consulter sont: 13Unité 0 13
Unité 1 13
Unité 2 13
Unité 3 13
Unité 4 13
Unité 5 14
Unité 6 14
Unité 0. Aperçu sur les systèmes d’exploitation 15
Qu’est-ce qu’un système informatique? 15
Introduction 15
Objectif de l’unité 15
Mots-clés 16
Activité 1 structure d’un système informatique 16
Introduction 16 1 Structure d’un ordinateur 16
2 Unité centrale de traitement 17
Résumé de l’unité 18
3 Mémoire centrale : 18
4 Les périphériques 18
Ressources documentaires 19
Évaluation de l’unité 19
Unité 1. Principes des Systèmes d’Exploitation 20
Quels sont les objectifs d’un système d’exploitation? 20Introduction 20
Objectifs 20
Mots-clés 20
Activité1 SE comme gestionnaire de ressources 21
Introduction 21 Évaluation de l’unité 21
Activité 2 Evolution des SE 22
Introduction 22 Activité 3 Structure d’un SE 23
Introduction 23 Évaluation 23
Évaluation 25
Résumé de l’unité 25
Lectures et autres ressources 26
Introduction 27
Objectifs 27
Mots-clés 28
Activité 1 Processus et threads 28
Introduction 28 Processus et Programme 29
Évaluation de l’unité 38
Activité 2 Communication interprocessus 38
Introduction 38 Évaluation de l’activité : 42
Activité 2 3: Ordonnancement de processus 43
Introduction 43 Évaluation de l’activité : 49
Activité 2 4 : Interblocages 52
Introduction 52 Évaluation de l’activité : 60
Résumé de l’unité 61
Évaluation de l’activité : 61
Lectures et autres ressources 62
Unité 3. Gestion de la mémoire 63
Comment se fait la gestion de la mémoire par le SE? 63Introduction 63
Objectifs 63
Mots-clés 63
Activité 1 Mémoire sans va-et-vient 64
Introduction 64 Évaluation de l’activité : 68
Activité 3 2 : Le va-et-vient 68
Introduction 68
Évaluation de l’activité : 72
Activité 3 La mémoire virtuelle 72
Introduction 72 Évaluation de l’unité : 79
Résumé de l’unité 80
Évaluation de l’unité d’apprentissage 80
Lectures et autres ressources 82
Unité 4. Gestion des périphérique et système de fichiers 83
Introduction 83Objectifs 83
Mots-clés 84
Activité 1 Gestion des périphériques 84
Introduction 84 Activité 2. Le Système de fichiers 89
Introduction 89 Évaluation de l’activité 89
Évaluation de l’activité 94
Activité 3.Organisation de l’espace des ressources et des fichiers 94
Introduction 94 Évaluation de l’activité 102
Lectures et autres ressources 103
Résumé de l’unité 103
Évaluation de l’unité d’apprentissage 103
Unité 5. Sécurité et protection 104
Introduction 104Objectifs 104
Mots-clés 104
Activité 1 Aperçu général sur la sécurité 105
Introduction 105
Évaluation de l’unité: 106
Activité 3 Les mécanismes de protection 108
Introduction 108 Évaluation de l’activité 108
Évaluation de l’activité 109
Lectures et autres ressources 110
Résumé de l’unité 110
Évaluation de l’unité 110
Unité 6. Thèmes spéciaux 111
Activité 1. Configuration et maintenance des SE 111Introduction 111 Évaluation de l’activité 118
Activité 6 2 : Système temps réel 118
Introduction 118 Évaluation de l’unité 120
Activité 3 Virtualisation 120
Introduction 120 Évaluation de l’activité 129
Résumé de l’unité 129
Évaluation de l’unité 130
Lectures et autres ressources 130
Aperçu sur du cours
Bienvenu dans le module d’introduction au système d’exploitation
Un système d’exploitation (SE) est le centre névralgique de toute activité de traitement d’information sur un ordinateur. Un système d’exploitation est un programme qui fait fonctionner les autres programmes ainsi que la partie matérielle de l’ordinateur. Il agit comme un intermédiaire entre l’utilisateur, les logiciels d’application et la partie matérielle de la machine. Ce cours introduit les principes fondamentaux des systèmes d’exploitation, de sa structure et de son fonctionnement. Il traite l’ensemble des techniques matérielles et logicielles utilisées pour construire un SE et permet également d’acquérir des connaissances en rapport avec l’installation et la maintenance des SE.
Prérequis
Pour mieux aborder ce cours, il est préférable que l’apprenant ait des connaissances en architecture des ordinateurs, en structure de données.
Matériels
Le matériel nécessaire pour accomplir ce cours est:
• Un ordinateur ;
• Des SE (Windows et Linux) ;
• Une connexion Internet ;
• Un navigateur.
Objectifs du module
A la fin de ce module, l’apprenant devra être capable de:
• Définir un Système d’Exploitation;
• Expliquer la structure de base et le fonctionnement des systèmes d’exploitation;
• Fixer les problèmes en rapport avec la gestion des processus, la synchronisation, et proposer des solutions appropriées;
• Expliquer les bases de la gestion de la mémoire, l’utilisation de la mémoire virtuelle, et la structure des fichiers systèmes;
• Décrire les menaces et les mécanismes de protection des systèmes d’exploitation;
• Virtualiser les Système d’Exploitations et les applications.
Unités
Unité 1: Principes des SE
Cette unité passe en revue les principes fondamentaux des SE. Elle présente le SE comme une machine virtuelle évolutive et comme un gestionnaire d’événements et des tâches.
Unité 2: Gestion des processus
Cette unité expose les notions de processus, types de processus, des états d’un processus, de la gestion des threads, de l’ordonnancement, de la Communication interprocessus.
Unité 3: Gestion de la mémoire
Cette unité présente les différents types de mémoire ainsi que les mécanismes de leur gestion.
Unité 4 : Gestion des périphériques et systèmes de fichiers
Cette unité porte sur la notion de périphériques et de système de fichiers. Elle présente la structure des fichiers, les types de fichiers, les différents accès aux fichiers, l’implantation d’un système de fichiers ainsi que leur gestion.
Unité 5: La Sécurité et la protection
Cette unité traite la notion de sécurité et protection. Elle présente les menaces pour la sécurité, les problèmes de sécurité et la manière d’y faire face.
Unité 6: Thèmes spéciaux
Cette unité concerne les préalables lors de l’installation des SE (Windows et Linux), l’introduction aux systèmes embarqués et temps réel ainsi que la notion de virtualisation.
Calendrier
Unité Activités Période
Principes des Systèmes d’Exploitation
Activité 1:SE comme gestionnaire de ressources Activité 2:SE comme machine virtuelle
Activité 3: SE comme logiciel évolutif
1H
Gestion de processus
Activité 2.1 : Processus et threads
Activité 2.2 : Communication interprocessus Activité 2.3 : Ordonnancement de processus Activité 2.4 : Interblocages
6H 6H 6H 6H
Gestion de la mémoire
Activité 3.1 : Mémoire sans va-et-vient Activité 3.2 : Le va-et-vient
Activité 3.3 : La mémoire virtuelle
5H 5H 6H Gestion et
périphérique et système de fichiers
Activité 4.1 : Gestion des périphériques Activité 4.2 : Le Système de fichiers
Activité 4.3 : Organisation de l’espace des ressources et des fichiers
3H 3H 3H
Sécurité et protection
Activité 5.1 : Les bases de sécurité Activité 5.2 : Les attaques du système Activité 5.3 : Les mécanismes de protection
3H 3H 4H Thèmes
spéciaux
Activité 6.1 : Configuration et maintenance des SE Activité 6.2 : Les systèmes embarqués
Activité 6.3 : Les systèmes temps réels Activité 6.4 : La virtualisation
5H 5H 5H 5H
Évaluation
1 Evaluation
continue pondération (%)
1.1 Test I 10
1.2 Test II 15
1.3 Travail à domicile
10
1.4 Projet 25
2 Examen final 40
Total 100
Ressources documentaires
Les ressources documentaires à consulter sont:
Unité 0
https://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Architecture/
http://dept-info.labri.fr/ENSEIGNEMENT/archi/cours/archi.pdf
Unité 1
https://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Architecture/
http://dept-info.labri.fr/ENSEIGNEMENT/archi/cours/archi.pdf
http://www-int.impmc.upmc.fr/impmc/Enseignement/ye/informatique/systemes/chap1/13.html Andrew Tanenbaum, Systèmes d’exploitation 2ème édition, chapitre 1
Unité 2
Dijkstra, E.W., 1965. Solution of a Problem in Concurrent Programming Control.
Habermann, A.N. Prevention of System Deadlocks. CACM, Vol. 12, No. 7, July 1969, pp.
373-385.
Andrew Tanenbaum, Systèmes d’exploitation (2ème édition) page 169-195 http://www.groupes.polymtl.ca/inf3600/TransparentsAut2006/Ch1INF3600.pdf
Unité 3
Dijkstra, E.W., 1965. Solution of a Problem in Concurrent Programming Control.
Habermann, A.N. Prevention of System Deadlocks. CACM, Vol. 12, No. 7, July 1969, pp.
373-385.
Andrew Tanenbaum, Systèmes d’exploitation (2ème édition) page 201-278
Unité 4
Andrew Tanenbaum, Systèmes d’exploitation, 2eme édition, chapitre 6
Unité 5
https://www.google.com/search?q=Alexandre+viardin&ie=utf-8&oe=utf-8 ftp://ftp.pgpi.org/pub/pgp/6.5/docs/french/IntroToCrypto.pdf
Andew Tanenbaum, Systèmes d’exploitation 2ème édition, chapitre 9 https://www.irit.fr/~Zoubir.Mammeri/Cours/M1ASTRE/Chapitre1.pdf http://lanteri.isabelle.perso.sfr.fr/files/noyau1.pdf
Unité 6
http://sist.sysu.edu.cn/~isscwli/OSRef/Abraham%20Silberschatz-Operating%20System%20 Concepts%20%289th,2012.12%29.pdf
https://www.irit.fr/~Zoubir.Mammeri/Cours/M1ASTRE/Chapitre1.pdf http://lanteri.isabelle.perso.sfr.fr/files/noyau1.pdf
http://perso-etis.ensea.fr/miramond/Enseignement/M1/IE/Cours/CoursAndry_TR.pdf
Unité 0. Aperçu sur les systèmes d’exploitation
Qu’est-ce qu’un système informatique?
Introduction
Un système est un ensemble d’éléments interagissant entre eux selon certains principes ou règles. Un système est déterminé par :
• la nature de ses éléments constitutifs ;
• es interactions entre ces derniers ;
• sa frontière, c’est-à-dire le critère d’appartenance au système (déterminant si une entité appartient au système ou fait au contraire partie de son environnement) ;
• ses interactions avec son environnement.
Avec cette définition générique on peut alors se demander ce que c’est un système
informatique. Et qu’est-ce qu’un système informatique possède de spécifique par rapport aux autres systèmes ?
Objectif de l’unité
A la fin de cette unité d’apprentissage, les apprenants devront être à mesure de :
• définir un système informatique ;
• identifier les composants d’un système informatique ;
• définir un système d’exploitation.
Mots-clés
Ordinateur: Un ordinateur est une machine électronique qui fonctionne par la lecture séquentielle d’un ensemble d’instructions, organisées en programmes, qui lui font exécuter des opérations logiques et arithmétiques sur des chiffres binaire.
Informatique : L’informatique est le domaine d’activité scientifique, technique et industriel concernant le traitement automatique de l’information via l’exécution de programmes par ordinateur.
Système d’exploitation : Un logiciel système qui fait fonctionner les autres programmes (application)
Système Informatique : Un ensemble d’équipements destiné au traitement (enregistrement, modification, suppression, restitution) automatique de l’information.
Activité 1. structure d’un système informatique
Introduction
Un système informatique peut être défini comme un ensemble de moyens matériels et logiciels nécessaire pour satisfaire les besoins en traitement, conservation et restitution des données des utilisateurs. Un ordinateur est une machine électronique ayant des composants matériels et logiciels.
1 Structure d’un ordinateur
La structure de base d’un ordinateur comprend les éléments fondamentaux suivants :
• Une unité centrale de traitement (unité centrale).
• Une unité de mémoire, appelée mémoire centrale.
• Des unités de stockage.
• Des unités d’entrée/sortie.
• Un système de bus permettant de véhiculer l’information entre l’unité centrale et les autres unités.
Figure 1: Architecture d’un système informatique
Les différents constituants de l’ordinateur sont composés de circuits électroniques ou d’éléments magnétiques. Ils fonctionnent donc avec des impulsions électriques ou font intervenir un champ magnétique, et donnent lieu à deux états (ouvert ou fermé) ou bien (nord ou sud).
L’information élémentaire est le ‘Bit’ un bit ne peut prendre que deux valeurs notées : 0 et 1.
2 Unité centrale de traitement
L’unité centrale de traitement ou CPU (Central Processing Unit) est le centre de calcul et de contrôle d’un ordinateur, elle constitue le « cerveau » de l’ordinateur.
L’unité centrale qui réalise toutes les opérations demandées, elle est matérialisée
physiquement par un circuit électronique appelé « microprocesseur ». Un microprocesseur est caractérisé par :
• Sa marque (Intel ou cyrix).
• Sa fréquence d’horloge : le nombre d’opération que le microprocesseur peut effectuer en seconde (la fréquence atteint actuellement quelques Gigahertz).
1 KHz = 210 Hz 1 MHz = 220 Hz 1 GHz = 230 Hz
L’unité centrale comporte les éléments suivants :
• Unité arithmétique et logique : L’UAL est l’organe qui permet d’effectuer des opérations arithmétiques (addition, soustraction, multiplication, division), des opérations logiques (par exemple des comparaisons).
• Unité de commande : L’unité de commande gère le déroulement des instructions.
Elle décode et exécute les instructions demandées.
3 Mémoire centrale :
La mémoire centrale est un organe de l’ordinateur permettant d’enregistrer, de stocker et de restituer les informations. La mémoire centrale se présente sous la forme de petites barrettes que l’on peut enficher dans des supports, appelés Slots. La mémoire centrale d’un ordinateur est séparée en deux sections : la mémoire vive (mémoire volatile destinée à être lue et écrite) et la mémoire morte (mémoire non volatile destinée à être lue).
4 Les périphériques
Les périphériques sont les organes de l’ordinateur qui permettent de communiquer avec l’unité centrale et de stocker les informations d’une façon permanente. On en distingue trois catégories à savoir : les périphériques d’entrée, les périphériques de sortie et les périphériques d’entrée-sortie.
Résumé de l’unité
Un système d’exploitation est un logiciel fondamental pour la machine. C’est lui qui fait fonctionner les éléments matériels et logiciels de l’ordinateur. Le système d’exploitation fournit des services aux utilisateurs et aux programmes en cours d’exécution sur un système informatique. Un système d’exploitation est conçu avec des compromis sur les performances, la sécurité, la compatibilité et la maintenabilité.
Évaluation de l’unité
Cette évaluation est composée par une série de question de simple compréhension
Question1 :
Qu’est-ce qu’un ordinateur ? Question 2 :
Quels sont les principaux composants d’un ordinateur ? Question 3 :
Qu’est-ce qu’un périphérique ? Donnez les trois grandes catégories de périphériques
Question 4 :
Qu’est-ce qu’un système informatique ? Question 5 :
A quoi sert un système d’exploitation Système de notation :
• Pour toute réponse incorrecte (0 points)
• Pour une réponse incomplète (0,5 points)
• Pour toute réponse correcte (1 point) Rappel
Un ordinateur est composé essentiellement de deux grandes parties à savoir la partie matérielle et la partie logiciel.
Le système d’exploitation offre les services aux utilisateurs et aux autres composants du système informatique.
Ressources documentaires
https://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Architecture/
http://dept-info.labri.fr/ENSEIGNEMENT/archi/cours/archi.pdf
Unité 1. Principes des Systèmes d’Exploitation
Quels sont les objectifs d’un système d’exploitation?
Introduction
Les fondements d’un SE peuvent être vus sous deux grands axes: niveau utilisateur et niveau système. De plus, de par sa nature logiciel et ses fonctionnalités, le système d’exploitation est appelé à évoluer avec le temps en fonction de l’évolution du matériel et des besoins des utilisateurs.
Ainsi, trois principaux vues caractérisent les SE:
1. point de vue gestionnaire de ressources;
2. point de vue machine virtuelles;
3. logiciel évolutif.
Objectifs
A la fin de cette unité d’apprentissage, l’apprenant devra être à mesure de:
• décrire les principes et les objectifs des SE;
• décrire les différentes vues des SE;
• identifier les éléments pouvant faire évoluer les SE.
Mots-clés
Machine virtuelle: C’est une machine, un système installé sur un autre système donnant l’impression d’une machine réel
Système évolutif: Système/Logiciel capable d’évoluer
Ressources: Ce terme est utilisé pour désigner n’importe quel composant (matériel et logiciel) de la machine interne à la machine ou connecté à
celle-ci.
Activité1. SE comme gestionnaire de ressources
Introduction
Le SE étant la partie qui fait fonctionner les composant d’un ordinateur, nous allons dans cette activité focaliser notre attention sur ce logiciel system. Qu’est-ce qu’un SE ?
Définition
Le système d’exploitation peut être défini comme programme système qui commande l’exécution de programmes d’application. Il est responsable pour le chargement et l’exécution de programmes d’application. Il doit veiller à la disponibilité des configurations matérielles et logicielles requises avant d’exécuter le programme d’application
Rôle d’un SE
Dans un système informatique, le SE est le programme qui agit comme intermédiaire entre l’utilisateur est la partie matérielle. Un système informatique possède un ensemble de ressources pour la circulation, le traitement et le stockage de données.
Ainsi, du point de vue machine, un SE peut être considéré comme gestionnaire de ressources.
Un ensemble de demande d’accès aux ressources, pouvant même générés des conflits sont gérés par le SE. C’est lui qui décide qui accède à telle ressource, pour telle durée en garantissant un fonctionnement efficace du système. Le SE contrôle également les dispositifs d’E/S et les logiciels d’application afin de garantir un bon fonctionnement du système.
Conclusion
Un SE est un logiciel indispensable pour le fonctionnement de l’ordinateur. Il joue le rôle d’intermédiaire entre la partie matérielle et les utilisateurs.
Évaluation de l’unité
Question 1 :
Distinguer les logiciels d’application des logiciels d’exploitation.
Question 2 :
Qu’est-ce qui garantit la bonne utilisation des ressources sur un ordinateur ? Question 3 :
Existe-t-il un logiciel d’application indispensable au fonctionnement de l’ordinateur ? Justifier votre réponse.
Rappel :
Un SE peut être défini comme logiciel système qui commande l’exécution de programmes d’application. Il contrôle les ressources et dispositif d’entrée-sortie afin de garantir le bon fonctionnement de tout le système.
Activité 2. Evolution des SE
Introduction
Les ordinateurs ont évolué dans le temps. Cette évolution a été largement influencée par l’évolution des SE. Mais quelles sont les évolutions qu’a connues le système d’exploitation ? Cette question sera répondue dans cette activité.
Evolution
Étudier l’évolution des systèmes d’exploitation est utilisé pour comprendre les exigences clés d’un système d’exploitation. De plus, elle aide à comprendre la signification des principales caractéristiques des systèmes d’exploitation modernes.
Les systèmes d’exploitation et l’architecture de l’ordinateur sont historiquement liés. La combinaison de l’architecture de l’ordinateur avec un système d’exploitation est connue sous le nom de plate-forme informatique. Ces changements architecturaux affectent la structure et la performance des systèmes d’exploitation.
Les premiers ordinateurs ne possédaient pas vraiment de système d’exploitation. Le moniteur était chargé avec l’unique programme à exécuter qui se greffait sur ce système rudimentaire tout comme une fonction ou un sous-programme se greffe aujourd’hui sur le programme principal. Les entrées-sorties étaient rudimentaires, réduites à un ruban perforé, les programmes écrits en langage machine, c’est à dire directement codés en suite de chiffres, exécutés pas à pas et modifiés directement en mémoire au moyen d’un jeu de clés !
Vers 1950 est apparu le moniteur d’enchaînement. Il permettait l’exécution d’une série de travaux en séquence, c’est à dire l’un après l’autre. C’est l’ancêtre du traitement par lot. Il possédait déjà des fonctions de protection: maximum de temps par travail, supervision des périphériques, protection de la zone mémoire utilisée, gestion et abandon des travaux erronés.
Ces avancées étaient fondamentales car elles introduisaient un environnement autour du programme à exécuter.
L’informatique moderne naît dans les années 1960. On peut résumer rapidement ses avancées autour de l’invention des notions suivantes :
• Apparition des processeurs d’entrées-sorties
• Multiprogrammation, c’est à dire possibilité d’exécuter plusieurs programmes simultanément.
• Compilateurs
• Temps partagé
• Mémoire paginée virtuelle. Elle permet de faire fonctionner un ensemble de programmes dont la taille est supérieure à celle de la mémoire physique.
• Les communications
Les éléments ci-dessus sont en grande partie tirés de :
http://www-int.impmc.upmc.fr/impmc/Enseignement/ye/informatique/systemes/chap1/13.html Pour d’autres détails reportez-vous à la référence ci-dessous :
Andew Tanenbaum, Systèmes d’exploitation 2ème édition, pages 8-34 Conclusion
L’évolution des systèmes d’exploitation au cours des dernières décennies le SE ont connu plusieurs étapes de leurs évolution. Des machines sans SE on est arrivé actuellement aux ordinateurs avec les systèmes distribués.
Évaluation
Question 1 :
Donner les grandes étapes de l’évolution des SE. Expliquer brièvement les caractéristiques de chaque étape.
Question 2 :
Comment l’évolution des SE a-t-elle influencé celle des ordinateurs ? Rappels :
Les SE d’exploitation ont passé par de grandes étapes. Des machines sans systèmes d’exploitation aux systèmes distribués ces évolutions vont de paires avec celles des ordinateurs.
Activité 3. Structure d’un SE
Introduction
Dans cette activité nous allons détailler la structure interne d’un système d’exploitation.
Plusieurs approches d’implémentation des SE existe, nous allons donner un aperçu sur quelques-uns. Il s’agit notamment des systèmes monolithiques, des systèmes en couche, des machines virtuelles, des exonoyaux et des systèmes client-serveur.Pour des détails sur cette activité reportez-vous sur la documentation suivante :Andew Tanenbaum, Systèmes d’exploitation 2ème édition, pages 59-66
Système monolithique
Le SE est une structure hiérarchique écrit comme un ensemble de procédures dont chacune peut appeler n’importe quelle autre en cas de besoin. La structure de base suggérée par cette organisation est la suivante :
• un programme principal qui invoque la procédure de service ;
• un ensemble de procédures de services qui gèrent les appels système ;
• un ensemble de procédures utilitaires auxiliaires des procédures.
Les systèmes en couche
L’organisation d’un système en une série de couches est une généralisation de la structure précédente. Le système était composé par une série de couches hiérarchiques.
• La couche 0 fournissait le service de multiprogrammation CPU.
• La couche 1 était en charge de la gestion de la mémoire et des tampons
• La couche 2 se chargeait de la communication interprocessus et console
• La couche 3 était en charge des entrées sorties
• La couche 4 contenait les programmes utilisateurs
• La couche 5 était le processus opérateur.
Machines virtuelles
La plus part du temps, les utilisateurs des ordinateurs sont assis devant leur PC (unité centrale + les différents périphériques).Cependant, dans d’autres cas, les utilisateurs sont en face d’un
terminal connecté à un mainframe ou ordinateur connecté à d’autres ordinateurs en réseau.
Dans le premier cas, le système est conçu de telle sorte qu’un seul utilisateur monopolise toutes les ressources. Ainsi l’objectif de tels systèmes est l’efficacité dans l’accomplissement des tâches soumises par l’utilisateur. Ces systèmes sont donc conçus de telle sorte qu’elles soient faciles à utiliser avec pour seule considération les performances du système, sans se soucier de l’utilisation des ressources.Dans le second cas (utilisation d’un terminal), la même ressource peut être demandée par plusieurs utilisateurs chacun assis devant son propre terminal.
Dans de tels cas, la conception de ces SE met un accès particulier sur l’accès aux ressources. Ils doivent garantir la disponibilité de ressources et un partage équitable entre les requérants.
En dernier lieu, on distingue de systèmes où l’utilisateur possède des ressources dédiées (utilisation d’un ordinateur personnel) mais comportant des ressources partagées (serveur de fichiers, serveur d’impression, etc.).
Dans ce cas, la conception de tels SE doit chercher un compromis entre la gestion des ressources et l’utilisation individuelle de la machine.
L’ensemble de ces situations et différentes exigences des utilisateurs, nous montre qu’un SE est un système conçu de telle sorte qu’il garantit une facilité d’utilisation, une disponibilité et un partage des ressources dans un environnement où les utilisateurs ont besoins et exigences différents.
Les exonoyaux
C’est un système qui donne à chaque utilisateur un clone de l’ordinateur réel mais seulement pourvu d’un sous ensemble de ses ressources. L’exonoyau est la couche la plus basse ayant pour rôle d’allouer des ressources pour les machines virtuelles et de vérifier les tentatives d’accès à ces dernières.
Le modèle client-serveur
C’est la tendance actuelle des SE. Elle consiste à implémenter la plus grande partie du SE sous forme de processus utilisateur. La demande d’un service passe par l’envoie du service demandeur (le client) d’une requête au service pourvoyeur (serveur) qui rend le service et renvoie le résultat.
Conclusion
Les différents modèles des SE reposent sur une architecture bien définie. La première approche était la structure monolithique. Cette approche a été améliorée passant de la structure en couche, a été considérablement améliorée pour arriver maintenant à la structure actuelle qui est le système client-serveur.
Évaluation
Types de questions : simple question de compréhension
Question 1 : Indiquer les différents modèles des structures interne des SE Question 2 : Pourquoi la structure monolithique était une sorte de gâchis ? Question 3 : Quelles sont les spécificités du modèle client-serveur ?
Rappel :
La structure interne des SE repose sur une architecture bien précise. Il existe plusieurs architectures permettant de distinguer les principaux systèmes suivants : systèmes monolithiques, des systèmes en couche, des machines virtuelles, des exonoyaux et des systèmes client-serveur. Chaque architecture possède des spécificités particulières qui la distinguent des autres.
Résumé de l’unité
Les principes et objectifs des SE permet de considérer un SE sous trois angles:
1. une machine virtuelle:
• intermédiaire entre l’utilisateur et la partie matérielle (agit comme machine virtuelle);
• cache à l’utilisateur les complexités matérielles;
• fournit à l’utilisateur une interface conviviale.
2. Un gestionnaire des ressources
• Assure une gestion des ressources en garantissant leur disponibilité et leur partage;
• Améliore l’utilisation des ressources.
3. Logiciel évolutif
Evolue pour s’adapter aux changements:
• nouveaux matériels.
• besoin de nouveaux services;
• correction des erreurs latentes.
Évaluation de l’unité d’apprentissage
Donner les réponses aux questions suivantes:
1. Comment se présente la structure interne de l’ordinateur ?
2. Comment le modèle client-serveur peut être utilisé sur un seul ordinateur ? 3. Donner les avantages du SE comme machine virtuelle.
4. Quels sont les objectifs d’un SE ? Comment percevez-vous le SE comme gestionnaire de ressource ?
Système de notation :
L’évaluation de cette unité compte pour 20% répartie comme suit :
• L’évaluation des activités d’apprentissage : 10%
• L’évaluation des unités : 10%
Rétroaction
Critères d’évaluation
• Questions/Evaluation non répondues ou mal répondues : Echec
• Questions/Evaluation répondues partiellement ou réponse partiellement correcte : Moitié de point pour la question/évaluation correspondante
• Toutes les évaluations sont faites avec des réponses correctes : Totalité des points
Lectures et autres ressources
https://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Architecture/
http://dept-info.labri.fr/ENSEIGNEMENT/archi/cours/archi.pdf
http://www-int.impmc.upmc.fr/impmc/Enseignement/ye/informatique/systemes/chap1/13.html Andew Tanenbaum, Systèmes d’exploitation 2ème édition, chapitre 1
Unité 2. Gestion de processus
Introduction
La conception d’un système d’exploitation est intimement liée à la notion de processus. Un processus représente une abstraction d’un programme en cours d’exécution. L’exécution d’un processus suppose l’utilisation de ressources machines. Ces dernières étant limitées, l’intention d’y accéder à plusieurs crée la concurrence. Au cours de cette unité, nous allons présenter:
• la notion de processus;
• les états d’un processus;
• la gestion des threads;
• les communications inter-processus ; ainsi que
• l’interblocage (deadlock).
Objectifs
A la fin de ce chapitre, l’apprenant devra être à mesure de:
• Définir un processus et les threads;
• Décrire les différents états des processus;
• Différencier les processus et les threads;
• Démontrer une bonne connaissance de la gestion des processus et des threads;
• Démontrer une bonne connaissance des interblocages.
Mots-clés
Processus : Un processus est un programme en cours d’exécution auquel est associé un environnement processeur (Compteur Ordinal, Registre d’Etat, RSP , registres généraux) et un environnement mémoire appelés contexte du processus
Ressource : Une désigne toute entité dont a besoin un processus pour s’exécuter
Multiprogrammation : En Système d’Exploitation (SE), la multiprogrammation est la capacité d’un système d’exécuter à la suite plusieurs activités sans l’intervention de l’utilisateur. C’est une des premières capacités fournies par les SE dès la fin des années 1950.
Thread : Les threads sont des entités planifiées pour leur exécution par le processeur. Les threads autorisent les exécutions multiples dans le même environnement de processus avec une marge d’indépendance les uns par rapport aux autres.
Programme : C’est une suite ordonnée d’instructions élémentaires en vue d’accomplir une tâche donnée.
Concurrence : Les faits que deux ou plusieurs processus concourent à l’accès à une même ressource.
Ordonnancement : L’Ordonnancement est le fait d’agencer les processus par ordre de priorité.
Interblocage : C’est un état qui se produit lorsque deux processus concurrentes s’attendent mutuellement (l’un détenant la ressource que l’autre a besoin).
Activité 1. Processus et threads
Introduction
Tous les ordinateurs modernes sont capables de faire plusieurs tâches simultanément (exécuter un programme utilisateur par exemple et afficher du texte ainsi qu’effectuer des lectures sur disque, etc.). Dans un système multiprogrammé, le processeur bascule entre programme pour les servir en raison de petit laps de temps (au tour des dizaines ou centaines de millisecondes) ce qui fait que le processeur puisse intervenir pour plusieurs programmes à raison d’une seconde simulant ainsi le parallélisme. Pour le vrai parallélisme on a des systèmes multiprocesseurs se partageant la même mémoire physique. Le modèle conceptuel des processus séquentiels permettant de gérer le parallélisme ainsi que certaines de ses conséquences seront abordés dans cette activité.
Processus et Programme
Par définition, un processus est une abstraction d’un programme en cours d’exécution. Le processus est représenté dans le système par un PCB (Process Control Block), possède un état, peut communiquer des informations avec d’autres processus et peut concourir avec d’autres processus pour l’obtention d’une ressources.
Conceptuellement, un processus modélise l’exécution d’un programme sur un processeur virtuel disposant:
• d’un compteur ordinal;
• d’un jeu de registre;
• de mémoire;
• etc.
Le processeur physique commute entre les processus sous la direction d’un ordonnanceur.
Figure 2: Commutation entre processus
Dans le cas de systèmes à temps partagé, tous les processus progressent dans le temps, mais un seul s’exécute à la fois.Lorsque le processeur passe d’un processus à un autre la vitesse de traitement de processus n’est pas uniforme, ni même reproductible si le même processus s’exécutait une autre fois.Mais Quelle est la différence entre un processus et un programme?
L’analogie ci-dessus peut aider à mieux les différencier. Prenons un informaticien en train de confectionner un gâteau d’anniversaire de sa petite amie. Il dispose de:
• une cuisine équipée;
• la recette du gâteau;
• tous les ingrédients nécessaires: farine, œufs, etc.
Dans cette métaphore, la recette représente le programme, (algorithme exprimé dans la notation appropriée), l’informaticien représente le processeur (l’unité centrale) et les ingrédients sont des données d’entrée.Le processus est l’activité qui consiste à confectionner le gâteau: lecture de la recette, mélange des ingrédients, cuisson.
Soupons que notre informaticien se mette à hurler car piqué d’une guêpe.Son cerveau enregistre le point où il s’est arrêté dans la préparation du gâteau (l’état dans lequel le processus en cours est enregistré). Il commence à suivre les instructions de premiers secours. De ce fait, le processeur bascule du processus (confection gâteau) vers un autre processus de priorité supérieure (administrer antidote). Chaque processus découle d’un programme différent (recette et brochure sur les premiers soins). Une fois le problème de piqure résolu, l’informaticien retourne au point où il avait laissé la préparation du gâteau.
En résumé un processus est une activité. Il inclut un programme, une entrée, une sortie et un état.Un processeur peut être partagé par plusieurs processus à l’aide d’un algorithme d’ordonnancement intervenant pour déterminer à quel moment arrêter de travailler sur un processus pour en servir un autre.
Les SE ont besoin de savoir que tous les processus nécessaires existent bel et bien. Le SE doit permettre l’exécution concurrentielle de processus, et a besoin d’une méthode pour créer, et arrêter les processus au cours de leur activité.
Il existe essentiellement quatre événements provoquant la création d’un processus:
Initialisation du système
Lors de l’amorçage du SE, plusieurs processus sont créés. Certains sont des processus de premiers plans (processus qui interagissent avec l’utilisateur et accomplissent des tâches pour eux), d’autres sont des processus d’arrière-plan, non associés à une utilisation particulière de l’ordinateur. Ex: les processus d’arrière-plan conçu pour accepter les courriers électroniques entrant, ceux conçus pour accepter les requêtes entrantes de pages web hébergées sur l’ordinateur; etc.
Exécution d’un appel système de création de processus par un processus en cours d’exécution
Un processus en exécution peut émettre des appels systèmes pour créer un ou plusieurs nouveaux processus. Cela est particulièrement utile lorsque la tâche à accomplir peut être divisée en plusieurs processus qui interagissent entre eux tout en étant indépendants.
Requête utilisateur sollicitant la création d’un nouveau processus
Un nouveau processus peut également être créé à la demande d’un utilisateur. Cela passe par la saisie d’une commande ou dans le mode graphique le clic sur une icône. Ces deux cas de figures lancent un nouveau processus qui exécute le programme concerné.
initiation d’un travail en traitement par lots
Ce cas de figure concerne les gros mainframes. Les utilisateurs peuvent soumettre des tâches de traitement par lots au système. Lorsque le SE constate qu’il dispose des ressources nécessaires à l’exécution d’un job supplémentaire, il crée un nouveau processus et exécute le job suivant de la file d’attente.
Une fois qu’un processus a été créé, il commence à s’exécuter quelle que soit sa tâche et il finira à s’arrêter pour diverses raisons:
• Arrêt normal (fin de la tâche qui leur incombait);
• Arrêt pour erreur (demande d’exécution d’un programme qui n’existe pas);
• Arrêt pour erreur fatale (bogue du programme);
• Le processus est arrêté par un autre processus.
Types de processus
Les processus interactifs
Les processus interactifs sont démarrés par l’utilisateur connecté au système. Ils sont initialisés et contrôlés via une session terminale. Ces processus peuvent s’exécuter en avant plan du terminal qui a lancé le programme. Dans ce cas aucune autre application ne peut être lancée aussi longtemps que le processus est en train de s’exécuter en avant plan.
Lorsque ces processus s’exécutent en arrière-plan, de nouvelles commandes peuvent être acceptées par le terminal pendant l’exécution du programme. Lors de l’exécution des programmes en arrière-plan, le système n’interdit pas l’utilisateur à faire autre chose sur le terminal utilisé pour lancer le programme. Le job control du noyau du SE offre une gestion aisée de plusieurs processus. Ce mécanisme fait passer les processus de l’avant plan à l’arrière- plan. En utilisant ce système, des programmes peuvent également être lancés immédiatement en arrière-plan.
Les processus automatiques
Les processus automatiques ou processus par lot sont des processus non connectés au
terminal. Ce sont plutôt de tâches mises dans une file d’attente pour être exécutées. Cette file d’attente est gérée selon le mode du premier entré- premier sorti (First in, First out : FIFO). De telles tâches sont exécutées selon les critères suivants:
• A une certaine période (date et heure): exécutée selon la commande at;
• Au moment où le système est suffisamment moins occupé pour accepter d’autres travaux (jobs): exécutées en utilisant la commande par lot (batch command).
Par défaut les tâches sont mises dans une file dans laquelle elles vont attendre l’exécution jusqu’au moment où le système de chargement est en-dessous de 0.8.
Dans les environnements plus larges, le traitement par lots peut être privilégié lorsque de grandes quantités de données doivent être traitées ou lorsque des tâches gourmandes en ressources sont en attente alors que le système est suffisamment chargé. Le traitement par lots est aussi utilisé dans l’optimisation des performances du système.
Les daemons
Les daemons sont des processus serveurs exécutés continuellement. La plus part de temps, ils sont initialisés au démarrage du système et attendent en arrière-plan jusqu’à ce qu’une demande de leur service soit faite. Un exemple est le daemon, xinetd, démarré dans presque toutes les procédures de démarrage. Après le démarrage du système, ce daemon réseau attend qu’un programme client, le client ftp par exemple, ait besoin de se connecter.
Les états d’un processus
Rappelons qu’un processus est une instance d’un programme en exécution mais pointant le fait qu’un programme n’est pas à lui-même un processus, c’est une entité passive. Un processus est une entité active (dynamique) dont on peut étudier l’état au cours du temps. Un processus peut-être dans trois états différents : élu, prêt, bloqué.
• Un processus est dit élu s’il est en cours d’exécution sur le processeur. Dans le cas d’une machine multiprocesseurs plusieurs processus peuvent être élus en même temps. Notons cependant que le nombre de processus élu doit être égal au nombre de processeurs. Lorsque le quantum de temps attribué au processus élu est épuisé, l’ordonnanceur est appelé de façon asynchrone par interruption et élit un autre processus parmi les processus prêt. Le processus qui était en cours d’exécution passe de l’état élu à l’état prêt.
• Un processus est dit prêt s’il est suspendu en faveur d’un autre. Pour un processus prêt, il ne lui manque que la source processeur pour s’exécuter.
• Lorsqu’un processus en exécution attend un événement externe (décompte d’horloge, attente des données, etc.), il s’en dort et passe dans l’état bloqué.
L’ordonnanceur appelé de façon explicite par ledit processus, élit un autre processus parmi les processus prêt. Lorsque l’événement externe attendu se produit le système d’exploitation se charge de son traitement, puisque le processus se trouve dans un état bloqué. Pour ce faire, le SE interrompt
temporairement le processus en exécution pour traiter les données reçues et faire passer le processus bloqué à l’état prêt.
Le schéma ci-dessous matérialise les différentes transitions.
Figure 3: Les états d’un processus
Gestion des threads
Dans les SE traditionnels, chaque processus possède un espace d’adressage et un thread de contrôle unique. Il arrive cependant qu’il soit souhaitable de disposer de plusieurs threads de contrôle dans le même espace d’adressage, ceux-ci s’exécutant quasiment parallèle comme s’il s’agissait de processus distincts. Cet état de fait sera abordé dans cette partie.
Le modèle de thread
Rappelons que le modèle de processus est fondé sur deux concepts: le regroupement de ressources et l’exécution. Il est parfois nécessaire de les séparer et c’est là qu’intervient les threads.
Un processus est un espace d’adressage contenant un programme et des données mais aussi d’autres ressources (fichiers ouverts, les processus enfants, les alertes en attente, les handlers de signal, les informations de décompte, etc.). En rassemblant ces ressources sous forme de processus, on facilite leur gestion.
Sous un autre angle, les processus peuvent être vus en considérant leur thread d’exécution (chemin d’exécution) que l’on se contente d’appeler thread.
Le thread inclut:
• un compteur ordinal qui effectue le suivi des instructions à exécuter;
• des registres qui détiennent ses variables de travail en cours; et
• une pile qui contient l’historique de l’exécution.
Bien qu’un thread s’exécute dans un processus, ce sont deux concepts distincts qui peuvent être traités séparément. Les processus servent à regrouper les ressources et les threads sont les entités planifiées pour leur exécution par le processeur.
Les threads autorisent les exécutions multiples dans le même environnement de processus avec une marge d’indépendance les uns par rapport aux autres. Cela est comparable au fait que plusieurs processus s’exécutent en parallèle sur un ordinateur.
Dans le premier cas, les threads partagent un espace d’adressage, les fichiers ouverts et les autres ressources.
Dans le second cas, les processus partagent la même mémoire physique, les disques, les imprimantes et les autres ressources.
Etant donné que les threads ont certaines propriétés des processus, on les qualifie de processus léger. Le terme multithreading est également employé pour désigner la situation dans laquelle plusieurs threads sont présents dans un processus.
Figure 4: Processus avec un espace d’adressage et un thread de contrôle unique Comme le montre la figure ci-dessus il s’agit de trois processus traditionnels, chacun
possédant son propre espace d’adressage et un thread de contrôle unique.Ci-dessous, nous présentons un cas de figure où on a un processus unique avec trois threads de contrôle.
Figure 5: Exemple d’un multithreading
Bien que dans les deux cas on est en présence de trois threads, les deux situations sont différentes. Dans le premier cas, chaque thread fonctionne dans un espace d’adressage différent, tandis que dans le second cas les trois threads se partagent le même espace d’adressage (multithreading).Dans ce dernier cas, le processeur bascule rapidement entre les threads donnant une illusion d’une exécution en parallèle de threads chacun sur son propre processus. Etant donné que ces threads partage le même espace d’adressage, ils partagent également les mêmes variables globales (en lecture/écriture) et aucune protection n’existe entre les threads d’un même processus. Les threads exploitent également le même jeu de fichiers ouverts, de processus enfant; d’alertes et de signaux, etc.
Généralement, chaque thread appelle des procédures différentes et donc un historique d’exécution différent. C’est pour cela que chaque thread a besoin de sa propre pile. Celle-ci contient un frame pour chaque procédure invoquée mais qui n’a encore rien retourné. Chaque frame contient, les variables locales de la procédure et l’adresse de retour à employer une fois l’appel de procédure exécuté. Le schéma ci-dessous présente un processus ayant trois threads.
Figure 6: Exemple d’un multithreading avec pile de thread L’utilisation de thread
Dans de nombreuses applications plusieurs activités ont lieu simultanément. En décomposant une application en plusieurs threads séquentiels, qui vont s’exécuter presque en parallèle, le modèle de programmation devient plus simple (processus).
Avec les threads, un élément nouveau apparaît: “la capacité pour les entités parallèles à partager un espace d’adressage et toutes ses données”.
De plus, étant donné qu’aucune ressource n’est associée aux threads, ils deviennent plus faciles à créer et à détruire que les processus. Les threads peuvent également améliorer le fonctionnement d’une application.
Notons enfin que les threads sont utiles sur les systèmes multiprocesseurs, sur lesquels un véritable parallélisme est possible.
L’implémentation de threads dans l’espace utilisateur
L’implémentation de threads dans l’espace utilisateur consiste à placer le paquetage de threads dans l’espace utilisateur. Cela reste transparent au noyau qui les prend en charge comme des processus ordinaires monothreads. Cela est pratique pour les SE ne supportant pas les threads.
Lorsque les threads sont gérés dans l’espace utilisateur, chaque processus a besoin de sa propre table de threads privé pour le suivi des threads du processus. Les propriétés des threads concernés par cette table sont: le compteur ordinal, le pointeur de pile, les registres, l’état, etc. La table des threads est gérée par le système d’exécution (run time system).
Lorsqu’un thread passe à l’un des états prêt ou bloqué, les informations nécessaires à son redémarrage sont stockées dans la table de threads de la même manière que le noyau stocke les informations relatives aux processus dans la table des processus.
Lorsqu’un thread accompli une action susceptible de le bloquer localement, par exemple il attend qu’un autre thread de son processus termine une tâche quelconque, il invoque une procédure du système d’exécution. C’est cette dernière qui détermine si le thread doit être placé en état bloqué. Dans ce cas, elle stocke les registres du thread dans la table des threads, sonde la table à la recherche d’un thread prêt à s’exécuter et recharge le registre machine avec les valeurs enregistrée du nouveau thread. Dès que le pointeur de la pile et le compteur ordinal ont basculés, le nouveau thread recommence à s’exécuter automatiquement. Si la machine possède une instruction pour stocker tous les registres et une autre pour les charger, le basculement complet du thread peut s’accomplir en quelques instructions seulement. Ce type de basculement est plus rapide que la rétention dans le noyau.
L’ordonnancement des threads est plus rapide par rapport à l’ordonnancement des processus :
• Utilisation des procédures locales;
• pas de nécessité d’interruption;
• pas de changement de contexte;
• pas de nécessité de vider la cache mémoire; etc.
L’implémentation de threads dans le noyau
Dans ce mode, le noyau a connaissance des threads et en assure la gestion. Ainsi, il n’est pas nécessaire de disposer d’un système d’exécution pour chaque thread comme précédemment.
En outre, il n’y a pas de table de thread dans chaque processus. Cette table se retrouve dans le noyau et est chargé du suivi de tous les threads du système. Un thread qui veut créer un nouveau thread ou détruire un thread existant effectue un appel noyau qui prend en charge la création ou la destruction en actualisant la table des threads du noyau. Cette table dispose pour chaque thread de registre, de l’état et d’autres informations. Notons que ces informations sont les mêmes que pour les threads utilisateurs la seule différence est qu’ils sont localisés dans le noyau.A côté de cela, le noyau maintien également une table des processus traditions pour assurer leur suivi.
Lorsqu’un thread se bloque, le noyau peut exécuter un autre prêt du même processus ou d’un autre processus. Avec les threads utilisateurs, le système d’exécution continue d’exécuter des threads de son propre processus jusqu’à ce que le noyau cesse de lui allouer du temps processeur ou qu’il n’y ait plus de thread prêt. La création et la destruction des threads étant lourd, certains systèmes recyclent leurs threads. Lorsqu’un thread est détruit, il est marqué comme étant non exécutables mais ses structures de données noyaux n’en sont pas autrement affectées. Lorsqu’un nouveau thread doit être crée, un ancien thread est réactivé, ce qui réduit la surcharge. Le recyclage des threads est également envisageable pour les threads utilisateurs.
Si un thread d’un processus donné provoque un défaut de page, le noyau peut aisément déterminer si le processus possède d’autres threads exécutables. Si tel est le cas, il peur en exécuter un en attendant la récupération sur le disque de la page sollicitée. Le principal inconvénient des threads noyaux est qu’un appel système est une démarche lourde. Ainsi, si les opérations sur les threads (création, arrêt; etc.) sont nombreuses, la surcharge sera importante.
Les implémentations hybrides
Plusieurs méthodes ont été testées pour tenter de combiner les avantages des threads utilisateurs et noyau. L’une d’elle consiste à employer les threads noyaux puis à multiplexer les threads utilisateurs sur un ou plusieurs threads noyaux.
Dans cette conception, le noyau ne connait que les threads noyaux et l’ordonnance. Certains de ces threads peuvent disposer de threads utilisateurs multiplexés. Ceux-ci sont créés, détruit et ordonnancés exactement comme les threads utilisateurs d’un processus qui s’exécute sur un système d’exploitation dépourvu de fonctionnalités multithreading. Dans ce modèle, chaque thread noyau possède un jeu donné de thread utilisateurs qu’il utilise tour à tour.
Une autre approche nommée activation de l’ordonnancement poursuit les objectifs qui consistent à imiter la fonctionnalité des threads noyaux mais avec les performances supérieures et la grande souplesse qu’offre les paquetages mis en œuvres dans l’espace utilisateur.
Lorsqu’on emploi les activations de l’ordonnanceur, le noyau assigne un certain nombre de processeurs virtuel à chaque processus et laisse le système d’exécution (espace utilisateur) allouer des threads aux processeurs. Ce mécanisme peut également être exploité sur un multi processeur dans lequel les processeurs virtuels peuvent être de véritables CPU. Le nombre de processeurs virtuels alloués à un processus est initialement de 1 mais le processus peut en solliciter d’autres. Notons qu’il peut également retourner les processeurs dont il n’a plus besoin. Le noyau peut également récupérer des processeurs virtuels déjà alloué afin de les assigner à d’autres processus prioritaires.
Conclusion
Pour pallier les effets d’interruption, les systèmes d’exploitation offrent un modèle conceptuel de processus séquentiels s’exécutant en parallèle. Les peuvent être créés et arrêter
dynamiquement. Chaque processus possède son propre espace d’adressage. Dans certaines applications, il est intéressant de disposer de plusieurs threads de contrôle au sein d’un même processus. Les threads d’un processus sont ordonnancés indépendamment les uns des autres et chacun possède sa propre pile mais partagent tous un espace d’adressage commun.
Cette activité d’apprentissage a montré de long en large, les processus et les threads ainsi que les différentes implémentations des threads.
Évaluation de l’unité
1. Quelle est la différence entre un processus et un programme ? 2. Quels sont les états possibles pour un processus ?
3. A la figure 2, trois états de processus apparaissent. En théorie avec trois états on pourrait avoir six transitions (deux en sortie de chaque état). Cependant on ne voit que quatre transitions commentez cet état de fait.
4. Supposons que vous devriez concevoir une architecture informatique avancée qui effectuerait la commutation entre processus au niveau matériel au lieu d’employer les interruptions. De quelle information le processeur aurait-il besoin. Décrire comment cela pourrait fonctionner.
5. Lorsqu’une interruption ou un appel système transfère le contrôle au système d’exploitation, on utilise généralement une zone de pile du noyau distincte de la pile du processus interrompu. Expliquer pourquoi.
Rappel :
Les ordinateurs modernes sont conçus pour exécuter un à plusieurs programmes utilisateurs. Pour ce faire, le processeur bascule entre programme pour les servir en raison de petit laps de temps (au tour des dizaines ou centaines de millisecondes) ce qui fait que le processeur simule le parallélisme. Pour qu’il y ait un vrai parallélisme il faut des systèmes multiprocesseurs se partageant la même mémoire physique. Toutes ces différentes notions sont essentiellement basées sur le modèle de processus.
Activité 2. Communication interprocessus
Introduction
Il arrive que les processus aient besoin de communiquer entre eux par exemple dans pipeline du shell, lorsque la sortie d’un processus doit être passée à un autre processus, etc. Il est donc préférable que cette communication se fasse de manière structurée. Au cours de cette activité nous allons aborder quelques-uns des problèmes liés à la communication interprocessus.
Les notions de base de communication interprocessus
Les processus d’un système ne s’exécutent pas tous de manière isolée. Certains se trouvent en compétition pour une ressource donnée, d’autres ont besoin de coopérer et nécessitent par conséquent des moyens de communication et de synchronisation. Ainsi, les principaux problèmes liés à la communication interprocessus sont les suivants:
• Comment un processus fait-il pour passer des informations à un autre processus?
• Comment éviter que deux processus ou plus ne produisent pas de conflits lorsqu’ils s’engagent dans des activités critiques (tentative de récupération du dernier Mo de mémoire par deux processus?
• Comment faire le séquençage en présence de dépendances (un processus B qui travaille sur des données produites par A, doit attendre que A ait terminé pour pouvoir commencer)?
Pour étayer la communication interprocessus, prenons pour exemple le spouleur d’impression.
Les noms des fichiers à imprimer sont stockés dans un répertoire de spool et supprimés au fur et à mesure de leur impression. Le répertoire de spool possède plusieurs entrées numérotées de manière croissante et chaque entrée peut loger un nom de fichier. Pour gérer ce répertoire, deux variables globales partagées (in et out) sont utilisées. La variable in pointe vers la
prochaine entrée libre du répertoire tandis que la variable out pointe vers le prochain fichier à imprimer.Le processus qui veut lancer l’impression lit la valeur de la variable globale in, la met dans sa variable locale suivant , puis place le nom de fichier dans l’entrée libre, du répertoire de spool, désignée par le contenu de suivant puis met à jour la variable globale in en lui affectant la valeur de suivant incrémentée de 1.
Le pseudo code correspondant à cette séquence est le suivant:
suivant=in;
MettreNomDeFichier (suivant);
in=suivant+1;
Admettons qu’à un instant t, in=7 et out =4 et que deux processus A et B désirent lancer l’impression.
Figure 7: Intention d’accès simultanée de deux processus à la mémoire partagée
Dans ce cas, chaque processus doit exécuter la séquence d’actions d’ajout d’une tâche d’impression (voir le pseudo-code ci-dessus indiqué). Supposons que le processus A s’exécute et est interrompu par l’ordonnanceur avant de mettre à jour la variable globale in (c’est à dire interrompu quelque part entre la 1ère et la 3ème instruction). L’ordonnanceur jugeant que le processus A a eu suffisamment de temps bascule vers le processus B. Pour ce cas les deux processus vont utiliser le même numéro, de l’entrée libre, pour placer la tâche d’impression et l’une des tâches sera sans doute supprimée. Cependant au regard du contenu des variables in et out, le répertoire va rester cohérent et aucune anomalie ne sera détectée par le CPU.
De tels cas de figure sont appelés de situations de concurrences (race conditions en anglais).
Face à une telle situation, il est donc indispensable que le système fournisse un moyen sûr de communication interprocessus permettant la synchronisation et l’échange de données.
Sections critiques
Pour résoudre le cas des problèmes d’accès concurrents (voir exemple ci-dessus), il faut éviter que plus d’un processus accèdent (en lecture/écriture) à une donnée partagée en même temps. Cela consiste à mettre en place un processus d’exclusion mutuelle à la ressource partagée aussi appelée section critique.
Quatre conditions sont à remplir pour résoudre ce problème:
1. deux processus ne doivent pas se trouver parallèlement dans leurs sections critiques;
2. il ne faut pas faire de suppositions sur la vitesse ou le nombre de processeurs mis en œuvre;
3. Aucun processus s’exécutant en dehors de la section critique ne doit bloquer d’autres processus;
4. aucun processus ne dit attendre indéfiniment pour entrer dans sa section critique.
5. Il existe plusieurs façons de mettre en œuvre l’exclusion mutuelle. Ci-dessous nous allons détailler quelques-unes.
Masquage des interruptions
Le moyen le plus simple d’éviter les accès concurrents est de masquer les interruptions avant d’entrer dans la section critique et de les restaurer à la sortie de celle-ci. Cela permettra d’éviter la suspension du processus en section critique au profit d’un autre processus, puisque l’inhibition des interruptions empêche l’ordonnanceur de s’exécuter. Les principaux problèmes en rapport avec le masquage d’interruption sont les suivants:
• risque d’accaparer le processeur par un seul processus si celui-ci se maintient longtemps en section critique;
• risque de blocage du système si le processus en section critique oublie de restaurer les interruptions.