Vous êtes sur la page 1sur 46

THÉORIES

DES SYSTÈMES D'EXPLOITATION

Notes de cours compilées par


Monsieur AKAKPO F.
Informaticien au CIC/UL
Version Décembre 2021
Théories des systèmes d'exploitation /Page 1
 Objectif général
Amener l’apprenant(e) à découvrir le fonctionnement interne des systèmes informatiques : l’architecture
interne d’un système d’exploitation, gestion de la mémoire centrale, des entrées-sorties, et des fichiers.
 Objectifs spécifiques
1) Connaître le rôle d’un système d’exploitation
2) Connaître la définition d’un système d’exploitation
3) Connaître l’histoire des systèmes d’exploitation
4) Connaître les types des systèmes d’exploitation
5) Connaître les mécanismes de base d’un système d’exploitation
6) Maîtrise facilement et complètement des systèmes informatiques

 Sommaire
1) Introduction (séance 1)
2) Définition (séance 1)
3) Historique (séances 1, 2, 3)
4) Typologie (séances 4, 5)
5) Fonctions et Structures (séance 5)
6) Notion d'Entrées/Sorties et interruption (séance 6)
7) Notion de processus (séance 6)
8) Gestion de la mémoire (séances 7, 8)
9) Gestion des fichiers (séances 9, 10)
10) Gestion des processus (séances 11, 12)
 Bibliographie
1) Operating system concepts, Abraham Silberschatz et Peter B. G., Addison-Wesley Pub. 1994.
2) Principes des systèmes d’exploitation des ordinateurs, Sacha KRAKOWIAK, Dunod 1987
3) Introduction aux systèmes d'exploitation, C. J. THEAKER et G. J. BROOKES, Eyrolles 1987.
4) Systèmes d'exploitation des micro-ordinateurs, M. COURVOISIER et R. VALETTE, Dunod
1986
5) Systèmes d’exploitation, Andrew Tanenbaum, 3ème Edition Nouveaux Horizons 2008
 Webographie
1) http://www.commentcamarche.net/contents/1092-systeme-d-exploitation
2) http://www.laurentbloch.org/Data/Livre-Systeme/index.html
3) fr.wikipedia.org/wiki/Ordinateur
4) http://pagesperso.lina.univ-nantes.fr/info/perso/permanents/bechet/L3-SE/
5) www.histoire-informatique.org

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 2
1. INTRODUCTION
Un système d'exploitation est une partie indispensable de presque tout système informatique. Un
système informatique peut être décrit approximativement en quatre composants selon la figure suivante :

1) le matériel [processeur + mémoire + périphériques d’Entrée-Sortie]


2) le système d'exploitation [gouverneur de tout le système informatique]
3) les applications [assembleur + compilateur + SGBD + éditeur de texte + jeu + etc.]
4) les utilisateurs [hommes + autres ordinateurs]
L'existence et la nécessité des systèmes d'exploitation est de fournir un environnement dans lequel un
utilisateur va effectuer une tâche avec le matériel, en exécutant des programmes. Pour ce faire, le système
d'exploitation fournit certains services aux ressources physiques (matériel) et d'autres services aux
utilisateurs (hommes et applications) de manière à rendre leurs interactions faciles. Ainsi, le système
d'exploitation a pour rôle de permettre et de gérer au mieux l'utilisation des ressources matérielles dont les
applications vont disposer (CPU, RAM, I/O, …) tout en facilitant la tâche de l'utilisateur. L'utilisateur voit
en fait une machine virtuelle plus facile à utiliser et plus standardisée que la machine réelle. Cette machine
virtuelle décharge l'utilisateur de la connaissance des caractéristiques exactes du matériel sur lequel ses
applications fonctionnent, par exemple les adresses physiques des ports d'entrée-sortie, des fichiers en
Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 3
mémoire vive ou les caractéristiques des mémoires secondaires. La nature de la machine virtuelle est et
peut être très diverse en fonction des services qu'elle fournit. C'est l'ensemble des services fournis en
complément du matériel qui constitue le système d'exploitation. La diversité et la spécificité de ces services
(pourquoi ?) donnent naissance à différents types de systèmes d'exploitation. Mais les systèmes
d'exploitation sont tous basés sur des principes communs dont nous allons essayer de démasquer les
concepts et techniques. Par le truchement de quelques thèmes, nous tenterons de mettre en évidence et
d'expliquer les concepts fondamentaux ainsi que les mécanismes des systèmes d'exploitation.
Bien entendu, notre référence est la microinformatique et principalement les IBM PC et compatibles,
qui ont bénéficié à tous égards des concepts et techniques de leurs prédécesseurs et de leurs concurrents
(cf. Historique).

L'objectif ultime de ce cours est d'amener l'apprenant(e) à découvrir et comprendre les concepts et
principes des systèmes d'exploitation afin de pouvoir maîtriser facilement et complètement des systèmes
informatiques, quelle qu'en soit la complexité.

Comme pré requis, une familiarité avec les sujets suivants serait un atout :
1) Composition d'un ordinateur [cf. cours ATO]
2) Utilisation de Windows/Linux et de commandes systèmes (MS-DOS et Shell [cf. cours de
progiciel]
3) Notions de logiciel, de programme, de fichier … [cf. cours de progiciel]
4) Notion de programmation [algorithme, compilation, linkage, tableaux, piles, files, listes arbres]

2. DEFINITION

Il n'existe pas aujourd'hui de définition universelle des systèmes d'exploitation : ils sont souvent plus
définis par ce qu'ils font que par ce qu'ils sont. Néanmoins, le système d'exploitation peut être défini comme
un logiciel qui œuvre comme un intermédiaire intelligible entre un utilisateur et les ressources physiques
d'un système informatique ; c'est "l'allocateur" des ressources dans un système informatique. Ainsi donc, le
premier but d'un système d'exploitation est d'offrir la commodité du système à l'utilisateur et le second but
est d'assumer l'efficience du système.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 4
3. HISTORIQUE
Les systèmes d'exploitation modernes sont en général très complexes. Il est certain que cet état de fait
est le fruit d'une évolution qui s'est étalée sur plusieurs décennies. Une remarque générale que l'on peut
faire d'emblée est que les évolutions du matériel et du logiciel ont été parallèles. En effet, un état donné du
matériel permettait d'implanter certains concepts dans les systèmes. Pour mettre en œuvre d'autres concepts,
plus évolués, il devenait nécessaire de modifier le matériel, ce nouvel état du matériel permettant alors de
poursuivre l'évolution du système (cf correspondance PC et DOS-WINDOWS).

La figure ci-après présente un résumé synoptique des évolutions du matériel et du logiciel de base.

Cet historique montre les éléments communs des différents types de système d'exploitation.
De l'évolution permanente des technologies et des techniques, il ressort trois générations pour le
matériel et quatre générations pour le logiciel de base.

3.1 Les générations du matériel


0) Génération précurseur : sans logiciel
- Utilisation de tableaux d’interrupteurs ;
- Utilisation de tableaux de lampes ;
- Les problèmes résolus étaient simples : remplir des tables de fonctions trigonométriques (sinus,
cosinus, tangente, etc.) pour modéliser les phénomènes périodiques (ondes d’électricité, son,
lumière, marées, astronomie) ou des tables de logarithmes pour astronomie, le calcul des intérêts
composés dans les banques, etc.
Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 5

1) Gros systèmes (mainframes) : apparus autour de 1947, leur matériel avait les caractéristiques suivantes
:

ENIAC (1946) = Electronic Numerical Integrator And Computer

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 6
Ce tableau comparatif des vitesses de calcul7 permet de se rendre compte de l'avancée que
représente l'ENIAC par rapport aux moyens de calculs disponibles jusqu'alors.
(https://fr.wikipedia.org/wiki/ENIAC)

Vitesse de multiplication Calcul d'une trajectoire


Moyen employé
de nombres de 10 chiffres d'une table de tir

Homme à la main, ou machine de Babbage 5 min 2,6 jours

Homme avec calculateur de bureau 10 à 15 secondes 12 heures

Harvard Mark I (électromécanique) 3 secondes 2 heures

Model 5 (électromécanique) 2 secondes 40 minutes

Analyseur différentiel (analogique) 1 seconde 20 minutes

Harvard Mark II (électromécanique) 0,4 s 15 minutes

ENIAC (électronique) 0,001 s 3 secondes

En comparaison, une ALU des années 2000 met respectivement 30 ns et 36 µs pour ces opérations

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 7

EDVAC (1947) = Electronic Discret VAriable Computer


- très encombrant (physiquement énorme et lourd)
- très lent
- très peu fiable
- moteurs de calcul avec relais
- relais (remplacés progressivement par des lampes à tube vide)
- tableaux d’interrupteurs + tableaux de lampes
- clavier limité aux touches de contrôle (RUN, STOP, etc.)
- opérations : ADD, MULT, DIV, etc.
- etc.

2) Mini-ordinateurs (mini computers) : apparus autour de 1959, leur matériel se caractérise par :
- mémoire à tores de ferrite
- transistors et circuits intégrés
- apparition et diversification des périphériques
- électromécaniques
- lecteurs / perforateurs de rubans
- imprimantes
- télétypes
- cartes, tambours et bandes magnétiques
- etc.
NB : Chercher figure pour PDP-11 (Programable Data Processor).

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 8
3) Micro-ordinateurs (Micro computer =>Personal Computer) : apparu autour de 1965, le matériel
connaît la miniaturisation des composants. Les transistors et les circuits électroniques laissent place aux
micromodules. Les ferrites diminuent en taille et le disque fait son apparition :

- processeurs spécialisés d'E/S


- accroissement des possibilités des machines et des périphériques
- protection mémoire par zone
- techniques de pagination et/ou de segmentation
- sauvegarde et restauration câblées des contextes de processus
- etc.
Dans cette génération, le concept d'intégration a évolué en permanence pour réduire autant la taille des
composants que des pistes les reliant, de sorte qu'il est tolérable de ne plus parler d'une quatrième génération
de matériel.
Le premier micro-processeur (composant à haute intégration) est apparu en 1969. C'est l'application de
la technique à haute densité LSI (Large Scale Integration) ou MSI (Medium Scale Integration), de la
microprogrammation (FIRMWARE), du concept de mémoire virtuelle et des extensions des disques. Le
problème rencontré est celui de l'échauffement qui augmente avec le nombre de composants malgré des
surfaces de plus en plus réduites (loi de MOORE).

3.2 Les générations du logiciel de base


1) Première génération : 1958 –1968 / Exploitation porte ouverte
- L'utilisateur écrit un programme en langage machine ;
- Il réserve la machine pour une durée déterminée ;
- Utilisation de cartes perforées (précédée de l’utilisation tableaux d’interrupteurs et de lampes) ;
- Il doit monter et démonter les lecteurs comportant les logiciels ;
- Exécution immédiate du programme (pas de mémoires de masse) ;
- Si l'exécution n'est pas conforme à l'attente, la mise au point doit être effectuée ;
- Etc.
La conséquence est qu'une telle exploitation est, au regard du matériel déjà coûteux, peu économique
à cause de la durée d'entrée des programmes et de la durée de mise au point.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 9
2) Deuxième génération : 1960-1970 / Traitement par lot (batch systems)
- travaux groupés en lots par un opérateur (le programmeur est utilisateur et non un opérateur)
- chargement de l'utilitaire nécessaire à un lot
- chargement du lot sur le lecteur de cartes
- lancement de l'exécution du lot
- etc.
Exemple : si l'opérateur reçoit successivement des travaux FORTRAN, COBOL et FORTRAN, il doit
(pour diminuer les montages, chargement, déchargement et démontage) regrouper tous les travaux
FORTRAN et les exécuter avant de passer aux travaux COBOL.

Ainsi les premiers systèmes d'exploitation se caractérisaient par les modules suivants :
- initialisation du système (logiciel et matériel)
- moniteur d'enchaînement des travaux avec Job Control Language
- sous-programmes d'entrées/sorties pour alléger la tâche au programmeur, partager les mémoires
secondaires, éviter les mauvais usages des périphériques.
- contrôle et gestion des temps d'exécution pour tuer les programmes trop longs et permettre la
facturation;
- protection mémoire pour éviter la destruction du système ; l'organisation de la mémoire dans ce cas
peut être représentée comme suit :

Zone système Zone utilisateur


Gestion Enchaînement Compilateur Applications
E/S travaux

3) Troisième génération : 1970-1980 / Multiprogrammation puis temps partagé


- tamponnement des E/S (utilisation des disques comme intermédiaire entre le lecteur de cartes et
l'imprimante)

- utilisation de spool (Simultaneous Peripheral Operation On Line)


Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 10

La multiprogrammation a eu les conséquences suivantes :


- une activité garde le CPU jusqu'à la prochaine demande E/S
- traitement des fins d'E/S grâce aux interruptions
- bonne gestion des ressources (CPU, RAM, périphériques, etc.)
- temps de réponse correct pour les travaux courts
- partage et protection des ressources
- complexité du matériel et du système d'exploitation
Le temps partagé a donné les conséquences suivantes :
- travail à partir d'un terminal interactif
- refonte totale de l'interface utilisateur/système (interface graphique)
- allocation du CPU aux utilisateurs à tour de rôle et pour un quantum.

4) Quatrième génération : 1980-aujourd'hui / Communication


- réseaux d'ordinateurs hétérogènes faiblement couplés (INTERNET)
- réseaux locaux (ETHERNET 1975)
Ceci a occasionné le développement des matériels et outils de transmission de données (cartes
ETHERNET en 1975 avec un débit maxi de 10 mégabits/sec).

Travail de recherche personnel n° 1 :


1) Faire le résumé de l’historique des systèmes informatiques du cours.
2) Chercher et résumer les évolutions des systèmes informatiques depuis le 21 e siècle.
NB : le rendu doit être saisi et imprimé avec une page de garde.

Travail de recherche personnel n° 2 :


Discutez l’affirmation « l’ontogenèse résume la phylogenèse. »

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 11
4. TYPOLOGIE DES SYSTEMES D'EXPLOITATION

En considérant tous les types de systèmes d'exploitation, sans se restreindre a priori à ceux qui sont
actuellement utilisés dans les micro-ordinateurs, il est possible de les classer selon deux critères : le mode
d'utilisation et le mode de fonctionnement.
Du point de vue du mode d'utilisation, on distingue des :
- systèmes destinés à la commande de procédés industriels ;
- systèmes destinés à la gestion des bases de données ;
- systèmes à usage général.
Du point de vue du mode de fonctionnement interne du processeur, on distingue :
- les systèmes «batch» ;
- les systèmes multitâches ;
- les systèmes multitraitements.
Dans la classification générale le mode d'utilisation dépend du mode de fonctionnement ; cela donne
plusieurs types comme décrits dans les sections suivantes.

4.1 Les systèmes batch


Dans un tel système, un seul programme s'exécute à tout instant quels que soient sa taille et son temps
d'exécution. Ce seul programme accapare donc complètement le CPU pendant tout son déroulement et, par
conséquent les programmes sont traités en séquence. Les programmes non encore exécutés sont stockés en
mémoire secondaire dans une file d'attente avec ordre d'arrivée.
Ces systèmes ont été les premiers à être développés du fait de la simplicité même de leur principe.
Cette simplicité se paye par une grande rigidité. En effet, les utilisateurs n'ont aucune possibilité
d'interaction avec leur programme qui se déroule d'une manière autonome, avec un temps de réponse
imprévisible puisque celui-ci dépend du nombre de travaux soumis. Ainsi, dans les centres de calcul la
rigidité de ces systèmes était difficilement tolérable lorsque le processeur devait être partagé entre plusieurs
utilisateurs. Par contre dans le cas d'ordinateurs personnels, ces systèmes trouvent leur intérêt puisque
l'utilisateur est le seul maître de sa machine.

4.2 Les systèmes multitâches


Ces systèmes ont pour rôle de permettre le partage du processeur par plusieurs programmes qui, vus
de l'utilisateur, se déroulent en même temps. Cette notion de simultanéité (apparente ou macroscopique)
d'exécution est basée sur une utilisation optimisée du processeur. L'allocation du processeur aux
programmes est effectuée selon leurs priorités et leurs besoins au moyen de règles d'ordonnancement plus
ou moins sophistiquées. Ce concept, parfois appelé multiprogrammation, permet de faire cohabiter des
programmes qui peuvent être complètement indépendants ou bien coopérer pour réaliser un objectif

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 12
commun en s'échangeant des informations et en partageant des données. Le système d'exploitation doit
d'une manière générale gérer les ressources partagées (mémoire, fichiers, imprimante, etc.), veiller à la
cohérence de l'utilisation des données communes et au transfert des messages.
Suivant le domaine d'application retenu, des systèmes d'exploitation divers ont été développés à partir
de ce concept de base.

4.2.1 Les systèmes temps réel


La caractéristique des systèmes temps réel est de permettre le traitement en temps réel d'événements,
c'est-à-dire de garantir une réponse dans un temps donné (l’exécution des programmes est soumise à des
contraintes temporelles).
Les systèmes temps réel sont la plupart du temps destinés à fonctionner dans un contexte industriel ; le
processeur étant connecté à un procédé physique. Par exemple, on trouve les systèmes de commande de
procédés industriels (chimie, pétrole, industries manufacturières, etc.), où le processeur est utilisé pour
réguler une installation ou ordonnancer (automatiser) une production.
Exemples : satellites, sondes, téléphones portables, etc.
4.2.2 Les systèmes multi-utilisateurs
La différence principale entre les systèmes multi-utilisateurs et les systèmes temps réel de commande
de procédés industriels est que les tâches sont souvent indépendantes dans les premiers, puisque chacune
correspond à un utilisateur différent, alors que dans les seconds les tâches coopèrent toutes d'une manière
ou d'une autre à la commande.
Chaque utilisateur a l'impression qu'il est seul à utiliser la machine. Un système d'exploitation multi-
utilisateur doit en conséquence gérer l'ensemble des ressources (CPU, RAM, disque … ) en assurant une
certaine protection aux utilisateurs de façon à éviter la destruction inintentionnelle ou malveillante des
données d'un utilisateur par un autre. De plus cette gestion des ressources doit être équitable afin d'assurer
une bonne cohabitation des tâches des utilisateurs sur la machine. En ce qui concerne l'allocation du
processeur, ce partage équitable est souvent résolu en attribuant à chaque utilisateur une tranche de temps
(quantum) de façon périodique, ce qui correspond à la notion de systèmes de temps partagé (time sharing
systems).
Ce découpage du temps en tranches égales pour toutes les tâches différencie également les systèmes
multi-utilisateurs des systèmes pour la commande des procédés industriels. En effet dans ce dernier cas il
ne faut pas chercher à être équitable puisqu'au contraire les tâches les plus urgentes doivent accaparer
totalement le processeur en suspendant le déroulement des tâches les moins urgentes pendant tout le temps
nécessaire.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 13
4.2.3 Les systèmes transactionnels
Ces systèmes sont basés sur l'utilisation d'un programme commun par plusieurs utilisateurs
simultanément. Le domaine d'utilisation le plus connu concerne les systèmes transactionnels où se pose
le problème de l'accès simultané à une base de données commune. Dans de tels systèmes (systèmes de
réservation de places d'avion par exemple) le système d'exploitation du processeur doit assurer en
permanence la cohérence, l'intégrité et la sécurité de la base de données partagée.

4.3 Les systèmes permettant le multitraitement


Avec ce type de systèmes, la simultanéité réelle d'exécution de plusieurs programmes est possible
du fait de l'existence de plusieurs processeurs. Les systèmes d'exploitation ont donc pour objet
d'ordonnancer le traitement sur plusieurs processeurs qui peuvent être semblables (c'est-à-dire ayant des
possibilités de traitement voisines) ou pas. Le fonctionnement s'effectue selon le principe du partage de
charge (load sharing) c'est-à-dire qu'un programme, au cours de son déroulement peut être amené à être
exécuté successivement sur plusieurs processeurs différents à chaque fois que son exécution est
interrompue et reprise. L'attribution des processeurs aux programmes s'effectue de façon à équilibrer au
mieux, à chaque instant, la charge des premiers. Les caractéristiques des processeurs étant connues, il est
possible de définir des algorithmes d'ordonnancement efficaces. Cependant un problème se pose au niveau
des processeurs d'entrée-sortie puisque les temps de transfert et de réponse sont quelques fois difficiles à
prévoir. On fait de nouveau appel à la multiprogrammation.
Dans ce type de système, que les processeurs aient des caractéristiques identiques (systèmes appelés
multiprocesseurs) ou qu'ils soient pré-affectés et dévolus à des tâches spécialisées (processeurs de
traitement des signaux par exemple), le système d'exploitation est situé sur un processeur central qui
coordonne l'activité des autres processeurs.
(SYSTEMES DISTRIBUES)
Par contre il existe des systèmes où les processeurs, non seulement ont des propriétés différentes,
mais en plus possèdent une certaine autonomie et un certain pouvoir de décision (on dit aussi une
intelligence locale). Dans ce cas, sur chaque processeur se trouve un système d'exploitation et
suffisamment de mémoire locale pour qu'il puisse constituer un processeur à lui seul. Les liaisons entre
processeurs sont en général de nature série ce qui entraîne la définition de protocoles de communication
complexes. Il s'agit alors de la classe de systèmes informatiques distribués. Les réseaux locaux en sont un
exemple type. Il faut alors adjoindre aux fonctions habituelles du système d'exploitation, lequel est
obligatoirement du type multitâches (simultanéité de la gestion des communications et du déroulement
des programmes utilisateurs) des procédures permettant d'assurer la cohérence et l'intégrité des données
partagées. En effet dans ces types de systèmes, la notion de temps unique n'existe plus et la simultanéité
des événements peut être totale (parallélisme vrai et non pas parallélisme apparent). De nombreuses études
s'effectuent encore sur les systèmes distribués qui se développent très rapidement du fait du faible coût
des processeurs et de leur puissance sans cesse grandissante.
Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 14

Le bestiaire des SE
(http://pagesperso.lina.univ-nantes.fr/~bechet-d/L3-SE/L3-SE-2008-Cours-03-v1.0.pdf pages 18-25,
Systèmes d’exploitation, Andrew Tanenbaum, Nouveaux Horizons Pages 36-39 )
Mainframes ⊲
Serveurs ⊲
Systèmes multiprocesseurs ⊲
Systèmes personnels ⊲
Systèmes des assistants personnels
Systèmes temps réel ⊲
Systèmes embarqués ⊲
Systèmes des objets communicants
Smart cards ou cartes de crédit ⊲

Mainframes
Très gros système : un millier de disques — plusieurs téraoctets de mémoire au total
Gestion optimisée des ressources
Exemple : OS/390 d’IBM descendant de l’OS/360

Serveurs
Système avec d’importantes ressources utilisées en parallèle par de nombreux utilisateurs
SE spécialisés, en fait, optimisés pour cet usage: UNIX, Linux ou Windows XP Server
Exemples : Serveur de fichiers, serveur Web, serveur de courriels

Systèmes multiprocesseurs
Plusieurs CPU fonctionnent sur une même plateforme: ordinateurs parallèles, multi-ordinateurs ou
multiprocesseurs
SE spécialisés ou variantes plus ou moins optimisés pour la communication entre processus et les accès
concurrents aux ressources
Exemple : la Connection Machine, le Cray, les grappes de PC ou les PC bi-processeurs

Systèmes personnels
Un seul utilisateur
Interface conviviale
Orienté vers traitement de texte, le multimédia ou l’accès à internet
Exemple : Mac OS, Windows XP et Linux

Systèmes temps réel


Contraintes temporelles : contrôle du temps de réponse
Exemple : micro-controleur dans une voiture (ABS, Air-bag)
SE spécialisé : VxWorks, QNX, LynxOS, etc.

Systèmes embarqués
Palmtops ou PDA (Personal Digital Assistant), téléphones portables, ordinateurs de machine à laver, etc.
Contrainte de taille (programmes et/ou données)
SE spécialisé: PalmOS, VRTX, Windows-CE
(Consumer Electronics), etc

Smart cards ou cartes de crédit


SE souvent rudimentaire
Parfois : mise-en-oeuvre du SE à l’aide d’un langage de haut niveau comme Java ou Basic
Applications souvent spécialisées : cartes de crédit, cartes téléphoniques, badge d’accès, etc.

Autres critères de classification :


- Nombre d’utilisateurs ;
- Nombre de tâches simultanées ;
- Nombre de CPU ;
- Nombre de sessions.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 15
5. FONCTIONS ET STRUCTURES DES SYSTEMES D'EXPLOITATION

Comme cela a été montré sur le schéma de description des composants d'un système informatique,
le système d'exploitation se trouve à l'interface entre le matériel et le logiciel de l'utilisateur. Pour que
l'utilisateur ait une vision simplifiée de la machine virtuelle et puisse utiliser les fonctionnalités les mieux
adaptées, les systèmes d'exploitation sont organisés en niveaux ou couches. Ceci est surtout vrai pour les
systèmes d'exploitation pour micro-ordinateurs car les microprocesseurs évoluent très vite et les
constructeurs peuvent facilement faire évoluer leurs produits en assurant une compatibilité ascendante.
Les systèmes d'exploitation modernes sont construits à partir d'un noyau (kernel en anglais) assurant
un certain nombre de fonctions de base. Le nombre de fonctions assurées par le noyau dépend du
découpage choisi par le concepteur.
Il peut être créé un système d'exploitation aussi large et aussi complexe que possible, seulement en
le partitionnant en de petits modules. Chaque module doit être une portion bien définie du système, avec
des entrées, des sorties et des fonctions. Manifestement tous les systèmes d'exploitation n'ont pas la même
structure. Cependant, beaucoup de systèmes d'exploitation modernes partagent plusieurs modules:
- la gestion des processus (chapitre développé plus loin)
- la gestion de la mémoire (chapitre développé plus loin)
- la gestion des entrées-sorties (cf. notion d'entrées-sorties)
- la gestion des fichiers (chapitre développé plus loin)
- la protection du système (sujet développé plus loin)
- la communication (entre processus et surtout dans un système distribué qui rassemble des
composants hétérogènes)
- l'interface utilisateur (interpréteur de commandes) : c'est l'un des modules très importants pour les
systèmes d'exploitation. Il est l'intermédiaire entre l'utilisateur et le système d'exploitation. Son rôle
est très simple : obtenir la prochaine commande et l'exécuter. Il est basé sur un langage de
commandes qui peut être exploité en mode graphique (exemple du bureau en Windows : système
de menus) ou en mode commande (mode invite commande). En mode graphique, toutes les
opérations sont guidées par des sélections parmi les choix proposés dans des menus ; tandis qu'en
mode commande, c'est le système d'exploitation qui, lorsqu'il est prêt, sollicite les commandes à
exécuter. Dans ce dernier mode l'utilisateur doit avoir préparé son travail à l'avance et prévu à quel
moment le système sera prêt à accepter des commandes (exemple du mode Commandes MS-DOS).
Un éditeur de lignes permet d'introduire les instructions et de les modifier en cas d'erreur.
CLI=Command Line Interface /Mode texte /Organisation de l’écran en lignes et colonnes
GUI=Graphical User Interface / Mode Graphique / Organisation de l’écran en pixels

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 16
La structure d'un système d'exploitation est la manière dont ces modules sont inter-reliés au
travers du noyau. Le noyau comporte, en général, au moins les deux premiers modules : la gestion des
processus et la gestion de la mémoire. On appelle encore le noyau moniteur. La structure et le noyau varient
d'un système d'exploitation à un autre comme le montrent les figures suivantes :

Pour des raisons de sécurité, un CPU fonctionne en plusieurs modes ou niveaux dont en général :
- Le mode « noyau » ou « superviseur » : pas de restriction ; accès aux registres spéciaux ; accès
direct à la RAM ; exécution des routines ; exécution des processus systèmes.
- Le mode « utilisateur » : restriction pour les accès aux ressources ; exécution des programmes
normaux ; exécution des processus utilisateur.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 17
6. NOTIONS D'ENTREES-SORTIES ET INTERRUPTION
Les systèmes d'exploitation modernes permettent de traiter les périphériques comme des unités logiques
dont les caractéristiques physiques ne sont pas transparentes à l'utilisateur. Les unités logiques sont décrites
de façon unifiée dans une table de descripteurs d'unités contenant leurs spécificités. L'utilisation de ces
unités s'effectue par un gestionnaire d'unités (handler en anglais), les utilisateurs se contentant d'effectuer
des demandes qui sont placées en file d'attente. Pour rendre très efficace le travail du handler, on lui adjoint
des tampons (buffers en anglais) pour mémoriser les demandes.
La figure ci-dessous (Figure 2.1 à la page 30 du livre 'OPERATING SYSTEM CONCEPTS' d'ABRAHAM
SILBERSCHATZ) montre que, de façon générale, un ordinateur consisterait en un CPU et un nombre de
contrôleurs qui sont connectés au travers d'un bus. Chaque contrôleur a la charge d'un périphérique
spécifique ; plusieurs périphériques peuvent être connectés à un seul contrôleur qui est responsable des
mouvements de données entre le(s) périphérique(s) qu'il contrôle et son buffer.
Pour une opération d'E/S donnée, le CPU charge les registres locaux du contrôleur concerné, lequel, en
scrutant ses registres, détermine l'action à effectuer : lecture (entrée) ou écriture (sortie). Dans le cas d'une
entrée (lecture), le contrôleur transfère les données du périphérique vers le buffer. Dans le cas d'une sortie
(écriture) le contrôleur transfère les données du buffer vers le périphérique. Une fois le transfert terminé, le
contrôleur informe le CPU qu'il a terminé. Cette communication entre les contrôleurs de périphériques et
le processeur s'effectue grâce aux interruptions (IRQ).
Une interruption est un mécanisme de commutation du contexte du processeur pour l'obliger à réagir à un
événement (notions de pilotes).

 L'accès direct à la mémoire ou DMA (sigle anglais de Direct Memory Access) est un procédé informatique où
des données circulant de, ou vers, un périphérique (port de communication, disque dur) sont transférées directement par
un contrôleur adapté vers la mémoire principale de la machine, sans intervention du microprocesseur si ce n'est pour lancer
et conclure le transfert1 . La conclusion du transfert ou la disponibilité du périphérique peuvent être signalés
par interruption.
 On l'oppose ainsi à des techniques de polling où le microprocesseur doit attendre chaque
donnée. Le polling désigne une technique1 consistant à interroger une succession de clients (matériels ou logiciels) pour
déterminer le(s)quel(s) d'entre eux sont intéressés par un service (diffusion d'information, mises à jour, etc).

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 18
7. NOTION DE PROCESSUS

7.1 Concepts
Un processus est simplement un programme en cours d'exécution. L'exécution d'un processus se déroule
de façon séquentielle, c'est dire qu'à tout moment une instruction au plus en est exécutée. C’est l’unité
d’exécution des programmes modernes.
Un processus est plus que le code programme ; il inclut généralement l'activité courante représentée par le
compteur programme et le contenu des registres du processeur. Le compteur programme est l'indication à
la prochaine instruction à exécuter d'un programme.
Un processus peut, pendant son exécution, engendrer plusieurs autres processus. Ainsi, un système consiste
en une collection de processus : certains sont des processus système exécutant des codes système, d'autres
sont des processus utilisateur exécutant des codes utilisateur.

7.2 Les états d'un processus


Puisqu'un processus s'exécute, il change d'état. L'état d'un processus se définit en partie par son activité
courante. Les différents états d'un processus sont (cf. figure 4.1 p.98 du livre 'OPERATING SYSTEM
CONCEPTS' d'ABRAHAM SILBERSCHATZ) :
- NEW (nouveau) : le processus est nouvellement créé (n'a encore subi aucune exécution)
- READY(prêt ) : le processus attend d'être assigné à un processeur
- RUNNING (actif ) : les instructions sont en cours d'exécution
- WAITING (en attente ) : le processus attend un événement
- TERMINATED (terminé) : l'exécution du processus est terminée.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 19
7.3 Le Bloc de contrôle de processus
Chaque processus est représenté dans le système par un bloc de contrôle appelé PCB (Process
Control Block) décrivant le contexte du processus. Un PCB contient diverses informations relatives à un
processus spécifique, notamment :
- l'état du processus
- le compteur de programme (registre spécial)
- les registres du processeur
- des informations sur les files d'attente (priorité, pointeurs)
- des informations relatives à l’occupation de la mémoire
- des statistiques (temps CPU déjà consommé)
- des informations sur les Entrées-Sorties
- etc.(cf. gestionnaire des tâches de Windows)

7.4 Les Threads (Processus légers)


Un thread est en quelque sorte un sous-processus. La notion de thread est liée à la notion du
parallélisme (multitraitement, cf. PIPELINE) où une instruction peut être décomposée en des sous-
instructions pouvant être exécutées de façon réellement simultanée. Par exemple, l'instruction exécutant la
formule
Intérêts = Dépôts * Taux/100 * Durée/365 peut être décomposée en :
A=Dépôts, B= Taux/100 et C=Durée/365
de sorte que les calculs de B et C puissent être exécutés sur deux processeurs différents avant que le résultat
définitif ne soit calculé sur le processeur central.
La figure 4.9 p.115 du livre 'OPERATING SYSTEM CONCEPTS' d'ABRAHAM
SILBERSCHATZ montre bien une bonne simulation.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 20
Table de comparaison
Processus Thread
Un programme en cours d’exécution s’appelle
Définition Un thread est une petite partie d’un processus.
un processus.
La La communication entre deux processus est La communication entre deux threads est moins
communication coûteuse et limitée. coûteuse que celle du processus.
Le multitâche basé sur les processus permet à un Le multitâche basé sur les threads permet à un
Multitâche ordinateur d’exécuter deux ou plusieurs programme unique d’exécuter deux threads ou plus
programmes simultanément. simultanément.
Espace Chaque processus a son espace d’adressage Tous les threads d’un processus partagent le même
d’adressage distinct. espace d’adressage que celui d’un processus.
Tâche Les processus sont des tâche lourde. Les threads sont des tâches légères.
Vous imprimez un fichier à partir d’un éditeur de texte
Vous travaillez sur un éditeur de texte, il fait
Exemple tout en travaillant dessus, ce qui ressemble à l’exécution
référence à l’exécution d’un processus.
d’un thread dans le processus.
https://waytolearnx.com/2018/09/difference-entre-thread-et-processus-en-java.html

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 21
8. GESTION DE LA MEMOIRE CENTRALE
La mémoire utilisée par les applications dans un ordinateur pendant son fonctionnement se divise
en deux catégories (hormis les registres et les caches) :
- la mémoire principale (vive ou interne) : composée de circuits intégrés, elle est très rapide et
sert de stockage temporaire pour les programmes et les données ;
- les mémoires secondaires (auxiliaires) : composées de supports magnétiques (disque dur, bandes
magnétiques, etc.), elles sont beaucoup plus lentes et servent de stockage permanent pour les
données et programmes.
Le but principal d'un système d'exploitation est l'exécution des programmes. Ces programmes,
ensemble avec les données associées doivent être en mémoire principale du moins partiellement pendant
l'exécution car les accès mémoire principale sont des milliers de fois plus rapides que les accès mémoire
auxiliaire. Ainsi plus la quantité mémoire principale disponible est importante (dans les limites des
capacités du CPU), plus vite l'ordinateur réagit. Ceci est dû au fait que la mémoire centrale est seule
directement adressable par le CPU.
Or la mémoire principale est assez petite par rapport à la somme des tailles des programmes et données
mis en jeu lors d'un traitement. Cette situation d'insuffisance de mémoire principale se présente assez
souvent dans la mesure où cette mémoire doit être partagée d'une part entre les processus systèmes et les
processus utilisateurs, et d'autre part entre de nombreux processus utilisateurs.
Il s'agit donc pour le système d'exploitation d'organiser cette mémoire pour en tirer le maximum :
c'est le rôle du gestionnaire de mémoire. Ainsi lorsque la mémoire centrale vient à manquer, le gestionnaire
de mémoire transfère sur mémoire secondaire des processus et données non actifs, puis active d'autres
processus et données plus prioritaires en les ramenant en temps voulu dans la mémoire principale ; cette
technique de va-et-vient ou d'échange entre la mémoire principale et la mémoire secondaire est appelée
SWAPPING et engendre plusieurs politiques d'allocation de mémoire.
Le gestionnaire de mémoire doit dès lors assurer les fonctions suivantes :
- réaliser la correspondance entre adresses logiques et adresses physiques,
- permettre le partage de la mémoire,
- connaître les espaces libres,
- allouer de l'espace mémoire pour satisfaire une demande,
- récupérer l'espace mémoire utilisé par un processus qui s'est terminé,
- traiter les swapping,
- assurer la protection mutuelle des informations appartenant à des utilisateurs distincts,
- optimiser la quantité de mémoire disponible.
De toutes ces fonctions, ce sont l'allocation et l'optimisation qui déterminent la mise en œuvre des
autres et font, de ce fait, l'objet de plusieurs algorithmes à cause des difficultés de choix de la meilleure
politique d'allocation de mémoire et de son implémentation.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 22
Historiquement l'allocation de la mémoire centrale a été statique et contiguë : pour charger un
fichier exécutable, il fallait trouver une zone contiguë de mémoire ; dans certains systèmes d'exploitation
comme DOS, l'adresse de chargement était imposée et fixe. On parlait alors de partitions de mémoire.
Aujourd'hui, afin de permettre l'allocation dynamique de la mémoire centrale sans nécessité de
contiguïté, plusieurs mécanismes sont utilisés dans de nombreux systèmes d'exploitation pour découper la
mémoire, les programmes et les données. Deux de ces mécanismes sont la segmentation et la pagination
qui sont parfois combinés. Dans tous les cas, la conversion des adresses logiques générées par le CPU en
des adresses physiques s'effectue par un microprogramme appelé unité de gestion de mémoire (MMU =
Memory Management Unit) qui sert d'interface entre le CPU et la mémoire physique. La figure 8.3 p.256
du livre 'OPERATING SYSTEM CONCEPTS' d'ABRAHAM SILBERSCHATZ montre bien une bonne
illustration de MMU.

8.1 La segmentation
Dans ce contexte la mémoire centrale se présente pour un utilisateur comme une collection de
parcelles ayant des longueurs variables appelées segments.
Un segment est un ensemble d'informations considéré comme une unité logique (espace d’adressage
indépendant) et désigné par un nom ; sa représentation occupe un ensemble d'emplacements contigus. Il
peut avoir une taille variable. A l'intérieur d'un segment, les informations sont désignées par un déplacement
qui est une adresse relative par rapport au début du segment. Une information est donc désignée par un
couple (nom de segment, déplacement) que l'on appelle adresse segmentée (comme le montre la figue 6.12
p.231 du livre 'PRINCIPES DES SYSTEMES D'EXPLOITATION DES ORDINATEURS' de
S.KRAKOWIAK).

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 23

Il n'y a pas de dépendance ni physique ni logique entre les segments. Physiquement, un segment peut
être implanté à une adresse quelconque, à condition d'occuper des emplacements contigus. Logiquement,
les différents segments gérés par un système sont indépendants. Même si les noms de segments sont souvent
représentés par des numéros entiers consécutifs, il n'y a pas de relation de contiguïté entre le dernier
emplacement du segment i et le premier emplacement du segment i + 1 (cf. figure 8.24 p.286 du livre
'OPERATING SYSTEM CONCEPTS' d'ABRAHAM SILBERSCHATZ).

Les segments sont utilisés :


- comme unités de découpage logique d'un programme, pour représenter, par exemple, les
différentes procédures, les modules, des données complexes (tableaux, enregistrements),
Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 24
- comme unité de partage entre plusieurs utilisateurs,
- comme unité de protection (conséquence naturelle du partage) : le segment est l'entité à laquelle les
droits d'accès sont attachés.
La segmentation est alors le mécanisme de gestion de la mémoire centrale par des segments. Sa
réalisation entraîne au niveau de la MMU des tables de segments qui mappent les adresses des segments ; un
descripteur de segment contient au minimum :
- l'adresse d'implantation du segment
- la longueur du segment
- les droits d'accès.

La fragmentation externe est l'éparpillement des bouts d'emplacements inutilisés à cause de leur
incommodité résultant des tailles inadéquates aux demandes de mémoire. C’est encore appelé phénomène du
damier (checkerboarding).
Plusieurs algorithmes ont été implémentés pour tenter de résoudre le problème de fragmentation
externe de la mémoire indue par l'allocation dynamique (segmentation). Parmi ces algorithmes, il y a FIRST-
FIT, BEST-FIT et WORST-FIT.
Avec l'algorithme FIRST-FIT, le gestionnaire de mémoire parcourt la table des segments à la recherche
de la première zone libre qui puisse satisfaire la demande. La zone trouvée est alors scindée en deux dont la
première est occupée pour satisfaire la demande et la seconde est inutilisée, sauf si la zone trouvée a exactement
la taille requise. Cet algorithme est rapide puisqu'il effectue très peu de recherche ; mais il occasionne un taux
de fragmentation élevé.
Avec l'algorithme BEST-FIT, le gestionnaire de mémoire recherche la plus petite zone libre qui
convient ; on évite ainsi de fractionner une grande zone dont on pourrait avoir besoin plus tard. Cet algorithme
est plus lent car il parcourt toute la table des segments et occasionne anormalement un taux de fragmentation
plus élevé que l'algorithme FIRST-FIT.
Avec l'algorithme WORST-FIT, le gestionnaire de mémoire recherche la plus grande zone libre qui
convient ; on fractionne ainsi une grande zone dont on pourrait avoir besoin plus tard. Cet algorithme est
également plus lent parce qu’il parcourt également toute la table des segments.
Puisque la segmentation implique naturellement une allocation dynamique, le compactage
(défragmentation ou optimisation) de la mémoire s'effectue à volonté du gestionnaire de mémoire. Mais
généralement, plus la moyenne des tailles de segment est petite, plus faible est le taux de fragmentation (externe
≠ interne).
Exercice 8.5 p.297 O.S. Concepts
Travail de recherche personnel : comment déterminer le taux de fragmentation ?

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 25
8.2 La pagination
Une solution au problème de la fragmentation externe est de permettre des emplacements non contigus,
occupant physiquement la mémoire partout où elle est disponible. La réalisation de cette solution se trouve
dans l'utilisation du mécanisme de la pagination.
A cause de ses avantages sur d'autres mécanismes, la pagination dans ses diverses formes est
communément employée dans plusieurs systèmes d'exploitation.

8.2.1 Mémoire virtuelle


Les évolutions techniques et économiques ont permis de munir les ordinateurs actuels d'une mémoire
vive de taille importante (de quelques Mo à plusieurs dizaines de Go). Cependant, les logiciels sont de plus en
plus volumineux, et il n'est pas rare qu'un programme nécessite pour son exécution plus de mémoire vive qu'il
ne peut lui en être alloué.
Le mécanisme de mémoire virtuelle permet de résoudre ce problème. Seule une partie du programme
est résidante en mémoire vive, le reste étant placé sur mémoire secondaire. Lorsque le processeur cherche à
accéder à une information qui n'est pas présente en mémoire vive, un dispositif matériel spécialisé engendre
une interruption, signalant ainsi au système d'exploitation qu'il doit amener en mémoire vive la zone où se
trouve cette information. S'il n'y a pas de mémoire vive disponible pour cette information, le gestionnaire de
mémoire commence par réquisitionner une partie occupée mais inactive, sauvegarde son contenu sur mémoire
secondaire et utilise cette partie de la mémoire pour placer les informations demandées. Un système de
cartographie, régulièrement mis à jour par le système d'exploitation, permet au matériel de savoir à tout
moment quelles parties du programme résident en mémoire vive.
Le mécanisme de mémoire virtuelle permet dès lors d'utiliser un espace de mémoire logique plus grand
que l'espace de mémoire physique : une partie de mémoire secondaire (zone de swapping) est utilisée pour
compléter la RAM. La mémoire virtuelle est donc l'étendue de mémoire adressable par le processeur.

Selon MEDIADICO, la mémoire virtuelle est la


technique permettant d’augmenter la capacité
de mémoire vive d’un ordinateur, en
déchargeant dans une zone tampon du disque
dur qui simule la mémoire vive, des données qui
ne sont pas constamment nécessaires durant le
traitement de l’information mais qui demeurent
ainsi immédiatement accessibles.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 26
8.2.2 Principes de base de la pagination
La mémoire virtuelle est divisée en blocs de taille fixe appelés pages qui servent d'unités d'allocation.
La mémoire physique correspondante est elle-même divisée en blocs de même taille que les pages appelés
cases (cf. figure 9.12 p.358 du livre 'PRINCIPES DES SYSTEMES D'EXPLOITATION DES
ORDINATEURS' de S.KRAKOWIAK).).

La taille des cases et des pages est imposée par le matériel et est une puissance de 2, allant de 512 à
65 536 octets (64 Ko). Les transferts entre la RAM et la mémoire secondaire se font toujours par pages entières.
Une adresse logique est alors construite par concaténation d'un numéro de page et d'un déplacement à
l'intérieur de la page. De même une adresse physique est la concaténation d'un numéro de case et d'un
déplacement dans la case. La correspondance entre les adresses des pages et les adresses des cases est assurée
au niveau de la MMU par la "fonction de pagination".

8.2.3 Implémentation matérielle


La réalisation de la fonction de pagination nécessite matériellement l'utilisation d'une mémoire
associative et d'une table de pages (cf. figure 9.14 p.360 du livre ''PRINCIPES DES SYSTEMES
D'EXPLOITATION DES ORDINATEURS' de S.KRAKOWIAK).
La mémoire associative, constituée d'un certain nombre de registres de base, comporte une entrée par
case et conserve pour chaque case le numéro de page virtuelle qu'elle contient : elle joue le rôle de mémoire
cache.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 27

Exercice : quel est le rôle des registres par rapport à la mémoire centrale. Donnez des exemples.

La Table des pages est indexée par numéro de page virtuelle et chacune de ses entrées contient les
informations suivantes :
- un numéro de case (ncase) ;
- un indicateur de présence ;
- un indicateur de modification ;
- le mode d'accès autorisé ;
- etc.
La mémoire associative a une taille réduite (quelques dizaines ou centaines d'entrées) où sont conservés
les couples (npage, ncase) les plus récemment référencés. Lors d'un accès à la mémoire, la mémoire associative
est d'abord consultée. Ce n'est qu'en cas d'échec de la page recherchée (il y a alors défaut de page) que la table
des pages est explorée ; la mémoire associative est alors mise à jour : le couple (npage, ncase) courant remplace
l'entrée la plus anciennement référencée.
 La fragmentation interne ?

8.2.4 Mécanisme de gestion du défaut de page


Outre la correspondance effective des adresses (npage, ncase), la fonction de pagination doit réaliser
les opérations suivantes :
- mise à jour du bit d'écriture et du bit d'utilisation, s'ils existent;
- détection du défaut de page qui provoque un déroutement.

Le programme de traitement du déroutement pour défaut de page doit :


1) trouver en mémoire secondaire la page manquante
2) trouver une case libre en mémoire principale ; s'il n'y a pas de case libre, il faut évincer une case
occupée, avec mise à jour des informations.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 28
3) provoquer le chargement de la page manquante avec mise à jour des informations.
L'étape 1 nécessite d'avoir pour chaque mémoire virtuelle une description d'implantation. Sa forme la
plus simple est celle d'une table qui indique pour chaque page virtuelle son adresse en mémoire secondaire : la
localisation d'une page virtuelle en mémoire secondaire est alors déterminée en consultant la table
d'implantation.
L'étape 2 met en œuvre un algorithme de remplacement. Elle nécessite de conserver une table
d'occupation de la mémoire physique, qui indique pour toute case occupée l'identité de la page virtuelle qui
l'occupe ainsi que des renseignements complémentaires (protection, partage...).

8.2.5 Algorithmes de remplacement de page


A la suite d'un défaut de page et en l'absence d'une case libre, le système d'exploitation doit retirer
une page de la mémoire pour libérer de la place pour la page manquante. Si la page à retirer a été modifiée
depuis son chargement en mémoire, il faut la réécrire sur le disque. Sinon le disque est déjà à jour ; la page
lue remplace simplement la page à supprimer. Cette dernière peut être choisie au hasard, mais on améliore
sensiblement les performances du système si on choisit une page peu utilisée. Les algorithmes de
remplacement de page ont été très étudiés tant du point de vue théorique que pratique.

8.2.5.1 ALGORITHME DE REMPLACEMENT DE PAGE OPTIMAL


Le meilleur algorithme de remplacement est facile à décrire mais impossible à mettre en œuvre.
Au moment du défaut de page, il existe en mémoire un certain nombre de pages.
Une de ces pages risque d'être référencée très vite, d'autres ne sont référencées que dans 10, 100 ou 1000
instructions. On peut numéroter chaque page avec le nombre d'instructions qui seront exécutées avant
qu'elle ne soit référencée. L'algorithme de remplacement de page optimal consiste à retirer la page qui
comporte le plus haut numéro. Si une page n'est adressée que dans 8000000 d'instructions et une autre dans
6000000 il vaut mieux retirer la première car on repousse ainsi le défaut de page suivant le plus tard
possible.
Malheureusement, cet algorithme est irréalisable car le système d'exploitation ne peut pas connaître
à l'avance le moment où les différentes pages seront référencées. On peut néanmoins implémenter cet
algorithme en exécutant le programme sur un simulateur qui mémorise toutes les références aux pages lors
d'une première exécution et utilise ces informations lors d'une deuxième exécution.

8.2.5.2 ALGORITHME DE REMPLACEMENT D'UNE PAGE NON RECEMMENT UTILISEE


Les ordinateurs associent à chaque page deux bits d'informations sur les pages utilisées. Le premier bit,
R ou bit de référence, est positionné par le matériel à chaque lecture ou écriture de la page. Le deuxième
bit, M ou bit de modification est positionné quand on écrit dans une page (par exemple quand on y écrit un
octet).

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 29
Ces deux bits R et M permettent de construire l'algorithme de pagination suivant. Au lancement
d'un processus, le système d'exploitation met à 0 les bits de toutes ses pages. Périodiquement, le bit R est
remis à 0 pour différencier les pages qui n'ont pas été récemment référencées des autres.
Lorsqu'un défaut de pages se produit le système d'exploitation parcourt toutes les pages et les répartit dans
les quatre catégories suivantes en fonction des différentes valeurs des bits R et M.
 Catégorie 0 : Non référencée, non modifiée
 Catégorie 1 : Non référencée, modifiée
 Catégorie 2 : Référencée, non modifiée
 Catégorie 3 : Référencée, modifiée
L'algorithme de la page non récemment utilisée ou NRU (Not Recently Used) retire une page au hasard
de la catégorie non vide qui a le plus petit numéro. L'algorithme NRU est facile à comprendre, relativement
efficace et fournit des performances qui sont suffisantes même si elles ne sont pas optimales.
8.2.5.3 ALGORITHME DE REMPLACEMENT DE PAGE PREMIER ENTRE, PREMIER SORTI
Un deuxième algorithme qui requiert peu de temps processeur est l'algorithme premier entré premier
sorti ou FIFO (First In First Out). Le système d'exploitation mémorise une liste de toutes les pages en
mémoire, la première page étant la plus ancienne et la dernière, la plus récente. Lorsqu'il se produit un
défaut de page, on retire la première page de la liste et on place la nouvelle à la fin de cette liste.
Cet algorithme, présente l'inconvénient de pouvoir retirer une page ancienne mais très utilisée.
Une modification simple de l'algorithme FIFO (appelée algorithme de la seconde chance) consiste
à examiner les bits R et M de la page la plus ancienne. Si cette page appartient à la catégorie 0 (non
référencée, non modifiée) elle est supprimée ; sinon on teste la page un peu moins ancienne et ainsi de suite.
S'il n'y pas de page dans la catégorie 0, on applique cet algorithme aux catégories 1, 2 puis 3.
8.2.5.4 ALGORITHME DE REMPLACEMENT DE LA PAGE LA MOINS RECEMMENT UTILISEE
Une bonne approximation de l'algorithme optimal se fonde sur l'observation suivante : les pages les
plus référencées au cours des dernières instructions seront probablement très utilisées au cours des
prochaines instructions. De même, les pages qui n'ont pas été référencées pendant un long moment ne seront
probablement pas demandées pendant un certain temps. Cette observation suggère l'algorithme suivant :
lorsqu'il se produit un défaut de page, il faut supprimer la page qui est restée inutilisée pendant le plus de
temps.
Cette stratégie est celle de la page la moins récemment utilisée ou pagination LRU (least recently
used) .L'algorithme LRU est théoriquement réalisable mais il est très coûteux. Il faut en effet mémoriser
une liste chaînée de toutes les pages en mémoire. La page la plus utilisée étant en tête et la moins utilisée
en queue de liste. La difficulté naît du fait que cette liste doit être mise à jour chaque fois que la mémoire
est adressée.
Exercice (Exemple p.317)

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 30
9. LA GESTION DES FICHIERS
La gestion des fichiers est assurée dans le système d'exploitation par un module dénommé Système de
Gestion des Fichiers (SGF). Le SGF est la partie d'un système d'exploitation qui assure la conservation des
données et qui réalise les fonctions d'accès aux données. Pour la majorité des utilisateurs, c'est la partie visible
d'un système d’exploitation. Il fournit les mécanismes de conservation et d'accès aux données et programmes
appartenant au système d'exploitation et aux utilisateurs du système informatique.

9.1 Définition et concepts liés à la notion de fichier


On désigne sous le nom de fichier un ensemble de données (≠ information) regroupées en vue de leur
conservation et de leur utilisation (réutilisation) dans un système informatique. Le fichier est l'unité logique de
conservation de données, c'est dire que les données ne peuvent être écrites sur les supports magnétiques qu'à
l'intérieur d'un fichier.
Les fichiers sont représentés, par le système d'exploitation, sur des supports physiques (disques). Ces
supports sont habituellement non volatiles, donc ils conservent les données de façon permanente et résistent
aux défaillances d'alimentation électrique (contrairement à la RAM) et au redémarrage du système.
9.1.1 Les attributs du fichier
Un fichier se nomme pour la commodité des utilisateurs humains et est désigné par un nom. Lorsqu'un
fichier est créé, il devient indépendant du processus, de l'utilisateur et même du système qui l'a créé (exemple
de ADDITION.c créé par un étudiant sur une disquette à remettre à son professeur).
A part le nom, un fichier possède certains autres attributs, qui varient d'un système d'exploitation à un
autre ; mais typiquement on peut noter :
- Nom : première information donnée par l'homme (recherche sur les règles de nommage)
- Type : pour les systèmes d'exploitation supportant différents types
- Emplacement : c'est un pointeur vers le périphérique et la position du fichier sur le périphérique
- Taille : la taille courante du fichier (en octets, mots ou cluster) et possiblement la taille maximum
allouée
- Protection : information pour contrôler l'accès (lecture, écriture, exécution, etc. cf. ATTRIB et chmod)
- Date, heure et identification de l'utilisateur : ces données peuvent concerner la création, la
modification et la dernière utilisation pour des besoins de protection, de sécurité et de contrôle.
Ces attributs font partie d'un groupe de renseignements relatifs à un fichier ; le groupe est appelé
descripteur de fichier. Les descripteurs de tous les fichiers d'un volume (disque, partition, etc.) sont rangés dans
une table de descripteurs appelé catalogue (répertoire ou directory). Le catalogue est aussi gardé sur le volume
(mémoire secondaire) dans une zone qui lui est réservée spécialement.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 31
9.1.2 Les opérations sur les fichiers
Un fichier est un type de données abstrait. Alors pour définir correctement un fichier, il faut considérer
les opérations qu’on peut effectuer sur les fichiers. Les systèmes d'exploitation fournissent des routines (appels
systèmes) pour six opérations de base que nous allons examiner :
- Création d'un fichier : deux étapes sont nécessaires. Premièrement, trouver de place pour le fichier
(allocation) et deuxièmement insérer dans le catalogue les informations du nouveau fichier ;
- Écriture dans un fichier : deux paramètres sont nécessaires à la routine ; ce sont le nom du fichier et
l'information à écrire dans le fichier. Étant donné un nom de fichier, le système cherche dans le catalogue
l'emplacement du fichier. Le système garde un pointeur d'écriture vers la position où aura lieu la prochaine
écriture.
- Lecture dans un fichier : il faut spécifier à la routine le nom du fichier et l'endroit en mémoire RAM
où sera copiée les données à lire. A nouveau le système cherche dans le catalogue l'emplacement du fichier et
garde un pointeur vers la position de la prochaine lecture. Ce pointeur est mis à jour après chaque lecture.
- Déplacement à l'intérieur d'un fichier : le catalogue est fouillé pour trouver l'entrée correspondant au
ficher et le pointeur est remis à une valeur donnée. Cela n'implique aucune opération d'E/S.
- Destruction d'un fichier : le répertoire est fouillé pour déterminer le fichier concerné. Lorsque l'entrée
associée est obtenue, celle-ci est effacée et l'espace du fichier est libéré de manière à être réutilisé par d'autres
fichiers.
- Troncation d'un fichier : Cette routine modifie seulement la taille parmi les attributs du fichier qui
demeurent inchangés. C'est une opération utile pour certaines occasions.
Ces six opérations de base comprennent l'ensemble minimum des opérations nécessaires à la
manipulation des fichiers. D'autres opérations communes dépendent de l'organisation du SGF et sont des
combinaisons de ces routines. Ce sont par exemple :
- l'ajout à la fin d'un fichier existant
- la copie de fichiers
- consultation des attributs de fichier
- la modification des attributs de fichier
Deux autres fonctions sont fondamentales :
- ouverture d'un fichier : permettre l'accès au contenu du fichier
- fermeture d'un fichier : interdire tout accès ultérieur au contenu du fichier.

9.1.3 Les types de fichier


Communément les fichiers représentent des programmes (source, objet et exécutable) et des données.
Les fichiers de données peuvent contenir des données de type numérique, alphanumérique ou binaire. Des
fichiers peuvent avoir un format libre (tel que les fichiers de texte) ou un format rigoureusement défini. En
général, un fichier est une séquence de bits, octets, lignes ou enregistrements dont la signification est définie
par son créateur et connue de son utilisateur.
Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 32
Le concept de fichier étant extrêmement général, une considération majeure dans le SGF en
particulier et dans le système d'exploitation en général est de savoir si le système d'exploitation doit reconnaître
et supporter les types de fichier. Si le système d'exploitation reconnaît le type de fichier, il peut traiter le fichier
de diverses façons raisonnables (problème causé par l'impression d'un fichier binaire par exemple).
Une technique commune de réalisation des types de fichier consiste à inclure le type de fichier dans le
nom de fichier (exemple des fichiers .com, .exe, .bat, .doc). Ces extensions ne sont pas nécessaires ; seulement
elles aident un utilisateur à désigner un fichier sans spécifier l'extension (réduction de la frappe) et l'application
concernée cherchera le fichier en ajoutant au nom donné l'extension escompté. Puisque ces extensions ne sont
pas imposées par le SE, elles ne constituent que des conjectures (simples suppositions) pour les applications
qui les utilisent (exemple des raccourcis Windows ; exercice sur une fausse extension).
Un autre exemple sur l'utilité des types de fichier concerne les langages de développement qui
manipulent différents fichiers (source, objet, exécutable) opérationnellement associés (saisie/màj, compilation,
édition de lien). Pour la convivialité de ces langages le système d'exploitation doit pouvoir distinguer les
différents fichiers afin de pouvoir tenir compte des mises à jour pour déclencher automatiquement les
opérations nécessaires à une actualisation complète.
En définitive, les extensions des fichiers dans les systèmes d'exploitation sont seulement utilisées pour
aider les utilisateurs à déterminer le type des contenus des fichiers ; elles ne sont pas imposées et ne dépendent
pas du SE.

9.1.4 Structure interne des fichiers


Plusieurs types de données peuvent être stockés dans un fichier : programmes source, programmes
objet, programmes exécutables, données numériques, textes, enregistrements, images graphiques, sons, etc.
Ainsi un fichier a une certaine structure définie en liaison avec son type. Donc le type de fichier est aussi utilisé
pour indiquer la structure interne du fichier. En conséquence, un fichier de programme source ou programme
objet a une structure qui doit satisfaire les attentes du programme devant le lire. Mieux encore certains fichiers
doivent se conformer à une structure exigée et comprise par le SE.
Par exemple, le système d'exploitation doit exiger qu'un fichier .exe doit avoir une structure spécifique
de manière à y déterminer l'adresse de chargement et l'adresse de la première instruction. Plusieurs exemples
pourraient prouver la nécessité que le système d'exploitation prenne en compte les types de fichier. Mais la
morale est que le système d'exploitation doit contenir le code qui permet de traiter chaque type ; ceci rend les
systèmes d'exploitation colossaux. De plus, chaque fichier à traiter sur le système d'exploitation doit être défini
suivant une des structures supportées par le système d'exploitation; ceci entrave l'utilisation de nouvelles
applications manipulant des fichiers d'autres types non définis dans le SE.
La règle est, alors, que le système d'exploitation comporte des codes d’une part pour supporter les
structures fréquemment utilisées et d’autre part permettre la prise en charge de nouvelles structures afin de
faciliter la programmation.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 33
9.2 Fonctions d'un système de gestion de fichiers
Les principales fonctions assumées par un SGF correspondent aux diverses opérations de base sur les
fichiers. Ces fonctions sont présentes dans tout SGF.
La conservation des fichiers et la réalisation des fonctions d'accès impliquent la prise en charge par le
SGF de :
- la gestion des supports physiques de données, en masquant à l'utilisateur les détails de l'organisation
physique de ses fichiers,
- la sécurité des fichiers (garantie de leur intégrité en cas d'incident ou de malveillance),
- et la protection des fichiers (le respect des règles d'utilisation fixées : droits d'accès, conditions de
partage).
Ces charges montrent que le SGF joue un rôle central entre les utilisateurs et le système d'exploitation
lui-même, puisque le SGF doit gérer les données appartenant aux deux.

9.3 Organisation logique des fichiers


L'utilisateur d'un système informatique organise les données de ses fichiers suivant ses besoins propres,
en leur imposant une structure, ou une organisation, dite logique. C'est sur cette organisation que se basent les
fonctions d'accès aux données, donc l'organisation définit la méthode d'accès.
Un principe commun aux organisations logiques usuelles consiste à définir un fichier comme une
collection de données élémentaires de même nature, appelées enregistrements. Un enregistrement peut lui-
même avoir une structure plus fine dont chaque subdivision est appelée champ. Un champ est défini par un
nom et un domaine de valeurs. Le nom sert à désigner la donnée, deux données distinctes devant avoir des
noms différents. Le domaine de valeurs spécifie les valeurs possibles que peut prendre la donnée.
Les méthodes d'organisation logique des fichiers (représentation des données, réalisation des fonctions
d'accès) sont une application directe des algorithmes des structures de données : tables, files, listes, etc.
Plusieurs méthodes existent, mais nous allons nous intéresser aux plus classiques (accès séquentiel,
accès direct).
L'implémentation de l'organisation logique des fichiers ne relève pas rigoureusement des systèmes
d'exploitation mais plus souvent des langages et des applications qui manipulent des fichiers. Ainsi les fichiers
binaires écrits en Langage C contiennent des données dont la structure n'est connue que du programme utilisé
pour les créer (et d’autres programmes connaissant cette strcuture).

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 34
9.3.1 Accès séquentiel
C'est la méthode la plus simple. Dans une organisation à accès séquentiel (organisation séquentielle),
les enregistrements dans les fichiers sont ordonnés les uns après les autres. Seule la fonction "successeur" est
fondamentale pour les opérations d'écriture et de lecture qui sont mutuellement exclusives (cf. mode
d'ouverture) : ‘lire suivant’ et ‘écrire suivant’. La fonction ‘prédécesseur’ est dès fois implémentée dans certains
systèmes.
L'organisation séquentielle est de loin la plus commune ; elle est souvent adoptée pour les éditeurs et
les compilateurs, peu importe le support qui les héberge. C'est le mode d'utilisation naturel des fichiers
sauvegardés sur des bandes magnétiques qui ne permettent que l'accès séquentiel.
Quoique simple, cette organisation présente de sérieux inconvénients :
- Le temps de recherche est long puisque pour accéder à un enregistrement de rang n, il est nécessaire
de lire les n-1 enregistrements qui le précèdent.
- Dans les systèmes où les enregistrements sont de longueur variable, la taille de l'enregistrement est
indiquée en tête de celui-ci pour réduire le temps de recherche ; mais il est délicat de remplacer un
enregistrement dans le fichier (pourquoi ?).

Exercice écrire une fonction de fusion de deux fichiers séquentiels dont les enregistrements sont déjà
triés.

9.3.2 Accès direct


L'organisation à accès direct est basée sur l'organisation physique des disques qui permettent l'accès
aléatoire. Dans une organisation à accès direct, les fichiers sont constitués d'enregistrements de longueur fixe,
les opérations de lecture et d'écriture sont arbitraires (par exemple on peut lire n14, écrire le n7, et lire le
n53). La rapidité d'accès est considérablement améliorée. C'est cette organisation qui est adoptée pour les
bases de données.
Les fonctions d'accès s'expriment en fonction des champs des enregistrements. On appelle clé tout
champ d'un enregistrement dont la valeur peut servir à identifier sans ambiguïté l'enregistrement. Suivant
l'organisation, un ou plusieurs champs peuvent servir de clé ; une ou plusieurs clés peuvent être définies sur un
même fichier : clé unique ou clés multiples. La gestion de la clé d'accès est prise en charge par le logiciel
utilisateur et se base sur un algorithme choisi parmi plusieurs dont les deux classiques sont : hash-coding et
indexation.

9.4 Organisation physique des fichiers


L'organisation physique des fichiers décrit la façon dont les octets sont rangés sur le support magnétique
(disque). A ce niveau, un fichier est vu comme une suite d'octets non structurés. Ceci dépend du système
d'exploitation et explique pourquoi une disquette créée sous DOS n'était pas lisible sous MacOS : l'organisation

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 35
des fichiers était différente ; aujourd'hui encore, en dehors de leur contenu et de la marque de fin de fichier,
les octets n'ont pas la même signification (fin d'enregistrement, fin de page, etc.).
Alors que l'utilisateur voit un fichier comme une suite de données successives, les données appartenant
à un fichier sont le plus souvent dispersées sur la surface du support et c'est le système d'exploitation qui établit
le lien entre elles.
Ces deux réalités sont fonction de l'organisation physique des supports et de la méthode d'allocation.
9.4.1 Organisation physique d'un support magnétique

Un disque est constitué de plusieurs plateaux (un seul pour une disquette).
Un plateau a deux faces, avec une tête de lecture pour chaque face utile.
Une face est divisée en plusieurs pistes.
Une piste est divisée en plusieurs secteurs, donnant l'unité physique de lecture ou écriture (entre 32 et
4096 octets, habituellement 512 octets).
Les pistes de même position constituent un cylindre ; l'utilisation des cylindres est facilitée par le fait
que les têtes de lecture - écriture sont solidaires, permettant un accès simultané à toutes les pistes d'une même
position.
Pour améliorer l'efficacité des E/S, les transferts entre mémoire et disque s'effectuent par bloc (cluster),
un bloc étant constitué d'un ou de plusieurs secteurs.
Les disques ont deux caractéristiques avantageuses :
- ils peuvent être réécrits en un endroit : lecture et écriture après modification ;
- ils permettent l'accès direct aux données et peuvent simuler l'accès séquentiel.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 36
9.4.2 Méthodes d'allocation
L'organisation des disques permettant l'accès direct donne une souplesse à l'organisation physique des
fichiers. Dans la plus part des cas, plusieurs fichiers peuvent être stockés sur un même disque. Le problème
principal est l'allocation de l'espace aux fichiers de manière que, le disque étant utilisé réellement, les fichiers
soient accédés rapidement. Trois grandes méthodes d'allocation sont courantes : l'allocation contiguë,
l'allocation chaînée et l'allocation indexée.

9.4.2.1 L'allocation contiguë (cf. fig. 11.3)


Avec la méthode d'allocation contiguë, chaque fichier occupe en mémoire secondaire un ensemble de
blocs consécutifs. Elle facilite l'accès séquentiel.
C'est la seule méthode possible pour les bandes magnétiques : les fichiers sont rangés consécutivement
sur la bande, chaque fichier étant séparé du suivant par un caractère spécial appelé fin de fichier. Une double
fin de fichier marque la fin de la partie utilisée de la bande. Une opération "recherche de fin de fichier" permet
de sauter rapidement d'un début de fichier au suivant, par exemple pour rechercher un fichier d'un nom donné.
L'allocation contiguë peut également être utilisé sur un disque. Son principal avantage est de permettre
un accès séquentiel efficace, tout en permettant également un accès direct efficace. Elle présente néanmoins
de graves inconvénients dans le cas où les créations, destructions et changements de taille des fichiers sont
fréquents :
- fragmentation externe, qui peut être combattue par un compactage périodique : défragmentation;
- difficulté pour faire varier la taille d'un fichier : un fichier ne peut être agrandi facilement ; le
raccourcissement des fichiers contribue à la fragmentation externe.

9.4.2.2 L'allocation chaînée (cf. fig. 11.4)


Avec l'allocation chaînée, les blocs physiques appartenant à un fichier sont chaînés entre eux ; chaque
bloc contient un ou deux pointeurs pour le chaînage. Le descripteur du fichier contient :
- un pointeur vers le premier bloc,
- un pointeur vers le dernier bloc,
- le nombre de blocs occupés.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 37
Cette méthode est bien adaptée à l'accès séquentiel. En effet on ne peut accéder à un bloc qu'en
suivant le chaînage ; comme chaque lecture d'un pointeur nécessite un accès au disque, l'accès direct est
coûteux. L'usage de l'allocation chaînée est limité aux petits systèmes, notamment pour l'organisation des
fichiers sur disquettes.

9.4.2.3 L'allocation indexée


Cette méthode vise à permettre une réalisation efficace de l'accès direct. Ainsi, contrairement à
l'allocation chaînée, tous les pointeurs sont rassemblés dans une table d'implantation : ceci rend le temps d'accès
à un bloc indépendant de son adresse. La table peut être organisée de plusieurs manières : table unique, tables
chaînées, table à plusieurs niveaux.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 38
9.5 ADRESSAGE LOGIQUE DANS UN FICHIER
Le SGF réalise la correspondance entre organisation logique et organisation physique des fichiers.
L'organisation logique, seule connue des utilisateurs, est déterminée par des considérations de commodité et
de généralité ; l'organisation physique, liée aux caractéristiques des supports de mémoire utilisée, est
déterminée par des considérations d'économie de place et d'efficacité d'accès. Ces deux organisations sont
généralement différentes, et chacune d'elles est définie par des structures de données propres gérées par le SGF.
Il est donc naturel de construire le SGF selon une structure hiérarchique, comportant au moins les deux
niveaux correspondant aux deux organisations ci-dessus : toute action définie au niveau logique est interprétée
par un ensemble d'actions au niveau physique. Des niveaux intermédiaires peuvent être définis pour faciliter
la conception ou répondre à des besoins spécifiques (portabilité).
Pour séparer l'organisation logique d'un fichier de son organisation physique, il est commode
d'introduire une organisation intermédiaire qui joue le rôle d'interface. Cette organisation intermédiaire est
simplement une suite d'emplacements désignés par des entiers consécutifs appelés adresses logiques. On peut
alors séparer en deux étapes la mise en correspondance entre organisation logique et organisation physique
d'un fichier :
1 - traduction en adresses logiques des noms spécifiés par les fonctions d'accès au fichier (un tel nom
désigne un enregistrement ou un champ dans un enregistrement).
2 - traduction des adresses logiques en adresses physiques.
Fonctions d'accès -> désignation d'article -> adresse logique -> adresse physique.

9.6 STRUCTURE DES REPERTOIRES


Le système de gestion de fichiers peut être extensif (ajout de nouveaux disques). Certains systèmes
stockent des milliers de fichiers sur des centaines de giga octets de disque. Pour gérer toutes ces données, il
faut les organiser. Cette organisation se fait habituellement en deux parties :
- Premièrement, le SGF traite un bas niveau qui comporte les partitions. Les partitions sont considérées
comme des mini-disques. Tout au moins chaque disque a une partition. Des fois, les partitions désignent des
divisions physiques à l'intérieur d'un disque, alors que d'autres systèmes permettent de regrouper plusieurs
disques physiques sous une partition. En tous cas l'organisation physique des disques ne concerne pas
l'utilisateur ; celui-ci n'est concerné que par la logique des répertoires et la structure des fichiers. Ainsi les
partitions sont vues comme des disques virtuels.
- Deuxièmement, chaque partition contient des informations relatives aux fichiers qui y résident. Ces
informations sont gardées dans des entrées d'une table sommaire appelée répertoire (directory).

Les répertoires sont organisés avec des structures de données permettant d'insérer, de détruire, de
chercher le nom d'un fichier donné, et même de lister toutes les entrées. On rencontre le plus souvent trois
structures de répertoire : structure à un niveau, structure à deux niveaux, structure arborescente.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 39
9.6.1 Structure à un seul niveau
Cette structure n'existe pratiquement plus. Tous les noms sont traités au même et unique niveau. Cette
structure occasionne des conflits d'homonyme et n'est pas utilisée en dehors des systèmes mono-utilisateur.

9.6.2 Structure à deux niveaux


La structure à deux niveaux est une solution pour éviter le conflit des homonymes provenant de
plusieurs utilisateurs. Ainsi dans cette structure, un niveau primaire est destiné à l'identification des utilisateurs
et un niveau secondaire est réservé pour regrouper les fichiers de chaque utilisateur.

9.6.3 Structure arborescente


C'est la structure la plus connue de nos jours : il est utilisé par UNIX et beaucoup d'autres systèmes qui
s'en sont inspirés (DOS, MacOS, etc.). Dans cette structure, on peut créer autant de niveaux qu'on le désire
(avec des limitations pratiques). Un répertoire peut contenir des fichiers et des sous-répertoires. Chaque
répertoire possède un père et d'éventuels fils. Le répertoire de niveau le plus élevé est appelé racine. Chaque
fichier est accessible par un chemin d'accès qui peut être absolu (depuis la racine) ou relatif (depuis le répertoire
courant).

9.7 CHAÎNE D'ACCES À UN FICHIER


Pour le système d'exploitation, le nom du descripteur d'un fichier est un indice dans une table de
descripteurs ; c'est cet indice qui permet l'accès au fichier. Le nom du descripteur, habituellement inconnu des
utilisateurs et réservé au seul usage du système d'exploitation, est appelé nom interne du fichier.
Les utilisateurs n'accèdent au fichier que par son nom, ce nom est appelé nom externe.
Le nom externe ne permet pas d'accéder directement au contenu du fichier ; la chaîne d'accès à un
fichier est l'ensemble des structures de données qui met en relation le nom externe du fichier et son contenu :
Nom externe-> Répertoire-> Nom interne-> Fichier (données)

9.8 SECURITE ET PROTECTION DES FICHIERS


Les fichiers rassemblent toutes les données stockées dans un système informatique, y compris celles
nécessaires au fonctionnement même du système d'exploitation. Aussi c'est une importante responsabilité de
garantir l'intégrité des données dans l'éventualité des pannes matérielles ou logicielles et des malveillances.

On désigne par sécurité, l'ensemble des méthodes visant à assurer que toutes les opérations réalisées
sur un fichier se déroulent conformément à leurs spécifications, même en cas de défaillance au cours de
l'exécution, et que les données contenues dans un fichier ne sont pas altérées si aucune opération n'est effectuée
sur lui. Ces méthodes sont fondées sur la redondance interne et la sauvegarde des données.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 40
On désigne sous le terme protection, l'ensemble des méthodes visant à spécifier des règles
d'utilisation et à garantir que ces règles sont respectées. Ces dernières méthodes reposent sur la notion de droits
d'accès et sur l'existence de mécanismes permettant de garantir la conformité des opérations aux droits d'accès.
Unix définit un système de contrôle qui est employé dans toutes les circonstances. Cette notion, bien
qu'existante sous Windows, est très mal employée. Ceci provient de l'histoire de ce système. DOS et
Windows, jusqu'à la version 98 comprise, ignorait complètement la notion d'usager et de protection. Elle
fut introduite dans Windows NT, dans le système de fichiers NTFS (New Technology File System) mais
les mauvaises habitudes étaient prises et très peu de logiciels ont été conçus pour être installés correctement
et fonctionner sans les privilèges de l'administrateur, c'est à dire le droit de faire n'importe quoi.

9.9 SYSTEMES DE FICHIERS

9.9.1 Définition

Un système de fichiers (file system en anglais) est une structure de données permettant de stocker les
informations et de les organiser dans des fichiers sur ce que l'on appelle des mémoires secondaires
(disque dur, disquette, CD-ROM, clé USB, disques SSD, etc.). Une telle gestion des fichiers permet de
traiter, de conserver des quantités importantes de données ainsi que de les partager entre plusieurs
programmes informatiques. Il offre à l'utilisateur une vue abstraite sur ses données et permet de les
localiser à partir d'un chemin d'accès.

Il existe d'autres façons d'organiser les données, par exemple les systèmes de gestion de base de données
(notamment base de données relationnelle) et les fichiers indexés.

9.9.2 Liste des FS standard


DOS FAT 12/16/32, VFAT
Système de fichiers à hautes performances (High Performance FileSystem, HPFS)
Système de fichiers de nouvelle technologie (New Technology FileSystem, NTFS)
Les systèmes de fichiers étendus (Ext, Ext2, Ext3)
Le système de fichiers hiérarchique du Macintosh - HFS
Le système de fichiers pour CD-ROM : ISO 9660 - CD-ROM filesystem

9.9.2 Organisation pratique des disques


- Partition du système d’exploitation
- Partition des applications
- Partition des données

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 41
10/ GESTION DES PROCESSUS

Tout ordinateur moderne (multiprogrammation), aussi modeste soit-il, doit gérer plusieurs activités
simultanément ou parallèlement (gestion de l'horloge en même temps que le programme de l'utilisateur). Le
déroulement de ces activités sur le CPU crée des processus. Ces processus peuvent s'exécuter compétitivement,
coopérer et/ou échanger des données. Pour ce faire, ils ont besoin d'être ordonnancés. L'ordonnancement est
une fonction fondamentale dans un système d’exploitation. Presque toutes les ressources d'un système
informatique sont planifiées avant d'être utilisées. Le CPU est bien entendu une des ressources primaires d'un
système informatique. Ainsi, sa planification est centrale à la conception d'un système d’exploitation.
Le système d'exploitation est responsable des opérations relatives à la gestion des processus :
- la création et la destruction aussi bien des processus système que des processus utilisateur
- l'ordonnancement des processus
- la synchronisation des processus
- la communication entre processus
- etc.

Ces diverses opérations relatives aux processus trouvent leur réalisation dans les modules suivants du
système d'exploitation :
- la planification des ressources (processeurs)
- la synchronisation des processus
- la gestion des inter-blocages.

10.1 PLANIFICATION DU PROCESSEUR


La planification du CPU est la base des systèmes d'exploitation multi-programmés. Le système
d’exploitation, en commutant le CPU entre plusieurs processus, rend l'ordinateur beaucoup productif. Un seul
processeur peut être partagé entre plusieurs processus en se servant d'un algorithme d'ordonnancement qui
détermine quand il faut suspendre un processus pour en servir un autre.

10.1.1. Concepts de l'ordonnancement


Rafale (burst) : l'exécution d’un processus consiste en un cycle d’exécution CPU et d'une attente E/S,
de sorte qu'un processus tourne cycliquement entre ces deux états. Un processus commence avec une rafale
CPU. Celle-ci est suivie d'une rafale E/S qui est suivie d'une autre rafale CPU, ainsi de suite. Un programme à
dominance E/S est un programme qui nécessite beaucoup de rafales E/S. Un programme à dominance CPU
est celui qui nécessite beaucoup de rafales CPU. Ce concept est très important pour la sélection d'un algorithme
d'ordonnancement.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 42
L'ordonnanceur (scheduler) : est la partie du système d'exploitation qui gère la file d’attente des
processus prêts et qui en sélectionne un pour lui allouer le CPU lorsque celui-ci devient disponible. Il faut noter
que la file des processus prêts n'est pas nécessairement organisée en FIFO. En considérant les algorithmes
d'ordonnancement, la file d’attente des processus prêts peut être organisée en FIFO, avec priorité, en arbre, ou
simplement non ordonné. On distingue trois types d'ordonnanceur :
- ordonnanceur à court terme (ordonnanceur) : l'ordonnanceur des processus prêts
- ordonnanceur à long terme : l'ordonnanceur des travaux
- ordonnanceur à moyen terme : swapping.
La préemption (la réquisition) : c'est le fait de suspendre un processus en état de Running et le placer
en l'état de Ready pour exécuter un autre processus plus prioritaire. Cela crée plusieurs situations qu'il faut
gérer :
1 - un processus passe de l'état Running à l'état Waiting
2 - un processus passe de l'état Running à l'état Ready (interruption)
3 - un processus passe de l'état Waiting à l'état Ready
4 - un processus se trouve dans l'état Terminated (exécution terminée)

Les circonstances 2 et 3 provoquent la réquisition du processeur : la préemption.


Les circonstances 1 et 4 n'entraînent aucune réquisition du processeur (sans préemption).
La gestion de ces situations se réalise à travers la planification du CPU (ordonnancement des
processus).
Le distributeur (dispatcher) est le module qui donne le contrôle du CPU au processus sélectionné par
l'ordonnanceur. Ce module assume les fonctions suivantes :
- la sauvegarde du contexte du processus en cours
- la restauration du contexte du processus élu
- le changement du mode d'exécution
- l'embranchement dans le nouveau processus (lancement)
Une des caractéristiques du distributeur est la rapidité.

10.1.2. Les critères de l'ordonnancement


Différents algorithmes d'ordonnancement possèdent diverses propriétés et certains algorithmes peuvent
favoriser une classe de processus au détriment d'une autre classe. Plusieurs critères ont été suggérés pour
comparer ces algorithmes :
- efficacité : l'utilisation du CPU à 100 % du temps de travail
- équitabilité : assurance que chaque processus reçoive sa part du temps du processeur
- le temps de réponse (début de réponse) : minimiser la durée qui sépare le lancement du début de
réponse
- le temps de retournement (chargement, attente dans la file PRÊT, exécution CPU, déroulement E/S)
Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 43
- le temps d'attente (dans la file PRÊT)
- le rendement : maximiser le nombre de travaux effectués par le processeur en une unité de temps.

10.1.3. Les algorithmes d'ordonnancement


La planification du CPU vise à résoudre le problème de décision d'allouer le CPU à quel processus
parmi ceux qui sont dans la file d'attente prêts. Plusieurs algorithmes d'ordonnancement des processus ont fait
objet d'étude.
a – FCFS (First-Come, Fist-Served)
b – SJF (Shortest-Job-First)
c – Priority (Priorité)
d - RR (Round Robin) : le tourniquet (circulaire) avec un quantum
e – Multilevel Queue : file d’attente à multiples niveaux

10.2 - LA SYNCHRONISATION DES PROCESSUS


Un des rôles majeurs d'un système d'exploitation est de veiller au bon enchaînement (ordonnancement)
des processus et de gérer les accès concurrents aux différentes ressources. En pratique, les processus présents
en mémoire ne peuvent être totalement indépendants. Un processus est dit indépendant s'il ne peut affecter
ou ne peut être affecté par l'exécution d'autres processus ou mieux lorsqu'il ne partage aucune donnée avec
aucun autre. Un processus est dit coopérant lorsqu'il peut affecter ou être affecté par l'exécution d'autres
processus ou mieux lorsqu'il partage des données avec d’autres. Ainsi les processus coopérants peuvent
directement partager une adresse logique (programme ou données) ou être autorisés à partager des données
seulement au travers de fichiers. C'est le cas des processus fils et threads.

Plusieurs raisons motivent la création d'un environnement qui permette la coopération des processus :
- le partage des données
- l'accélération des traitements (threads)
- la modularité des programmes
- la commodité de la multiprogrammation (POO)

Des mécanismes ont été développés pour assurer la synchronisation des processus coopérants afin de
garantir une exécution distincte et la consistance des données.

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 44
10.2.1. Les problèmes classiques de synchronisation
Différents problèmes de synchronisation ont été recensés et classés en échantillon pour servir à tester
toute nouvelle proposition de solution.
10.2.1.1 - Le problème du producteur et du consommateur
Un processus "producteur" produit des articles qui sont consommés par un processus "consommateur".
Par exemple un programme d'impression et le contrôleur d'imprimante. Ces processus partagent un buffer
commun. Ce tampon, limité en capacité, peut-être rempli par le producteur (le programme d’impression) et
peut être vidé par le consommateur (le contrôleur d’imprimante). Le producteur et le consommateur doivent
être synchronisés de manière que le consommateur ne tente de consommer un article non encore produit. Ainsi
le consommateur doit attendre si le tampon est vide et le producteur doit attendre si le tampon est plein.

10.2.1.2 - Le Problème des lecteurs et écrivains


Un objet (fichier ou enregistrement) est à partager parmi plusieurs processus coopérants. Certains
processus peuvent seulement lire l'objet tandis que d'autres peuvent mettre à jour (lire et écrire) l'objet. Ces
processus se classent en deux groupes de "lecteurs" pour ceux pouvant seulement lire l'objet, et de "écrivains"
pour ceux qui peuvent mettre à jour l'objet. Trivialement, si deux lecteurs accèdent simultanément à l'objet
partagé, il n'en résultera aucun effet adverse. Mais si un écrivain et un quelconque autre processus (lecteur ou
écrivain) accèdent simultanément à l'objet partagé, le chaos peut s'en suivre.
Les problèmes de ce genre sont désignés comme "le problème des lecteurs et écrivains". La solution
consiste à donner un accès exclusif aux écrivains.

10.2.1.3 - Le problème des philosophes dînant

On considère cinq philosophes qui passent leurs vies à penser et à manger. Les philosophes partagent
une commune table ronde entourée de cinq chaises, chacune appartement à un philosophe. Au milieu de la
table, il y a une cuvette de riz et la table est configurée avec cinq assiettes et cinq fourchettes (cf. figure). Un
serveur surveille et remplit au besoin la cuvette. Quand un philosophe est en train de penser, il ne dialogue pas
avec ses collègues. De temps en temps, un philosophe a faim, et tente de s'emparer des fourchettes qui sont
Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021
Théories des systèmes d'exploitation /Page 45
entre lui et ses voisins de gauche et de droite, l'une après l'autre et l'ordre n'importe pas. Un philosophe ne
doit ramasser qu'une fourchette à la fois. Trivialement, il ne peut pas ramasser la fourchette qui est déjà dans
la main d'un voisin. Lorsqu'un philosophe affamé dispose de deux fourchettes en même temps, il mange sans
déposer les fourchettes. Lorsqu’il est rassasié, il dépose les deux fourchettes et recommence par penser.
Question : pouvez-vous écrire un algorithme qui permette à chaque philosophe de se livrer à ses
activités sans jamais être bloqué ?
Ce problème désigné par "le problème des philosophes dînant" est considéré comme un problème
classique de synchronisation, non à cause de son importance pratique, mais à cause de ce qu'il est un échantillon
représentatif pour les problèmes de simultanéité de contrôle.

10.2.1.4 - Le problème de la région critique


On considère un système composé de n processus (P0, P1,..., Pn-1). Chaque processus a un segment
de code, appelé région critique, dans lequel le processus peut changer des variables communes, mettre à jour
des tableaux, écrire un fichier, ainsi de suite.
La particularité importante du système est que, quand un processus est en train d'exécuter sa région
critique, aucun autre processus ne peut être autorisé à exécuter cette région critique. Ainsi l'exécution de la
région critique est mutuellement exclusive dans le temps. Le problème de la région critique sert à désigner un
protocole que les processus peuvent utiliser pour coopérer. Chaque processus doit demander la permission
avant d'entrer dans sa région critique. La partie du code implémentant cette demande est appelée zone d'entrée.
La région critique doit être suivie d'une zone de sortie.
Une solution au problème de la région critique doit satisfaire les trois exigences suivantes :
- l'exclusion mutuelle
- la progression
- l'attente limitée

10.2.2. Les approches de solution


Moniteur
Sémaphore
Messages
*** Fin de la compilation ***

Vos observations et suggestions sur le support et sur les interventions seront les bienvenues à
fakakpo@univ-lome.tg ou fakakpo01@gmail.com

***

Notes de cours compilées par Monsieur AKAKPO (fakakpo@univ-lome.tg) Version Décembre 2021

Vous aimerez peut-être aussi