Vous êtes sur la page 1sur 131

Systèmes d’exploitation

Responsable: Pr. Hamid AKSASSE

haksasse@gmail.com

ENSA Agadir

AU: 2020-2021

1
Objectifs du cours :

Ce cours vise à vous familiariser avec les concepts et les techniques fondamentales des
systèmes d'exploitation.

Entre autres les éléments suivants:

 Comprendre le fonctionnement d’un ordinateur en liaison avec le système


d’exploitation
 Expliquer et analyser le fonctionnement des différents modules liés à la gestion de
processus
 La compréhension du fonctionnement de la mémoire ainsi que sa gestion
 La gestion des fichiers

2
Plan du cours
Rappel: un peu d’architecture
Chapitre1: Introduction
1. Qu’est ce que le système d’exploitation?
2. Problématique
3. Fonctionnalité d’un SE
4. Place du SE dans l’ordinateur
5. Principes des SE
6. Historique des SE
7. Type des SE
8. Structure internes des SE généraux
Chapitre 2: Gestion des processus
1. Modèle
2. Mise en œuvre
3. Communication interprocessus
4. Ordonnancement des processus
Chapitre 3: Gestion de la mémoire
1. Gestion de la mémoire sans swapping
2. Gestion de la mémoire avec swapping
3. La mémoire virtuelle
Chapitre 4: Gestion des fichiers
1. Méthodes d’accès au fichiers
2. Méthodes de gestion de l’espace libre et d’allocation de l’espace disque aux fichiers
3. Notion de répertoire

3
Rappel : un peu d’architecture

Structure et Fonctionnement des Ordinateurs

MODELE DE VON NEUMANN

Unité d'entrée Unité de traitement Unité de sortie

Unité de stockage

ESAT/DMSI/Cours Architecture

4
Structure et Fonctionnement des Ordinateurs

EXEMPLE D'UN PC
Périphériques de sortie Supports de stockage
Disque
Ecran Imprimante Disquette
dur

Unité
Microprocesseur Mémoire centrale

Clavier Souris

Périphériques d'entrée
ESAT/DMSI/Cours Architecture

Architecture des systèmes


L’ordinateur fournit 3 fonctions : calculer, mémoriser, communiquer.

5
Communication interne:BUS

Structure
Structure et
et Fonctionnement
Fonctionnement des
des Ordinateurs
Ordinateurs

STRUCTURE SOMMAIRE D'UN ORDINATEUR


O
P P P R
é é é G
r r r A
i i i N
p
h
p
h
p
h
U E
S

é
r
é
r
é
r A D
E
MEMOIRE
i i i
q q q L C
O
CENTRALE
u u u
M
e e e
M
A
1 2 3 N
D
E

Périphériques BUS Unité Centrale


ESAT/DMSI/Cours Architecture

 Ressource de calcul = processeur et processus


 Ressource de mémorisation = fichiers
 Ressource de communication = messages ou mémoire partagée.

6
Système d’Exploitation
Logiciel d'Application
Logiciel d'Application

Système
Système d'exploitation
d'exploitation

BIOS(Rom)
BIOS(Rom)

Matériel

Cet ensemble de programmes constitue une interface utilisateur : système d’exploitation

7
8
Pourquoi un système d’exploitation?

 L’ordinateur est considéré comme un système complexe et difficile à comprendre

 Pour les programmeurs, il serait bien difficile de créer des programmes tout en prenant en
compte de la gestion du matériel

 Afin de gérer tous les composants de l’ordinateur, il fallait une interface ou une couche
intermédiaire.

9
Définitions : Bases

 Ordinateur: Machine électronique à calculer dotée de mémoire pour traiter l’information reçue,
ayant la capacité à résoudre des problèmes

 Programme: Un ensemble d’instructions séquentiels qui a pour objectif de puisse résoudre un


problème donné

 Instruction: Une information élémentaire contenant une commande et la description de l’action


entreprise.

 Processus: L’aspect dynamique d’un programme en cours d’exécution

10
Chapitre 1: Introduction

1. Qu’est ce que le système d’exploitation


Un système peut être définit comme un ensemble de programmes qui contrôle et dirige l’utilisation d’un
ordinateur à travers différentes applications.
 En autres, c’est un système qui exploite les ressources matérielles d’un ordinateur et assure la
liaison entre les utilisateurs et les applications.
 C’est le premier programme exécuté lors du démarrage de l’ordinateur.
 Le système d’exploitation peut être noté SE ou OS (Operating System: traduction en anglais)

De manière pratique, le système d’exploitation est le logiciel le plus important de la machine. En fait, les
logiciels peuvent être classés en deux catégories :

 les programmes d'application des utilisateurs


 les programmes système qui permettent le fonctionnement de l'ordinateur. Parmi ceux-ci, le
système d'exploitation (SE dans la suite).

Le SE soustrait le matériel au regard du programmeur et offre une présentation agréable des fichiers.

Un SE a ainsi deux objectifs principaux :


 présentation : Il propose à l'utilisateur une abstraction plus simple et plus agréable que le
matériel : une machine virtuelle
 gestion : il ordonne et contrôle l'allocation des processeurs, des mémoires, des icônes et
fenêtres, des périphériques, des réseaux entre les programmes qui les utilisent. Il assiste les
programmes utilisateurs. Il protège les utilisateurs dans le cas d'usage partagé: gestionnaire de
ressources.

11
Pourquoi étudier donc les systèmes d’exploitations?

 Tout programme est concerné: Il est important d’appréhender la façon dont fonctionne un SE pour
améliorer l’efficacité de ces programmes.

 Tout programmeur est susceptible de rencontrer les mêmes problèmes de mise en œuvre dans
son propre domaine.

 C’est un sujet intéressant en soi, dont l’objectif est la recherche de l’efficacité , nécessitant une
étude théorique approfondie dont l’objectif est la fourniture des solutions réalisable en pratiques.

12
2. Problématique
Pour que les programmes puissent s’exécuter de façon portable et efficace, il faut pouvoir gérer
simultanément:
 La multiplicité des différentes ressources;
 La complexité des composants de chacune d’elles, qui requiert la prise en compte de nombreux
détailles pour éviter les éventuelles erreurs (bogues).

On peut appréhender ces problèmes à travers l’exemple de partage de l’imprimante:


Une machine multi - utilisateur fournit un service d’impression, qui peut être utilisé par n’importe quel
programme s’exécutant sur la machine. Pour cela, il faut:
 Pouvoir verrouiller l’accès à l’impression, afin que les flux de caractères produits par les
programmes désirant imprimer ne s’entrelacent pas sur le papier;
 Gérer des tampons d’impression, afin que les programmes puissent reprendre leur travail sans
devoir attendre la fin effective de l’impression.
 Gérer la file d’attente.

Le problème est de gérer l’accès à une ressource coûteuse (à la fois en argent et en temps). Il faut à
tout instant:
 Connaître l’utilisateur d’une ressource donnée;
 Gérer l’accès concurrentiel à cette ressource;
 Pouvoir accorder l’usage (exclusif) à cette ressource;
 Éviter les conflits d’accès entre les programmes ou entre les utilisateurs. 13
3. Fonctionnalité d’un SE
Un SE a pour but:
 De décharger le programmeur d’une tâche de programmation énorme et fastidieuse, et de lui
permettre de concentrer sur l’écriture de sa propre application;
 De protéger le système et ses utilisateurs de fausses manipulations;
 D’offrir une vue simple, uniforme et cohérente de la machine et de ses sources.

Ce qui donne deux points vues, descendante et ascendante suivante:

Machine virtuelle
Vue descendante

SE

Vue Ascendante

Gestionnaire de ressources

la machine virtuelle fournit à l’utilisateur les services suivantes:


 Une vue uniforme des E/S;
 Une mémoire virtuelle et partageable;
 La gestion des fichiers et répertoires;
 La gestion des droits d’accès, sécurité et de traitement des erreurs;
 La gestion des processus 14
 La gestion de la communication inter-processus.
En tant que gestionnaire de ressources, le SE doit permettre:
 d’assurer le bon fonctionnement des ressources et le respect des délais;
 l’identification de l’utilisateur d’une ressource;
 le contrôle des accès aux ressources;
 l’interruption d’une utilisation de ressources;
 la gestion des erreurs;
 l’évitement des conflits.

4. Place d’un SE dans un ordinateur

Application }Applications
Éditeur Compilateur Interprète de commandes

Système d’exploitation } Système

}
Langage machine

Microprogrammation
Matériel
Dispositifs physiques

L’interprète de commande, le compilateur et ses bibliothèques, l’éditeur ainsi que d’autres utilitaires ou
commandes comme chmod, copie,.. ne font pas partie des systèmes d’exploitations. En fait, tous ces
programmes s’exécutent dans le mode non privilégié., car ils n’ont pas besoin d’un accès au matériel.
En revanche, le SE fonctionne typiquement en mode privilégié (mode noyau) pour pouvoir accéder à
toutes les fonctionnalités du système. Ainsi, le SE est protégé contre les erreurs de manipulations.
15
5. Principes d’un SE
5.1 les appels systèmes
Ils constituent l’interface entre le SE et les programmes d’applications qui s’exécutent en mode non
privilégié (mode utilisateur).
la séparation stricte du noyau du système d'exploitation et des programmes d'application ou des
processus utilisateur.

Au niveau du processeur, le mode noyau se différencie habituellement du mode utilisateur par les
fonctionnalités suivantes:
 Le code et les données utilisés par le SE ne sont pas accessibles qu’en mode noyau (sécurité).
Ceci se fait en n’incluant les segments mémoires correspondants que lors de passage en mode
noyau;
 Les instructions de modifications de la table des segments mémoire ne sont permises qu’en
mode noyau. Ainsi un programme utilisateur ne pourra modifier ces droits d’accès à la mémoire;
 Les instructions de lecture et d’écriture sur les ports d’E/S du matériel ne sont permises qu’en
mode noyau. Un programme Utilisateur ne peut donc accéder au matériel sans passer par le SE.

Quelques appels systèmes classiques:


 open, read, write et close qui permettent les manipulations sur les systèmes de fichiers,
 alloc, free pour allouer et libérer de la mémoire
NB
On peut dire de manière simplifiée qu'un appel système est nécessaire chaque fois qu'un processus
s'exécutant en mode utilisateur veut exécuter une fonction qui n'est exécutable qu'en mode noyau.
16
5.2 les processus

Ce sont des programmes en cours d'exécution par un ordinateur; On distingue des processus
utilisateurs et des processus système.
Ces derniers :
 ne sont sous le contrôle d'aucun terminal
 ont comme propriétaire le super utilisateur (processus démons). Ils restent résidents en MC en
attente d'une requête
 ils assurent des services généraux accessibles à tous les utilisateurs
 ils peuvent être créés au lancement du système ou à des dates fixées par l'administrateur.

Exemples de processus système :


cron lance à des dates spécifiées des commandes particulières
lpsched assure l'ordonnancement des requêtes d'impression

17
Un processus peut s'exécuter dans deux modes différents :
 mode utilisateur (user mode):
Le processus n'accède qu'à son espace d'adressage et n'exécute que des instructions ordinaires
du programme chargé

 mode noyau ou système (kernel mode):


Le processus exécute des instructions n'appartenant pas au programme, mais au noyau. Il accède
à des données externes à son espace d'adressage (tables systèmes). On peut passer en mode
noyau soit par une interruption appropriée, soit par la réalisation d'un appel système par le
processus lui-même (exemple : requête de lecture au clavier dans le programme)

Remarque:
La différence entre mode noyau et mode utilisateur est géré directement au niveau du processeur.
Elle n’a rien à voir avec la notion du super utilisateur ou administrateur mis en œuvre sur certains
SE qui est géré au niveau logiciel dans le code du SE. En fait, même le super utilisateur d’un
système passe le clair de son temps en mode non privilégie.

18
Dans le cas d’un système multiprogrammé, les différents processus doivent se partager l’accès
aux ressources: UCT (CPU), mémoire et périphériques. Par exemple, un processus ayant besoin
d’une ressource qui est occupée devra être bloqué en attendant que cette ressource se libère.

Dans le cas d’un système à temps


. partagé, l’exécution des processus doit être en apparence
.
..
concurrente: une fraction de temps de l’UCT (quantum) doit être accordée à chacun des
processus.

un processus exécute une séquence d’instruction dans un espace adresse comprenant


l’ensemble des locations en mémoire auxquelles le processus est autorisé à accéder.

Cet espace adresse est a priori virtuel (il ne correspond pas nécessairement à la mémoire
physique). Il correspond au texte (code) et aux données utilisés par le processus.

A chaque processus correspond aussi un ensemble de registres et compteurs, comme le


compteur programme qui pointe sur la prochaine instruction à exécuter.

19
Traitement séquentiel ou emboîté des exceptions

Code utilisateur
0
1
2
. Traitement de l’exception
. .
. .
i . .
i+1 .
.
.
N

Traitement du l’exception et retour au code de l’utilisateur

Que se passe-t-il lorsque une exception se produit alors qu’une autre exception est en en train
d’être traitée? On a deux possibilités:

 Le traitement séquentiel des interruptions. On traite dans l’ordre dans lequel elles se
produisent, et une exception est traitée complètement avant de passer à la suivante.

 Le traitement emboîté des interruptions. Cette façon de traitement suppose que l’on a défini
un ordre de priorité entre les exceptions. Dans ce cas, le problème se ramène à interrompre
un processus pour exécuter un autre processus plus prioritaire.

20
Code utilisateur

. Traitement exception1
.
.
.
.
.
.

. Traitement exception2
.
.
.
.

Traitement séquentiel des exceptions

Code utilisateur Traitement exception1

.
. . Traitement exception2
. .
. . .
.
.
.
.
.

Traitement emboîté des exceptions


21
L’accès à l’espace système ne peut se faire qu’en mode noyau: un processus accède à l’information
de l’espace système en effectuant un appel système. Le contrôle est alors transféré au noyau après
un changement de mode qui effectue l’accès pour le compte du processus. Le contrôle est alors
retourné au processus , après un autre changement de mode.
Mais comment se passe-t-il un changement de contexte?

Processus P0 Système d’exploitation Processus P1


interruption ou trap inactif(prêt
élu ou bloqué)
Sauver l’état de P0 dans PCB0

charger l’état de P1 à partir de PCB1

Interruption ou appel système


inactif(prêt élu
ou bloqué)
Sauver l’état de P1 dans PCB1

charger l’état de P0 à partir de PCB0

élu inactif (prêt ou bloqué)

22
Processus P0 Système d’exploitation Processus P1
interruption ou trap inactif(prêt
élu ou bloqué)
Sauver l’état de P0 dans PCB0

charger l’état de P1 à partir de PCB1

Interruption ou appel système


inactif(prêt élu
ou bloqué)
Sauver l’état de P1 dans PCB1

charger l’état de P0 à partir de PCB0

élu inactif (prêt ou bloqué)

En résumé, typiquement un processus est une instance d’un programme en train d’exécution. Il est
représenté au niveau de SE par son code, ces données, sa pile d’exécution, les valeurs courantes
des registres du processeur, ainsi que d’autres données relatives à l’état courant du système: état du
processus, liste des fichiers ouverts,…
Un processus est crée par d’autres processus (sauf le premier). Il est susceptible d’être suspendu,
redémarrer et recevoir des événements traitables de façon asynchrone.
Dans les systèmes récents, on a deux niveaux d’exécution :
Les processus classiques « lourds» possédant chacun leurs données
Les tâches légères, qui peuvent exister au sein de chaque processus lourd qui ont leur pile propre
mais partagent toutes leurs données.
23
5.3 Systèmes de fichiers

Un système de fichiers (File System) est un système de classement, d’organisation sur un support de
stockage qui structure et organise l’écriture, la recherche, la lecture, le stockage, la modification et la
suppression de fichiers d’une manière spécifique.

Le système de fichier fournit un modèle commode d’organisations informations persistances avec


une gestion indépendante du support matériel. Le plus souvent, l’organisation des fichiers se fait de
façon arborescente.

Afin d’uniformiser l’ensemble des ressources d’E/S en un modèle cohérent, la plus part des
systèmes de fichiers possèdent la notion de fichier spécial: terminaux, souris, disque, mémoire,… De
même, c’est le système de fichier qui supporte la communication inter- processus.

24
6. Historique des SE
Structure et Fonctionnement des Ordinateurs

HISTORIQUE
er
1945 1 Ordinateur
ere Traitement
1 génération par lots
1960 tubes électroniques

eme

1970
2 génération
Temps
Réseau transistors
partagé
1980 eme
3 génération
Graphisme mini-ordinateurs
1990
Convivialité
Processeurs et
2004 micro-ordinateurs
Transparence

ESAT/DMSI/Cours Architecture

État actuel:
Cluster, le parallélisme,
les ordinateurs quantique (transistors quantiques en laboratoire)
25
Historique des machines et des systèmes d'exploitation

• Les machines à tubes (1945 - 1955)


pas de SE (entrée manuelle)

• Les machines à transistor (1955-1965)

Un moniteur pour enchaîner les travaux


cartes de contrôle
$job
$fortran
programme
$load
$run
données
$end

• Les machines à circuits intégrés (1965 -1980)

Multiprogrammation
SPOOL (Simultaneous Peripheral Operation On line)
Temps partagé (Time sharing)

• Les ordinateurs personnels ( 1980 - 2000)


Circuits LSI & VLSI

26
6.1 Première génération (1936-1955)
C’est l’apparition des premiers ordinateurs à relais et à tubes à vide, programmés par tableaux de
connecteurs puis par cartes perforés au début des années 50.

6.2 Deuxième génération (1955-1965)


L’apparition des transistors a rendu les ordinateurs plus fiables. Ils pouvaient maintenant être
vendus et l’on vit apparaître pour la première fois la distinction entre constructeur, opérateurs,
programmeurs et utilisateurs.
Les programmes s’exécutent par lots. Un interprète de commande sommaire permettait le
chargement et l’exécution des programmes dans l’ordinateur. Ainsi avec le système FMS( Fortran
Minitor System), on soumettait les travaux de la manière suivante:

$job
$fortran
programme
$load
$run
données
$end

Les gros ordinateurs disposaient typiquement de trois dérouleurs de bandes:


Un pour conserver la bande de SE, un pour le programme à exécuter et le dernier pour recueillir des
données de sortie.

27
O O

IBM 1401 IBM 7094 IBM 1401

En amant et en aval se trouvaient deux calculateurs plus petits, chargés l’un de transcrire sur
bande les cartes perforées apportés par le programmeur et l’autre d’imprimer les résultats
contenus sur les bandes de sorties de données.
Ces ensembles étaient servis par des opérateurs, dont le rôle était d’alimenter les ordinateurs en
bandes, cartes et papier.
Comme la majeure partie du temps du calculateur principal était perdue lors des déplacement des
opérateurs, un système de traitement par lots (batch) fut mis en place: plusieurs travaux (job)
étaient collectés sur une même bande d’entrée qui était chargé une fois par heure par exemple et
apportée au calculateur principale . Celui-ci lit le premier travail (job) de la bande, et à la fin de
chaque travail, il lit automatiquement le suivant, jusqu’à la fin de la bande.

28
6.3 troisième génération (1965-1980)
L’avancée technologique majeure de cette génération est l’apparition des circuits intégrées, qui ont
permis de diminuer le rapport coût/performance de plusieurs ordres de grandeur.
La standardisation apportée les circuits intégrés s’est également appliquée aux machines, avec
l’apparition des familles qui partagent le même langage machine et le même SE pour des
puissances et des applications très différentes.

Le problème majeur de cette approche était de pouvoir disposer d’un SE efficace sur toutes les
machines de la gamme, permettant d’utiliser toute la puissance des gros calculateurs, mais aussi
capable de tenir dans la mémoire des plus petits

Afin de rentabiliser l’utilisation des machines, les travaux purent être stockés sur le disque de
l’ordinateur dès leur arrivés en salle machine, sans passer par des ordinateurs annexes et des
manipulations des bandes. Cette technique s’appel le spool (Simultanious Peripheral operation on
line).
De même s’est développé l’usage de la multiprogrammation : la mémoire physique est partitionnée
en segments de tailles fixées à l’avance, dont chacune pouvait accueillir un programme différent.
Ainsi lorsque un programme attendais la fin d’une requête E/S, le processeur pouvait basculer sur
une autre tâche. C’est à ce moment qu’apparurent les premiers mécanismes matériels de contrôle
des accès mémoire, pour protéger mutuellement les programmes contre les accès invalides. 29
La notion de temps partagé est aussi développé sur cette génération qui permettent à plusieurs
6.4 quatrième génération (1980-2000)

Le développement des circuits LSI (Large Scale Integration) puis VLSI (very large scale integration)
a permis l’avènement des ordinateurs personnels, qui ne différent que très peu, du point de vue
architecturale des mini-ordinateurs de la génération précédente.
Le développement des réseaux de communications et la baisse de leurs coûts d’accès a permis la
création de réseaux locaux de machines et conduit à l’explosion d’Internet. Ils sont pris en compte
par le SE en réseau, et complètement intégrés dans les SE distribués. Qui fournissent une image
unifiée de l’ensemble des machines
6.5 2000-maintenant
Aux taux actuel de croissance de l’intégration des composants, la barrière atomique devrait être
atteinte vers les années 2015 et la vitesse de la lumière constitue toujours une limite infranchissable.
Au niveau fondamental, les recherches s’orientent autour des composants à effets quantiques mais
seuls des transistors uniques fonctionnent à ce jour en laboratoire.

Les ordinateurs multiprocesseurs


Les clusters

30
7. Types des Systèmes d’exploitation
Il n’existe pas de SE efficace dans tous les contextes d’utilisations. On définit donc des familles
des systèmes en fonction des contraintes qui pèsent sur eux.

7.1 Système Mono- utilisateur

Comme son nom l’indique, ces systèmes d’exploitations n’acceptent qu’un seul utilisateur à un
moment donné. Ils sont construits autour d’une machine virtuelle simple et facilitant l’utilisation
des différents périphériques. Ils peuvent être multitâches.

7.2 Contrôle de processus (système dédié)

Ces systèmes sont utilisés principalement en milieu industriel pour le contrôle des machines
outils ou de dispositifs complexes critiques comme les usines chimiques et les centrales
nucléaires.
L’objectif du SE est de permettre de réagir en temps garanti et très bref à des événements issus
de capteurs pour maintenir la stabilité du processus industriel ou répondre à des alarmes. Ces
systèmes sont donc orientés temps réel et doivent être fiables. On sacrifie donc la généralité et la
convivialité du SE au profit de l’efficacité.

7.3 Serveur de fichiers


Ces systèmes contrôlent de gros ensembles d’informations, interrogeables à distance. On a donc
besoin d’un temps de réponse court, avec possibilité de mises à jour à la volée. L’utilisateur n’a
pas besoin de savoir comment la base de fichiers est organisée de façon interne. Le système
réalise donc le masquage de cette structure.

31
7.4 Systèmes transactionnel
Ces systèmes contrôlent de grandes bases de données modifiables de façon très fréquentes et
doivent garantir:
-un temps de réponse très court;
-la cohérence constance de la base de données;
La résolution de conflit.
Ceci passe par la définition de transactions atomiques et de point de reprise
Par exemple:

Transaction 1 Transaction 2
p= “poduit1 " ; p= “poduit2 " ;
q=q1; q=q2;
c= “Ali " ; c= “Badr " ;
stock(p)=stock(p)-q; stock(p)=stock(p)-q;
livraison(c,p)=livraison (c,p)+q; livraison(c,p)=livraison (c,p)+q;

p  produit, ( stock ( p)   livraison(c, p))  cte


 
c clients
Ainsi dans l’exemple ci-dessus, chacune des transaction doit conserver le nombre de produits
actuellement disponible. Si un processus de modification échoue après la décrémentation de la
variable stock, le système doit retrouver l’état initiale des tables(point de reprise=restauration).
De même si deux transactions s’exécutent en parallèle, le système doit garantir que la
modification concurrente maintiendront la cohérence de la base et donc sérialiser les deux
transaction si elles s’effectuent sur le même produit afin que la deuxième ne soit possible que
s’il reste assez de produits en stock après la première.

32
7.5 Systèmes généraux

Les systèmes généraux sont caractérisés par la capacité à accueillir simultanément de


nombreux utilisateurs effectuant chacun des tâches différentes. Ils sont donc multi-
utilisateurs et multi-tâches. Ils doivent disposer de systèmes de fichiers sophistiqués de
systèmes d’E/S variées et de nombreux logiciels couvrant un grand nombre
d’application

33
8. STRUCTURE D'UN SYSTEME D'EXPLOITATION
On peut distinguer quatre grandes catégories de SE.
8.1 Structure simple (les systèmes monolithiques)

Le SE est un ensemble de procédures, chacune pouvant appeler toute autre à tout instant. Pour
effectuer un appel système, on dépose dans un registre les paramètres de l'appel et on exécute
une instruction spéciale appelée appel superviseur ou appel noyau (trap). Son exécution
commute la machine du mode utilisateur au mode superviseur ou noyau et transfère le contrôle
au SE. Le SE analyse les paramètres déposés dans le registre mentionné plus haut et en déduit
la procédure à activer pour satisfaire la requête. A la fin de l'exécution de la procédure système,
le SE rend le contrôle au programme appelant.

Généralement, un tel SE est organisé en 3 couches :


- une procédure principale:
dans la couche supérieure, qui identifie la procédure
de service requise;

- des procédures de service :


dans la couche inférieure à la précédente qui exécutent
les appels système;

- des procédures utilitaires:


dans la couche basse qui assistent les procédures système.
Une procédure utilitaire peut être appelée par plusieurs
procédures systèmes.
34
8.2 Les systèmes en couches
On peut généraliser la conception précédente et concevoir un SE composé de plusieurs couches
spécialisées, chaque couche ne pouvant être appelée que par des procédures qui lui sont
immédiatement inférieures. Citons par exemple le premier SE de cette nature proposé par
Dijkstra en 1968 :
- couche 0 : allocation du processeur par commutation de temps entre les processus, soit à la
suite d'expiration de délais, soit à la suite d'interruption (multiprogrammation de base du
processeur);
- couche 1 : gestion de la mémoire, allocation d'espace mémoire pour les processus (pagination);
- couche 2 : communication entre les processus et les terminaux;
- couche 3 : gestion des E/S ( échanges d'information avec des mémoires tampons, c'est à dire
avec des périphériques abstraits, dégagés des spécificités matérielles);
- couche 4 : programmes utilisateurs

8.3 Les machines virtuelles


Une des premiers SE à gérer le concept de machine virtuelle a été l'adaptation temps partagé de
l'OS/360 d'IBM, proposé sous le nom de VM/370 en 1979.
Le cœur du SE, appelé moniteur de machine virtuelle ou VM/370, s'exécute à même le matériel et
fournit à la couche supérieure plusieurs machines virtuelles. Ces machines virtuelles sont des
copies conformes de la machine réelle avec ses interruptions, ses modes noyau/utilisateur, etc...
Chaque machine virtuelle peut exécuter son propre SE. Lorsqu'une machine virtuelle exécute en
mode interactif un appel système, l'appel est analysé par le moniteur temps partagé de cette
machine, CMS. Toute instruction d'E/S, toute instruction d'accès mémoire est convertie par
VM/370 qui les exécute dans sa simulation du matériel. La séparation complète de la
multiprogrammation et de la machine étendue rend les éléments du SE plus simples et plus
souples. VM/370 a gagné en simplicité en déplaçant une grande partie du code d'un SE dans le
moniteur CMS.
35
8.4 L'architecture client/serveur
Cette tendance s'est accentuée dans les SE contemporains en tentant de réduire le SE à un noyau
minimal. Une des formes les plus accentuées de cette évolution est l'architecture client/serveur.
Le modèle client serveur se prête extrêmement bien aux systèmes distribués: chaque machine du
système exécute un exemplaire du micronoyau qui redirige les requêtes vers les serveurs
concernés.
La plupart des fonctionnalités d'un SE sont reportées dans des processus utilisateurs. Pour
demander un service comme la lecture d'un bloc de fichier, le processus utilisateur ou processus
client envoie une requête à un processus serveur qui effectue le travail et envoie une réponse.
Le noyau ne gère que la communication entre les clients et les serveurs. Cependant, le noyau est
souvent obligé de gérer certains processus serveurs critiques comme les pilotes de périphériques
qui adressent directement le matériel.
La décomposition du SE en modules très spécialisés le rend facile à modifier. Les serveurs
s'exécutent comme des processus en mode utilisateur et non pas en mode noyau. Comme ils
n'accèdent donc pas directement au matériel, une erreur n'affecte que le serveur et pas l'ensemble
de la machine.
En outre, ce modèle est bien adapté aux systèmes distribués. Un client n'a pas besoin de savoir si
le SE fait exécuter sa requête par un serveur de sa propre machine ou celui d'une machine
distante. Processus Processus Serveur de Serveur de Serveurs Serveur de
…..
client client processus terminaux de fichiers mémoire

noyau

Processus Serveur de Serveurs


……
client terminaux de fichiers
noyau noyau noyau noyau

Réseau

36
Chapitre 2 : Gestion des processus
PROCESSUS
Concept clé dans un SE: Processus est programme en cours d’exécution. Il regroupe un
programme exécutable, sa zone de données, sa pile d’exécution, son compteur d’instruction, +
diverses informations.
Au niveau processeur : un seul processus à la fois.
Commutation entre processus = effet de parallélisme au niveau du processeur. Le compteur
d’instruction permet de garder en mémoire la prochaine instruction à exécuter. 2 processus
peuvent être associés au même programme.

ETAT D'UN PROCESSUS

ELU
1
2 3
4 BLOQUE
PRET
1 Le processus se bloque en attente de données

2 Le processus est suspendu (provisoirement) pour permettre l'exécution d'un autre processus

3 L'ordonnanceur choisit ce processus

4 Les données deviennent disponibles

37
L’état d’un processus est défini par l’activité courante de celui-ci. Les processus peuvent
interagir.
Etats possibles d’un processus :
• Nouveau : en cours de création
• En exécution : en cours d’exécution
• Prêt : attend d’être sélectionné
• En attente : attend qu’un évènement extérieur se produise
• Terminé : a terminé son exécution

TERMINE
5
NOUVEAU ELU
1
0 2 3
4 BLOQUE
PRET

38
PROCESS CONTROL BLOCK

Chaque processus est représenté dans le SE par un bloc appelé process control block. Le
PCB est un enregistrement contenant des informations associés à un processus. Parmi ces
informations :

L’état du processus (bloqué, prêt, élu)

Le compteur ordinal (indique l’adresse de la prochaine instruction à être exécutée par ce


processus

Les registres

L’allocation mémoire

La liste des fichiers ouverts

Les périphériques associés au processus

.
.

39
ORDONNANCEMENT DES PROCESSUS

Un bon algorithme d’ordonnancement doit :


• S’assurer que chaque processus reçoit sa part de temps processeur
• Utiliser le temps processeur à 100%
• Minimiser le temps de réponse des processus interactifs
• Maximiser le nombre de travaux à effectuer dans un intervalle de temps

Décision d’ordonnancement quand :


• Commute de l’état en exécution vers l’état en attente(requête E/S)
• Commute de l’état en exécution vers l’état prêt(quantum de temps utilisé)
• Commute de l’état en attente vers l’état prêt(terminaison d’une E/S)
• Un processus se termine

40
ORDONNANCEMENT DES PROCESSUS

• L'ordonnancement est à la base de la multiprogrammation

• La plupart des ressources de l'ordinateur font l'objet de l'ordonnancement


avant leur utilisation

exemple: plusieurs processus sont prêts à être exécutés. Lequel il faut choisir
et selon quel critère.

Plusieurs critères sont possibles:


• utilisation CPU : le processeur est une ressource chère, donc il faut
l’utiliser au maximum
• temps de réponse : en mode interactif, le temps de réponse mesure le
temps qui s’écoule entre l’émission d’une requête et le début de la réponse
par le système
• temps d'attente du processus : temps que passe un processus dans la
queue des processus prêts
• turn around time ( temps de retournement) : correspond au temps depuis
la soumission du travail jusqu’au résultat. C’est la somme des temps pour
avoir la mémoire + temps passé dans la queue des processus prêts + temps
des E/S + temps CPU.

41
QUELQUES ALGORITHMES D'ORDONNANCEMENT

-Premier Arrivé Premier Servi


C’est Un algorithme simple mais il n’est pas performant. Le premier processus qui a
besoin du CPU est servi. L’implantation de cet algorithme peut se faire à l’aide d’une queue
FIFO.

Quand un processus entre dans la queue des processus prêts, son CPB (control process
bloc) est rattaché à la fin, Quand le CPU est libéré, on prend le processus situé à la tête de
la file d’attente
Exemple : JOB Temps d’exécution
1 20
2 10
3 4

Si on exécute les travaux dans l’ordre 1,2,3 alors :


Le Job 1 s’exécute en 20 unités
Le Job 2 s’exécute en 20+10 = 30 unités
Le Job 3 s’exécute en 20+10+4 = 34 unités
Le temps moyen d’exécution est alors (20+30+34)/3 = 28 unités
Si on exécute les travaux dans l’ordre 2,3,1
Le temps moyen d’exécution est (10+14+34)/3 = 19 unités
Si on exécute les travaux dans l’ordre 3,2,1
Le temps moyen d’exécution est (4+14+34)/3 = 17 unités

42
- Le Plus Court Job d'abord
L’unité centrale est affectée au job le plus court. Cet algorithme est optimal au sens du temps
moyen d’attente (adapté pour les traitements en batch).
La difficulté réside dans le fait de connaître, a priori, la durée CPU d’un job. (job limite ou
estimations se basant sur le comportement antérieur des processus).

- Ordonnancement avec priorité


On associe une priorité à chaque job et la CPU est associée au job qui a la plus haute priorité.
Deux job ayant la même priorité sont traités selon FIFO.
Dans le cas du plus court job d’abord, la priorité est l’inverse du temps CPU (prédit). Plus le
temps CPU est grand, plus la priorité est basse.
D’autres facteurs peuvent être utilisés pour calculer la priorité tels que : la mémoire nécessaire,
le nombre de fichiers ouverts, …
Un des problèmes majeurs des algorithmes d’ordonnancement avec priorité est le blocage de
certains processus. Les processus qui ont une faible priorité risquent d’attendre longtemps
avant d’avoir la CPU.
Une solution à cette situation est la technique du vieillissement (« AGING ») qui consiste à
augmenter graduellement la priorité des jobs qui attendent dans le système pendant longtemps.

Ordonnancement Circulaire ( Tourniquet / Round – Robin)


C’est un algorithme qui est utilisé en particulier pour les travaux « temps partagé ». On définit
une unité de temps appelée quantum.
La liste des jobs prêts est traitée comme une liste circulaire. L’Ordonnanceur parcourt la queue
des jobs et alloue la CPU à chaque processus pour une durée qui peut atteindre le quantum.

43
NOTION D'INTERRUPTION
Signal envoyé à un processeur pour indiquer qu'un événement asynchrone ( qui
peut survenir à n'importe quel moment ) s'est produit

La séquence courante des instructions est temporairement suspendue et une


séquence appropriée à l'interruption commence à sa place.

plusieurs catégories d'interruption:

• dispositifs d ’ E/S

• appel au superviseur par un processus ( SVC : SuperVisor Call )

• déroutement ( violation de protection mémoire, instruction inconnue, division par


zéro, ... )

• interruption due à l'opérateur

• synchronisation à l'aide de l'horloge

44
INTERACTION ENTRE PROCESSUS

• Communication entre processus pour échanger des informations

• Accès concurrent à des ressources partageables

exemple d'accès concurrent : cas du SPOOL d’impression

SPOOL : signifie Simultaneous Peripheral Operation On Line.


Cette fonction inclut un mécanisme de gestion de file d'attente pour gérer l'ensemble des
requêtes, les fichiers à imprimer s'accumulant successivement sur le disque.
Quand un processus veut imprimer un fichier, il place son nom dans un répertoire spécial. Un
autre processus vérifie périodiquement s’il y a des fichiers à imprimer. Si oui, il les imprime et
retire leur nom du répertoire.

Local_in=IN;
P1 P2 P3
Placer_job(local_in);
IN=local_in+1;
4 5 6 7

IN (7) : variable qui pointe sur le premier emplacement libre


OUT (4) : variable qui pointe sur le fichier à imprimer
Soient A et B deux processus. A et B veulent imprimer un fichier (placer au même moment un
fichier dans la file d’impression). Ils doivent chacun exécuter la séquence suivante:

45
Local_in=IN;
Placer_job(local_in);
IN=local_in+1;

Le processus A lit IN et mémorise sa valeur 7 dans une variable locale.


Une interruption horloge arrive et le processeur est retiré à A puis donné à B
Le processus B lit IN et mémorise sa valeur 7 dans une variable locale.
B place le nom du fichier à imprimer à la place indiquée par IN et incrémente IN qui vaut alors
8
A reprend la main, là où il était interrompu et place le nom du fichier à imprimer à la place
indiquée par sa variable locale c’est-à-dire 7 et donc il détruit le fichier placé par B

La solution à ce problème est d’empêcher l’accès par d’autres processus à un objet partagé
si cet objet est entrain d’être utilisé par un processus.

C’est ce qu’on appelle EXCLUSION MUTUELLE

La partie du programme où il risque d’avoir conflit d’accès est appelée SECTION CRITIQUE

46
INTERACTION ENTRE PROCESSUS

QUELQUES METHODES POUR REALISER L'E.M.

1 masquage des interruptions

2 variables de verrouillage

3 l'alternance

4 l'algorithme de PETERSON

5 l'instruction TSL ( Test and Set Lock )

6 les primitives SLEEP & WAKEUP

47
EXCLUSION MUTUELLE

VARIABLES DE VEROUILLAGE

verrou variable unique partagée

verrou initialisé à 0

si verrou = 0 alors
mettre verrou à 1
section critique
remettre verrou à 0
sinon ( cas où verrou = 1 ) attendre que verrou passe à 0

Problème
Supposons que le processus A a lu le verrou et trouve 0 avant de mettre verrou à 1, le processus A est
interrompu
Le processus B qui a la main trouve verrou à 0 B met verrou à 1
entre dans la section critique
Puis B est interrompu
Le processus A prend la main
A trouve verrou à 0
A met verrou à 1
A rentre en section critique

Donc Nous avons deux processus en section critique!!!!

48
EXCLUSION MUTUELLE AVEC UN DRAPEAU
(verrou) pour chaque processus

Processus A Processus B

Faire toujours Faire toujours


(1) partie neutre (1’) partie neutre
(2) occup1:=true (2’) occup2:=true
(3) Tant que occup2 (3') tant que occup1
attendre attendre
section critique section critique
occup1:=false occup2:=false

Les deux processus A et B se bloquent mutuellement en (3) et (3') (deadlock)

49
L'ALTERNANCE

variable tour qui mémorise le tour du processus qui peut entrer en section critique
Soient deux processus A et B
La variable tour est initialisée à 0

Processus A Processus B
while tour <> 0 (attente) while tour <> 1 (attente)
section critique section critique
tour = 1 tour = 0
section non critique section non critique

supposons que le processus A quitte sa section critique ===> tour = 1

le processus B entre et quitte aussi sa section critique ===> tour = 0

le processus A peut alors entrer en section critique


il y entre puis il sort ===> tour = 1
le processus A est dans sa section non critique
le processus B est encore dans sa section non critique il y reste pendant un moment
Si le processus A veut entrer en section critique IL NE PEUT PAS car tour = 1
Donc le processus B n'est pas en section critique mais IL BLOQUE A à entrer dans sa section critique
!!!

50
L'ALGORITHME DE PETERSON

section non critique


entrer_region
section critique
quitter_region
section non critique

SOLUTION de PETERSON
#define FALSE 0
#define TRUE 1
#define N 2 /* nombre de processus */
int tour /* à qui le tour */
int interesse[N] /* tableau initialisé à FALSE */

entrer_region (process)
{
int autre; /* numéro de l'autre processus */
autre = 1-process;
interesse[process] = TRUE;
tour = process;
while ( tour == process && interesse[autre ]== TRUE) attendre
}

quitter_region (process)
{
interesse[process] = FALSE;
}

51
L'ALGORITHME DE PETERSON
Cas où les deux processus sont intéressés et appellent enter-region presque simultanément
Process 0 Process 1

1 autre = 1-process; 1’ autre = 1-process;


2 Interesse [process] = TRUE; 2’ Interesse [process] = TRUE;
3 tour = process; 3’ tour = process;
4 while (tour==process && 4’ while (tour==process &&
interesse[autre]==TRUE) attendre; interesse[autre]==TRUE) attendre

autre = 1 interesse[1] = true tour = 0 autre = 0 interesse[0] = true tour = 1

3’ a mis tour = 1 donc ici tour ≠ process alors on Ici tour = 1 et interesse [1] = true donc on attend
rentre en S.C.

quitter_region (process)
int process;
{
interesse[process]=FALSE;
}

Lorsque process 0 termine il fait quitter-region(0) et par conséquent, interesse [0] passe à false
alors process 1 peut alors entrer en S.C.

52
L'INSTRUCTION TSL (Test and Set Lock)

on fait appel au hardware

instruction TSL:

charge le contenu d'un mot mémoire dans un registre met une valeur non nulle à l'adresse du
mot mémoire

les opérations de lecture et d'écriture du mot sont INDIVISIBLES

drapeau est le mot mémoire et c’est la variable partagée

entrer_region:

tsl registre,drapeau <==> registre <= drapeau, drapeau <= 1


cmp registre, 0
bne enter_region
ret

quitter_region:
mov drapeau,0
ret

53
Remarques

L'algorithme de Peterson et l'instruction TSL ont l'inconvénient de l'attente active ( test répété sur une
variable pour détecter l'apparition d'une valeur).

Cette attente doit être évitée car elle consomme du temps CPU

Dans certains cas il y a risque de blocage. En effet: Soient A et B deux processus avec
priorité(A) < priorité(B)

A s'exécute et entre dans sa section critique

B passe à l'état prêt et il est élu (plus prioritaire) (remarque: A est toujours dans la section critique)

B veut entrer en section critique et il boucle sur attente active

A ne peut pas continuer car B mobilise le CPU

Donc blocage de A et B

Solution: utilisation des mécanicismes utilisant l’attente passive ( Exemple: Sleep and wakeup)

54
PRIMITIVES SLEEP & WAKEUP

Au lieu de faire une attente active, les processus vont se bloquer au cas où ils ne peuvent pas
entrer en section critique

SLEEP: appel système qui suspend le processus appelant jusqu’à ce qu'un autre processus vient
le réveiller

WAKEUP(process): appel système qui réveille le processus passé en paramètre

Cas du PRODUCTEUR et du CONSOMMATEUR

Soient deux processus P (producteur) et C (consommateur) qui partagent un buffer (mémoire


tampon)

P met des informations dans le buffer et C les retire

Si le buffer est plein, P doit dormir (sleep) car il ne peut plus mettre d’information. Il attend jusqu’à
ce que C retire une ou plusieurs informations et dans ce cas, C doit réveiller P pour produire
(wakeup(P)).

Si le buffer est vide alors C doit dormir(sleep) en attendant que P met des informations et réveille
C (wakeup(C)).

55
PRIMITIVES SLEEP & WAKEUP
Cas du PRODUCTEUR et du CONSOMMATEUR

#define N 100 /* taille du buffer */


int compteur = 0 /* nombre d'objets dans buffer */

producteur( )
{
while TRUE
{
produire_objet
if (compteur= =N) sleep( ) /* buffer plein */
mettre_objet
compteur=compteur+1
if (compteur= =1) /* compteur était à 0 */
wakeup(consommateur)
}
}

consommateur( )
{
while TRUE
{
if (compteur==0) sleep( )
retirer_objet
compteur=compteur-1
if (compteur= =N-1) /* avant compteur=N */
wakeup(producteur)
}
}
56
Quelques problème
consommateur()
{
while TRUE
{
if (compteur==0) sleep( )
retirer_objet
compteur=compteur-1
if (compteur==N-1) /* avant compteur=N */
wakeup(producteur)
}
}
Supposons à un instant donné que le buffer est vide et le consommateur trouve alors 0 dans
compteur.
A cet instant, l’ordonnanceur décide de suspendre le consommateur et de relancer le producteur
qui met alors un objet dans le buffer et fait passer compteur de 0 à 1.
D’après le programme du producteur, celui-ci va faire un wakeup du consommateur.
Ce signal wakeup sera perdu car le consommateur ne dormait pas encore.
Le producteur continuera à remplir buffer et va dormir lorsque compteur = N
Le consommateur, lorsqu’il sera relancé trouve compteur = 0, valeur qu’il avait avant d’être
suspendu. Il va donc dormir

On va alors se retrouver avec le producteur et le consommateur qui dorment en


même temps.

57
EXECUTION DES PROCESSUS
EN PARALLELE OU (pseudo //)

Pour que des objets qui s'exécutent en "parallèle" et qui utilisent des objets partagés puissent
coopérer correctement ( sans conflit d'accès, ni blocage mutuel, ni attente indéfinie ), il faut avoir les 4
conditions suivantes:

• 2 processus ne peuvent pas être en section critique en même temps

• aucun processus suspendu en dehors d'une section critique ne doit bloquer les autres processus à
entrer en section critique,

• aucun processus ne doit attendre trop longtemps à enter en section critique,

• aucune hypothèse n'est faite sur les vitesses des processus ni sur le nombre de processeurs

58
LES E/S

Les E/S demandées par les utilisateurs sont effectuées via le système d'exploitation

L'utilisateur demande une opération d ’ E/S en spécifiant un nom logique du support et


c'est le système d'exploitation qui:

- s'assure qu'un processus n'utilise que les ressources qui lui sont allouées,

- prend en charge les caractéristiques des dispositifs d'E/S (disques, disquettes, bande
magnétique, ...)

Un processus désirant faire une E/S fait appel à un module du SE en lui transmettant les
paramètres qui précisent la nature de l'E/S (lecture,écriture), la quantité d'informations à
transférer, ...
Le module appelé analyse la requête et signale les erreurs éventuelles (périphérique
inexistant, périphérique non alloué, ...)
Si la requête est correcte alors il :
- lance le transfert en exécutant des instructions appropriées (pilote),
- bloque le processus demandeur,
- appelle le scheduler pour sélectionner (élire) un autre processus dont l’état est prêt.

59
LES PERIPHERIQUES D'E/S

2 catégories de périphériques d ’E/S


- les périphériques blocs (disque, ..),
- les périphériques caractères (terminal, ...)

Un périphérique bloc mémorise les informations dans des blocs de taille fixe. Chaque
bloc a sa propre adresse. La taille d'un bloc peut être 512 ou 1024 octets par exemple
pour les disques. Une des caractéristiques de ces périphériques est qu'ils permettent
d'adresser un bloc indépendamment des autres (lire, écrire, rechercher)

Un périphérique caractère accepte un flot de caractères sans aucune structuration


(exemple : terminal, souris, )

LES CONTROLEURS DE PERIPHERIQUES

Les dispositifs d ’ E/S sont constitués de 2 parties:

une partie mécanique: moteurs, chariots, ...

une partie électronique: appelée contrôleur ou adaptateur. En général, un contrôleur est


une carte de l'ordinateur reliée au périphérique ( un contrôleur peut être utilisé pour
plusieurs périphériques de même type )

60
PILOTE (DRIVER)
Un ordinateur est constitué d'un assemblage de périphériques.
Pour pouvoir contrôler chacun de ses périphériques, le système d'exploitation a
besoin d'une interface logicielle entre lui et le matériel, on appelle drivers (pilotes
ou gestionnaires de périphériques en français) les programmes permettant au
système d'exploitation de gérer le matériel.

Le rôle des drivers est de jouer les intermédiaires entre le système et les cartes
d'extension ou bien les périphériques externes
Les drivers sont développés par les fabricants du matériel auquel ils
correspondent.

A la base, n'importe quel périphérique, y compris le matériel "de base" a besoin de


drivers pour fonctionner.

61
Pour charger le système d'exploitation vous avez besoin d'accéder au disque dur,
or comment faire pour accéder au disque dur si votre système d'exploitation n'est
pas encore chargé?

C'est le BIOS qui au démarrage de l'ordinateur agit tel un système d'exploitation en


permettant aux composants vitaux (carte vidéo, disque dur, lecteur de disquettes,
clavier) de démarrer grâce à des pilotes standards. En effet le BIOS permet
d'amorcer la carte graphique qui a elle-même des fonctions graphiques qui vont
permettre d'afficher les premières informations. Il en est de même pour le disque
dur, qui va amorcer le système grâce à des pilotes standard. Une fois le système
d'exploitation amorcé, celui-ci va pouvoir prendre lui-même le contrôle de certains
périphériques grâce aux pilotes fournis par le constructeur du/des matériels ou
grâce à des pilotes standards propriétaires (développés par le fabricant du système
d'exploitation).

62
EXEMPLE D’ÉCRITURE SUR DISQUE

Pour transférer des données sur un disque, le pilote de ce disque émet des commandes,
aux adresses adéquates, dans les registres du contrôleur.

Ces commandes sont :

La mise en route éventuellement,


Le positionnement de la tête sur le bon cylindre,
L’instruction d’écriture, avec les paramètres nécessaires, notamment le secteur où
écrire le bloc.

Le pilote transmet ensuite les données à écrire dans le tampon du contrôleur puis il se
bloque en attendant la fin de l’écriture effective.

63
CPU Mémoire Contrôleur
disque

BUS

Contrôleur Liaison Contrôleur


imprimante série terminal

DMA (Direct Memory Access)


C'est un type particulier d'interface qui est capable de transférer des données
directement de la mémoire à un périphérique ( ou dans l'autre sens ) sans que
ces données ne transitent par l'unité centrale

ENTRELACEMENT ( interleaving )

64
Chapitre 3: La gestion de la mémoire

Introduction
Il existe plusieurs technologies de mémoire:
- à semi-conducteur (RAM statique ou dynamique, ROM, PROM,
EPROM)
- magnétiques (à bandes, disques)
- optiques (disque optique, CD-ROM).

Chacune de ces technologies est caractérisée par sa rapidité (temps


d'accès), sa taille (capacité en octets) et son coût. La mémoire centrale
(MC), réalisée en RAM est d'une importance particulière car c'est elle
qui est la plus utilisée pendant l'exécution des programmes. Sa gestion
doit être faite avec un maximum de rigueur; mais sa bonne gestion
passe par celle des autres types de mémoire.

65
GESTION DE LA MÉMOIRE

La taille de la mémoire peut accélérer d'une manière significative le


temps d'exécution des programmes.

Dans le passé, le prix de la mémoire coûtait cher. La taille était petite


( 32k, 64 k octets, ... )

Avancée technologique, donc le prix de la mémoire a baissé et les


machines sont dotées de mémoire assez grande ( des méga octets,
puis des giga octets).

Mais les besoins ont aussi évolué et les applications utilisent les
interfaces graphiques , ce qui consomme beaucoup de mémoire.

66
La partie du S.E. qui s'occupe de la gestion de la mémoire
s'appelle :

LE GESTIONNAIRE DE LA MEMOIRE

2 manières de gérer la mémoire:

• sans swapping (sans utiliser le disque)

• avec swapping ( va et vient; pagination )

(déplacement des processus entre la mémoire et le disque)

67
Gestion de la mémoire sans swapping

CAS DE LA MONOPROGRAMMATION

BIOS

Processus
utilisateur

S.E.

Dans ce cas, nous avons en mémoire le SE et un processus utilisateur.


Sur les PC, les pilotes des périphériques sont dans une ROM appelée BIOS
(Basic Input Output System)
68
CAS DE LA MULTIPROGRAMMATION

La multiprogrammation améliore les performances d'un système


informatique et permet à plusieurs utilisateurs de travailler en
interactif.

Dans ce cas, il est nécessaire d'avoir plusieurs processus en


mémoire.

Supposons que nous disposons d'une mémoire de 1Moctets


(le SE occupe 200K et chaque processus occupe 200k)

On peut loger alors 4 processus en mémoire

69
70
Si on ajoute un autre Méga octets de mémoire supplémentaire, on
arrive à un taux d'utilisation du CPU de 96 % (soit une amélioration
de 10 %)

Remarque: Ce schéma est basé sur le fait que les processus


passent 80 % de leur temps à attendre la fin d'une E/S. Un taux
inférieur à 80 % améliore le pourcentage d'utilisation du CPU.

71
Nmbre utilisation
pourcentage
processus CPU
1 0,20 20,00
2 0,36 36,00
3 0,49 48,80
4 0,59 59,04
5 0,67 67,23
6 0,74 73,79
7 0,79 79,03
8 0,83 83,22
9 0,87 86,58
10 0,89 89,26
11 0,91 91,41
12 0,93 93,13
13 0,95 94,50
14 0,96 95,60

72
pourcentage

120,00

100,00

80,00

60,00 pourcentage

40,00

20,00

0,00
1 2 3 4 5 6 7 8 9 10 11 12 13 14

73
MULTIPROGRAMMATION AVEC PARTITIONS FIXES
( Cas des systèmes Batch)

Une manière simple d'organiser la mémoire en vue de la multiprogrammation


est de la diviser en N partitions (les tailles des partitions peuvent être
différentes). Le positionnement peut être fait au moment du démarrage du
système par l'opérateur.

Une première manière de gérer les partitions est d'avoir une file d'attente par
partition

1100
Part 4 (400k)

700
Part 3 (300k)

Part 2 (200k) 400

Part 1 (100k) 200


100
S.E. (100k)
0

74
Chaque nouveau processus est placé dans la file d'attente de la plus petite
partition qui peut le contenir.

Cette méthode peut aboutir à un gaspillage de la mémoire si les processus


nécessitent une taille assez petite par exemple.

Une autre manière de faire est de n'utiliser qu'une seule file d'attente.

Dès qu'une partition se libère (fin d'un processus) on y place le premier


processus de la file qui peut loger dans cette partition.

Ou bien on cherche le plus grand processus qui peut loger dans la partition.
Chaque façon de faire a ses avantages et ses inconvénients.

1100
Part 4 (400k)

700
Part 3 (300k)

Part 2 (200k) 400

Part 1 (100k) 200


100
S.E. (100k)
0 75
Gestion de la mémoire avec swapping
La méthode des partitions fixes est valable pour les systèmes batch.

Les systèmes à temps partagé (plusieurs utilisateurs travaillant en interactif)


doivent être organisés d'une autre manière car la mémoire ne peut pas contenir
tous les processus des utilisateurs.

ALORS, quelques processus sont placés sur disque puis ramenés en mémoire
avant leur exécution.

Ce mouvement mémoire-disque-mémoire est appelé SWAPPING.

UTILISATION DES PARTITIONS VARIABLES

Dans la méthode des partitions fixes, les processus logent dans des partitions
souvent plus grandes que la taille nécessaire aux processus, d'où une perte
d'espace mémoire.
Dans les systèmes interactifs, on souhaite placer le maximum de processus en
mémoire, alors on utilise des partitions de taille variable. Avec cette technique,
le nombre, les tailles et les positions des partitions changent dynamiquement
en fonction des processus. Cela améliore l'utilisation de la mémoire mais il
complique les algorithmes d'allocation et de restitution de la mémoire.

76
ALLOCATION DE LA MEMOIRE AUX PROCESSUS

Si un processus a une taille fixe alors on lui alloue la taille nécessaire. Mais
certains processus peuvent changer de taille en demandant l'allocation
dynamique dans le tas.

2 cas peuvent se présenter:

• il existe un espace libre adjacent au processus qui peut répondre à la


demande d'allocation, alors on alloue au processus cet espace
supplémentaire,

• le processus est entouré par 2 autres processus, alors soit en le déplace


dans une partition plus grande, soit on déplace un ou plusieurs processus
sur le disque pour pouvoir créer un espace suffisant.

77
FRAGMENTATION ET COMPACTAGE DE LA MEMOIRE

Dans les systèmes à partition fixe, il y a deux types de fragmentation:

• une fragmentation interne qui résulte de l'espace non utilisé dans une
partition de taille N alors que le processus qui y loge et de taille M
avec M<N,

• une fragmentation externe qui résulte du fait d'avoir des partitions


disponibles et non utilisées parce qu'elles ne peuvent contenir aucun
processus en attente.

Dans les systèmes à partitions variables on peut effectuer le


compactage de la mémoire en déplaçant tous les processus vers le
bas de la mémoire, on crée alors une partition libre de grande taille.
(Ce travail nécessite du temps processeur)
78
METHODES POUR LA GESTION DE LA MEMOIRE

Nous allons étudier quelques méthodes pour la gestion de l'occupation


mémoire:

• les tables de bits,


• les listes chaînées,
• les subdivisions.

GESTION DE LA MEMOIRE PAR TABLE DE BITS

La mémoire est divisée en unités d'allocation. A chaque unité on associe un


bit dans la tables des bits. Ce bit est à 0 si l'unité d'allocation est libre, à 1 si
elle est occupée.

79
Exemple : Mémoire de 32 K Octets avec une unité d'allocation de 1 K octets

A : 5 Ko
3 Ko inutilisés

B : 6 Ko 11111000
C : 4 Ko 11111111
2 Ko inutilisés
11001111
D : 6 Ko
11111000
E : 3 Ko
3 Ko inutilisés Table des Bits

80
Si l'unité d'allocation est petite alors la table des bits est grande.
Si l'unité d'allocation est grande, la tables des bits est petite mais on perd de
la place non utilisée de la dernière unité d'allocation de chaque processus
(la taille d'un processus n'est pas en général, un multiple de l'unité
d'allocation).

Pour allouer de l'espace mémoire pour un processus demandant K unités, il


faut parcourir la table des bits en cherchant K zéros consécutifs. Cette
recherche pénalise l'utilisation de la table des bits parce qu'elle consomme
du temps.

81
GESTION DE LA MEMOIRE PAR LISTE CHAINEE

Une autre méthode pour la gestion de la mémoire est l'utilisation des listes
chaînées. Pour l'exemple précédent, on aura:

P 0 5 L 5 3

P 8 6 P 14 4 L 18 2

P 20 6 P 26 3 L 29 3

82
Structure d'un élément de la liste:

- une valeur indiquant que le segment est un processus ou il est libre,


- l'adresse de départ du segment,
- la taille du segment,
- un pointeur sur le segment suivant.

Remarque: cette liste est triée selon les adresses des segments.

Remarque
La gestion de la mémoire est simplifiée si on utilise des listes doublement
chaînées. Dans l'exemple précédent, si le processus occupant la zone
mémoire qui commence à l'adresse 8 et de taille 6 se termine, avec le double
chaînage, on accède facilement au segment précédent qui est libre, et on les
fusionne.

83
P 0 5 L 5 9

Voici quelques algorithmes pour l'allocation de la mémoire utilisant les listes


chaînées:

Algorithme 1: Première zone libre (First Fit)


On parcourt la liste en cherchant le premier bloc libre qui peut contenir le
processus.
Si la taille de ce bloc est strictement égale au processus alors on lui affecte ce
bloc, Si la taille du bloc est supérieure au processus alors on divise le bloc en
deux parties. La première partie va être utilisée par le processus et la
deuxième partie est un segment libre.

On peut améliorer légèrement cet algorithme en mémorisant l'adresse du


premier segment libre trouvé, ainsi la prochaine recherche commence à cette
adresse et non au début de la liste. cet algorithme est appelé zone libre
suivante (next fit).
84
Algorithme 2: meilleur ajustement (Best Fit)

On cherche le plus petit segment de la liste qui peut contenir le processus.


(cela évite de fractionner les grands segments).

cet algorithme est plus lent que le premier car il faut parcourir toute la liste.
IL conduit aussi à une fragmentation de la mémoire car on aura plusieurs
petits segments libres qui ne peuvent être utilisés.

Algorithme 3: Plus grand résidu (Worst Fit)

Dans ce cas on cherche le plus grand segment libre. Ainsi, la deuxième partie
non utilisée sera grande et peut contenir d'autres processus.
(la simulation a montré que les résultats ne sont pas bons)

85
GESTION DE LA MEMOIRE PAR SUBDIVISIONS

L'utilisation des listes chaînées pour la gestion de la mémoire améliore


l'allocation mais reste lente quand à la libération car il faut examiner les
voisins du segment libéré pour voir si on peut former un segment plus
grand.

Une autre méthode utilisée est appelée gestion par subdivision (Buddy
system). Elle est basée sur le fait que les ordinateurs utilisent des adresses
binaires.

Les tailles des zones mémoires sont des puissances de 2


Pour une mémoire de 1 Moctets on aura 21 listes:

Au début on a une liste libre de 1 Méga Octets. Les autres listes sont vides.

Supposons que nous avons un processus de 70 KO à placer en mémoire. Les


tailles sont des puissance de 2 donc le plus petit segment qui peut contenir le
processus est de 128 KO

86
L1M

L512 K L512 O
L256 K L256 O
L128 K L128 O
L64 K L64 O
L32 K L32 O
L16 K L16 O
L8 K L8 O
L4 K L4 O
L2 K L2 O
L1 K L1 O

87
LA MEMOIRE VIRTUELLE
Dans ce que nous avons vu jusqu'à maintenant, le programme d'un
utilisateur pouvait loger en entier en mémoire centrale.

Que se passe-t-il si le programme est plus grand que la taille mémoire


disponible ?

Une solution consiste à diviser le programme en segments de recouvrement


(overlays)

A B D E
F
C
Les segments de recouvrement sont stockés sur disque et il y a un swapping
entre le disque et la M.C. effectué par le système d'exploitation.

Mais c'est le programmeur qui doit définir les différents segments de


recouvrement et comment ils sont disposés ( leur indépendance )

C'est une tâche qui n'est pas évidente lorsqu'on a des programmes assez
volumineux.

Une autre méthode est basée sur la notion de MEMOIRE VIRTUELLE


88
Une mémoire virtuelle est l'ensemble des emplacements désignés par les
adresses engendrées par le CPU

Objet Mémoire Mémoire


virtuelle physique
allocation
désignation de mémoire
Transformation des adresses
Les adresses manipulées par les programmes sont des adresses virtuelles;
Les adresse virtuelles ne sont pas placées directement sur le bus, elles sont
traduits par l’unité de gestion de la mémoire (Memory Management Unit: MMU)
en adresses physique.

Nous allons voir une technique permettant d'implanter la mémoire virtuelle


dans une mémoire physique de taille limitée: la PAGINATION
89
LA PAGINATION

Les programmes manipulent des adresses virtuelles.

Pour les ordinateurs qui disposent d'une MMU (Memory Management


Unit), cette unité se charge de traduire les adresses virtuelles en adresses
physiques.

L'espace d'adressage virtuel est divisé en unités appelées pages. La


mémoire physique est divisée en unités de même taille appelées frames.

Le transfert entre la mémoire physique et le disque se fait par pages


entières ( 512 o, 1k, ...,4K)

90
0 0-4 2
1 4-8 1
2 8-12 6
3 12-16 0 0 0-4
4 16-20 4 1 4-8
5 20-24 X 2 8-12
6 24-28 3 3 12-16
7 28-32 X 4 16-20
8 32-36 5 5 20-24
9 36-40 X 6 24-28
10 40-44 7 7 28-32
11 44-48 X
12 48-52 X
13 52-56 X
14 56-60 X
15 60-64 X

91
LES ALGORITHMES DE REMPLACEMENT DE PAGES

Lorsqu'il y a défaut de page (page virtuelle non mappée en mémoire


physique), le MMU génère un déroutement

Le S.E. prend la main et doit retirer une frame et la remplacer par la page
manquante.

Si la frame a été modifiée, le S.E. doit l'écrire sur disque avant de la


remplacer pour sauvegarder les modifications.

Mémoire de « Swap »

Où stocker les pages délogées de la mémoire?

Sur un ou plusieurs disques locaux:

Partition de swap: +rapide, -de place pour les SF


fichier de swap: -rapide, +de place pour les autres fichiers
en général, le SE utilise les 2 simultanément
swap en parallèle si plusieurs disques.

92
A la suite d’un défaut de page, le SE doit retirer une page de la mémoire
pour libérer de la place pour la page manquante.

Problème: quelle page choisir, afin de minimiser le nombre de défauts de


pages?
Plusieurs Algorithmes:
algorithme FIFO (premier entré, premier sorti)
algorithme optimal
algorithme de la moins récemment utilisée (LRU)

Plusieurs algorithmes sont possibles

ALGORITHME 1 : FIFO
Principe:
Le SE mémorise une liste de toutes les pages en MC,
la première page de la liste est la plus ancienne, et la dernière
page est la plus récente
lors d’un défaut de page, la page en tête de la liste est retirée pour
être remplacée,
Avantage:
facile à implanter, il associe à chaque page le moment où elle a été
amenée en mémoire. Lorsqu'il y a défaut de page on sort la plus
ancienne.
Inconvénient:
remplacement d’une page très référencée
trop de défauts de page.
93
exemple:

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 0 1 2 2 3 0 4 2 3 0 0 0 1 2 2 2 7 0 1
7 0 1 1 2 3 0 4 2 3 3 3 0 1 1 1 2 7 0
7 0 0 1 2 3 0 4 2 2 2 3 0 0 0 1 2 7
d d d d d d d d d d d d d d d

Dans ce cas nous avons 15 défauts de pages

94
Anomalie de Belady

avec 3 frames

0 1 2 3 0 1 4 0 1 2 3 4
0 1 2 3 0 1 4 4 4 2 3 3
0 1 2 3 0 1 1 1 4 2 2
0 1 2 3 0 0 0 1 4 4
d d d d d d d d d

avec 3 frames nous avons 9 défauts de page

95
Anomalie de Belady

avec 4 frames

0 1 2 3 0 1 4 0 1 2 3 4
0 1 2 3 3 3 4 0 1 2 3 4
0 1 2 2 2 3 4 0 1 2 3
0 1 1 1 2 3 4 0 1 2
0 0 0 1 2 3 4 0 1
d d d d d d d d d d

avec 4 frames nous avons 10 défauts de page.

Ce résultat est inattendu. On pense qu'avec un nombre de frames plus grand


on aura moins de défauts de page
96
ALGORITHME 2: remplacement optimal
Principe: retirer la page qui sera référenciée le plus tard possible.
On cherche un algorithme optimal de remplacement de page. Cet algorithme
doit donner le taux minimum de remplacement de page. En principe, cet
algorithme doit remplacer la page qui ne va pas être utilisée durant la période
la plus longue.

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

7 0 1 1 1 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1
7 0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0
7 2 2 2 2 2 2 2 2 2 2 2 2 2 2 7 7 7
d d d d d d d d d

l'algorithme optimal produit 9 défauts de page. Si on soustrait les 3 défauts


de page initiales qui sont obligatoires, nous avons 12 défauts de page pour
FIFO et 6 pour l'algorithme optimal.
Malheureusement, l'algorithme optimal est difficile à implanter car il
nécessite une connaissance à priori des prochaines références.

97
ALGORITHME 3 : LRU : Least Recently Used
page la moins récemment utilisée

LRU remplace la page qui n'a pas été utilisée pour la période la plus longue.
(IL est comme optimal mais en regardant dans le passé)

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

7 0 1 1 1 3 3 3 2 2 2 2 2 2 2 2 2 7 7 7
7 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0
7 2 2 2 2 4 4 4 0 0 0 1 1 1 1 1 1 1
d d d d d d d d d d d d

Le LRU donne 12 défauts de page, valeur intermédiaire entre l'algorithme


optimal et le FIFO. Il est considéré comme un bon algorithme mais il faut
trouver un moyen pour l'implémenter.

IL faut trouver un ordre pour les frames défini par le temps de la dernière
utilisation. On peut par exemple utiliser une liste chaînée de toutes les pages
en mémoire, la page la plus récemment utilisée est en tête de liste, la moins
récemment utilisée est en queue. Donc, lorsqu'une page est référencée, il
faut l'amener en tête de liste. Ce qui est coûteux et ne peut être réalisé en
logiciel pour chaque référence de la mémoire.
98
Une solution est d'avoir un matériel spécialisé pour réaliser LRU. Par
exemple un compteur qui est automatiquement incrémenté à chaque
instruction.
Chaque entrée de la table des pages a un champ pour contenir ce
compteur. Quand une page est référencée, la valeur du compteur est
mémorisée dans le champ de la table des pages associé. Lorsqu'il y a
défaut de page, on remplace la page dont le compteur est le plus petit.
Pour les systèmes ne disposant pas de moyens matériels pour le LRU,
on peut utiliser une approximation du LRU à l'aide d'un bit de référence.
Pour chaque page donnée, le bit de référence est positionné chaque fois
que la page est référencée.

Au départ, tous les bits sont à 0. Au bout d'un certain temps, on connaît
les pages référencées et les pages non référencées. (Les bits de référence
sont mis à 0 à chaque top d'horloge par exemple).

En combinant le bit de référence avec FIFO on obtient un algorithme


appelé : algorithme de la deuxième chance. Quand une page est
sélectionnée, on regarde son bit de référence, s'il est à 0 on procède au
changement, sinon on lui donne une seconde chance en mettant ce bit à 0
et on passe à la prochaine page selon FIFO.

99
Taille optimale des pages

Soit t la taille moyenne des processus et p (en octets) la taille d'une page.
Soit e (en octets) la taille de l'entrée de chaque page dans la table des
processus.
Le nombre moyen de pages par processus est t/p. Ces pages occupent
t*e/p octets dans la table des processus.

La mémoire perdue en moyenne dans la dernière page d'un processus est


p/2 (fragmentation interne).
La perte totale q est donc :
q = t*e/p + p/2
q est minimal si : dq/dp = 0, c'est à dire : p  2te

Exemple :
t = 64 Ko, e = 8 octets, donc p = 1 Ko
Les valeurs courantes sont 1/2 Ko, 1 Ko, 2 Ko ou 4 Ko

100
Chapitre 4: LES SYSTÈMES DE GESTION DE FICHIERS

Dans ce chapitre nous allons voir les points suivants:

1. Systèmes de fichiers

2. Structure de systèmes de fichiers

3. Structure de mémoire de masse (disques)

Qu’est qu’un fichier? Un fichier est une collection nommée


d’informations apparentées, enregistrée sur un stockage secondaire qui
sont de nature permanente.

•Les données qui se trouvent sur un stockage secondaires doivent être


dans un fichier.
•Différents types:
Données (binaire, numérique, caractères….)
Programmes

SE B. AKSASSE 101
Attributs d’un fichier:
Les attributs constituent les propriétés du fichier et sont stockés dans un
fichier spécial appelé répertoire (directory). Exemples d’attributs:
 Nom:
 pour permettre aux personnes d’accéder au fichier
 Identificateur:
 Un nombre permettant au SE d’identifier le fichier
 Type:
 Ex: binaire, ou texte; lorsque le SE supporte cela
 Position:
 Indique le disque et l’adresse du fichier sur disque
 Taille:
 En octets ou en blocs
 Protection:
 Détermine qui peut écrire, lire, exécuter…
 Date:
 pour la dernière modification, ou dernière utilisation
 Autres…

SE B. AKSASSE 102
1. Systèmes de fichiers

La partie d'un système d'exploitation qui est consacrée à :

• l'organisation logique d'un fichier,


• la représentation de l'information
• la réalisation des fonctions d'accès,
• la protection,
• la sécurité.
est appelée Système de Gestion de Fichiers (SGF)

INTERFACE UTILISATEUR D'UN SGF

Un utilisateur n'est pas concerné par l'emplacement physique d'un fichier


ou par la méthode de gestion des blocs libres d'un disque. Plutôt, il
s'intéresse à la manière de créer et de détruire un fichier, comment
accéder aux fichiers pour les consulter ou les modifier, comment
protéger ses fichiers contre les accès non autorisés, ...

L'utilisateur donne un nom logique à chacun de ses fichiers et c'est le


SGF qui se charge de faire la correspondance entre le nom d'un fichier et
son implantation sur un support physique.

Le SGF donne à l'utilisateur plusieurs primitives (appels système) pour


créer, écrire, lire, se positionner au début ou effacer un fichier.
SE B. AKSASSE 103
1.1. LES MÉTHODES D'ACCÈS AUX FICHIERS

Plusieurs méthodes d'accès à un fichier peuvent être supportées par un SGF :

• accès séquentiel (basé sur le modèle bande magnétique)

• accès direct (basé sur le modèle disque)

• accès séquentiel indexé (ISAM : Indexed Sequential Access Method)

Nous pouvons construire d'autres méthodes d'accès à partir de l'accès direct.


Ces méthodes demandent la construction d'un index pour le fichier. L'index
contient des pointeurs vers les différents blocs du fichier. Pour trouver une
entrée dans le fichier, on cherche d'abord dans l'index et on utilise le pointeur
pour accéder directement le fichier.

1.2. MÉTHODES DE GESTION DE L'ESPACE LIBRE ET D'ALLOCATION DE


L'ESPACE DISQUE AUX FICHIERS

L'implantation des fichiers est une tâche réalisée par le système d'exploitation.
Sur les bandes magnétiques, cette implantation est simple et consiste à mettre
plusieurs fichiers sur une bande et utiliser l'accès séquentiel. L'utilisation du
disque dur permet une implantation souple. Le but est que l'espace disque soit
utilisé aux mieux et que l'on peut accéder rapidement aux fichiers.

SE B. AKSASSE 104
2. Structures de systèmes de fichiers
Le système de fichiers réside dans la mémoire secondaire: disques, rubans...
File control block: structure de données contenant de l’info sur un fichier, cette
structure réside en RAM.

Structure physique des fichiers


La mémoire secondaire est subdivisée en blocs et chaque opération d’E/S
s’effectue en unités de blocs

Les blocs ruban sont de longueur variable, mais les blocs disque sont de
longueur fixe
Sur disque, un bloc est constitué d’un multiple de secteurs contiguës (ex: 1, 2,
ou 4)
la taille d’un secteur est habituellement 512 octets.

Les fichiers sont alloués en unité de blocs. Le dernier bloc est donc rarement
rempli de données donc fragmentation interne!

SE B. AKSASSE 105
2.1.GESTION DE L'ESPACE LIBRE
Gestion par BITMAP
Dans un système informatique, les fichiers sont crées ou effacés assez
fréquemment. L'espace libéré lorsqu'on efface un fichier est réutilisé pour de
nouveaux fichiers. Le système maintient alors une trace de tous les blocs libres
du disque. La création d'un nouveau fichier nécessite la recherche dans les
blocs libres d'un espace suffisant pour contenir ce fichier. l'espace libre d'un
disque peut être géré par une table de bits. Chaque bloc est représenté par un
bit qui est à 0 si le bloc est libre, à 1 s'il est occupé.
Gestion par liste chainée
Une autre manière de faire est de chaîner les blocs libres et en ayant un
pointeur vers le premier bloc libre. Cette manière n'est pas très efficace car pour
parcourir la liste, il faut lire chaque bloc (donc beaucoup de temps CPU).
Une alternative est de mémoriser les adresses de n blocs libres dans le premier
bloc libre. Ainsi les adresses d'un grand nombre de blocs libres peuvent être
trouvées rapidement.
adresse 1er
bloc libre

bloc bloc
libre libre
SE B. AKSASSE 106
2.2 ALLOCATION DE L'ESPACE DISQUE AUX FICHIERS
Trois méthodes sont largement utilisées pour l'allocation de l'espace disque:
• l'allocation contiguë,
• l'allocation chaînée,
• l'allocation indexée.

2.2.1.L'allocation contiguë
La méthode d'allocation contiguë nécessite que chaque fichier occupe un
ensemble de blocs dont les adresses se suivent. D'une manière générale,
lorsqu'on a lu un bloc, la lecture du bloc suivant ne nécessite pas de
déplacement de la tête de lecture (ou bien une piste au maximum lorsqu'on est
sur le dernier secteur d'une piste.)

Dans ce type d'allocation, un fichier est défini par son adresse de départ et sa
longueur. cette information est mémorisée dans l'entrée du répertoire du
fichier.
L'accès à un fichier qui a un espace contigu est relativement facile. Pour l'accès
séquentiel, le système mémorise l'adresse du dernier bloc lu et pour une
prochaine lecture, il lit le bloc suivant. Pour l'accès direct à un bloc K d'un
fichier qui commence au bloc B, on peut accéder facilement au bloc B+K.

Le problème de ce type d'allocation est de trouver de l'espace libre pour un


nouveau fichier. Cela dépend de la gestion de l'espace libre. IL est similaire à
celui de la gestion de la mémoire et on peut appliquer les algorithmes connus:
First fit, Best fit, Worst fit,
SE B. AKSASSE 107
Un autre problème concernant l'allocation contiguë est de déterminer l'espace
nécessaire pour un fichier. L'estimation de l'espace nécessaire lors de la
création d'un fichier est difficile. Si on alloue une petite taille, on risque d'avoir
des problèmes lorsqu'on veut faire une extension du fichier. Le système peut
alors copier ce fichier dans un espace plus grand mais cela ralentit le
traitement. Si on alloue une grande taille, il y a perte de la place même si cette
taille va être atteinte au cours de l'évolution du fichier.

SE B. AKSASSE 108
Avantages-désavantages
Chaque fichier occupe un ensemble de blocs contiguë sur disque

C’est une méthode simple: nous n’avons besoin que d’adresses de début et de
sa longueur
Supporte tant l’accès séquentiel, que l’accès direct

•Il induit la fragmentation comme dans le cas d’allocation de la mémoire


contiguë
•Les fichiers ne peuvent pas grandir et il est Impossible d’ajouter au milieu
•Il est nécessaire d’exécuter périodiquement la compaction) pour récupérer
l’espace libre

SE B. AKSASSE 109
2.2.2 L'allocation chaînée
Dans ce cas, chaque fichier est une liste chaînée de blocs de disque. Les blocs
d'un fichier peuvent être dispersés sur tout le disque.

Un fichier est repéré par son nom et un pointeur sur le premier bloc du fichier.
(On peut utiliser aussi un pointeur sur le dernier bloc pour faciliter l'extension ).
La création, l'écriture et la lecture d'un fichier séquentiel est facile à réaliser.
Pour ajouter un nouveau bloc, il suffit de prendre un bloc de la liste des blocs
libres et le chaîner au fichier.

Mais l'accès direct n'est pas efficace car il faut plusieurs accès disques pour lire
le ième bloc.
Un autre problème est la fiabilité. Que se passe-t-il si un pointeur est
endommagé. Pour résoudre ce problème on peut utiliser des listes doublement
chaînées ou bien mémoriser dans chaque bloc le nom du fichier et son numéro
relatif.
Avantages:
• Pas de fragmentation externe - allocation de mémoire simple, pas besoin de
compression
bloc = pointeur
désavantages:
•Les pointeurs gaspillent un peu d’espace

SE B. AKSASSE 110
SE B. AKSASSE 111
2.2.3 L'allocation Indexée
L'allocation indexée résout le problème de l'accès direct en mettant tous les
pointeurs dans un bloc appelé: BLOC INDEX. Chaque fichier a son bloc index
qui contient des adresses de blocs. La ième entrée du bloc index pointe vers le
ième bloc du fichier.

L'entrée du répertoire du fichier contient l'adresse du bloc index.

L'allocation indexée supporte l'accès direct et n'a pas les problèmes de


fragmentation externe MAIS on est obligé d'avoir un bloc index même si le
fichier n'a qu'un ou deux blocs. D'où perte de place.

BLOC INDEX

SE B. AKSASSE 112
SE B. AKSASSE 113
2.3 LES REPERTOIRES

Pour pouvoir trouver facilement un fichier sur disque, il faut organiser les
fichiers de manière à faciliter cette recherche. Plusieurs manières sont
possibles.
Un des systèmes simples est celui du CP/M de Digital Research. Dans ce
système, il y a un seul répertoire pour tous les fichiers. Une entrée dans ce
répertoire a la structure:
16 entrées
1 8 3 1 2 1

• Identité du propriétaire du fichier (code utilisateur)

• nom du fichier

• extension (cas des grands fichiers qui nécessitent plus d'une entrée dans le
répertoire

• nombre d'entrées utilisées,

• les numéros des blocs du fichier.

SE B. AKSASSE 114
Regardons à présent le système MS-DOS qui possède une arborescence de
répertoires. MS-DOS gère les fichiers d'une manière chaînée. le répertoire
racine a une taille fixe
Une entrée dans un répertoire MS-DOS a la structure suivante:

8 3 1 10 2 2 2 4

• nom du fichier

• type du fichier

• attributs du fichier

• réservé

• heure

• date

• numéro du premier bloc

• taille du fichier

SE B. AKSASSE 115
UNIX possède aussi une arborescence de répertoires.
Une entrée dans un répertoire UNIX est de la forme:

N° Nom du fichier
2 14

• Numéro du nœud d'information (indice dans une table générale associée au


volume) = i-node
• nom du fichier

La structure d’un nœud d'information(i-node) est la suivante:

- mode (ordinaire, répertoire, spécial,...)


- nombre de liens,
- Uid du propriétaire,
- Gid du propriétaire,
- taille du fichier,
- date de création,
- date du dernier accès,
- date de la dernière modification
- 10 numéros de blocs (suffisant pour les petits fichiers)
- pointeur à simple indirection,
- pointeur à double indirection,
- pointeur à triple indirection.
SE B. AKSASSE 116
SE B. AKSASSE 117
SE B. AKSASSE 118
Dans UNIX, le noeud d'information du répertoire racine est situé à un endroit
fixe du disque.
Chaque répertoire possède les entrées • et • • qui correspondent au répertoire
courant et au répertoire père.
Exemple: recherche d'un fichier /usr/ast/mbox

SE B. AKSASSE 119
MS-DOS procède autrement pour la gestion des fichiers.

IL associe à chaque disque une table appelée FAT (File Allocation Table). Cette
table a une entrée pour chaque bloc du disque.

Nous avons vu que pour chaque fichier, l'entrée du répertoire contient le numéro
du premier bloc du fichier. Ce numéro sert d'entrée dans la FAT pour trouver le
numéro du bloc suivant et ainsi de suite.
répertoire FAT
A 6 0
B 9 1
2 eof
3 eof

6 10

9 2
10 3

fichier A 6 10 3

fichier B 9 2

SE B. AKSASSE 120
3. Structures de mémoire de masse (disques)

Concepts importants :

 Fonctionnement et structure des unités disque

 Calcul du temps d’exécution d’une séquence d’opérations

 Différents algorithmes d’ordonnancement

SE B. AKSASSE 121
3.1 Disques magnétiques
Plats rigides couverts de matériaux d’enregistrement magnétique surface du
disque divisée en pistes (tracks) qui sont divisées en secteurs, le contrôleur
disque détermine l`interaction logique entre l’unité et l’ordinateur.
Le cylindre est l’ensemble de pistes qui se trouvent dans la même position du
bras de lecture/écriture

SE B. AKSASSE 122
Disques électroniques
Aujourd’hui nous trouvons de plus en plus des types de mémoires qui sont
adressées comme si elle étaient des disques, mais sont complètement
électroniques
Par exemple flash memory
Il n’y aura pas les temps de positionnement, latence, etc.

3.2 Ordonnancement disques


Problème: utilisation optimale du matériel
Objectif: réduction du temps total de lecture disque. Étant donné une file de
requêtes de lecture disque, dans quel ordre les exécuter?

Paramètres à prendre en considération


Temps de positionnement (seek time): le temps pris par l`unité disque pour se
positionner sur le cylindre désiré,
Temps de latence de rotation (latency time): le temps pris par l ’unité de disque
qui est sur le bon cylindre pour se positionner sur le secteur désirée,
Temps de lecture: temps nécessaire pour lire la piste
Le temps de positionnement est normalement le plus important, donc il est
celui que nous chercherons à minimiser

SE B. AKSASSE 123
•File d’attente disque
Dans un système multiprogrammé avec mémoire virtuelle, il y aura
normalement une file d’attente pour l’unité disque

Dans quel ordre choisir les requêtes d’opérations disques de façon à minimiser
les temps de recherche totaux

Nous étudierons différents méthodes par rapport à une file d’attente arbitraire:
98, 183, 37, 122, 14, 124, 65, 67

Chaque chiffre est un numéro séquentiel de cylindre

Il faut aussi prendre en considération le cylindre de départ: 53

Dans quel ordre exécuter les requêtes de lecture de façon à minimiser les
temps totaux de positionnement cylindre

Hypothèse simpliste: un déplacement d`1 cylindre coûte 1 unité de temps

SE B. AKSASSE 124
3.2.1 Algorithme Premier entré, premier sorti: FIFO

Mouvement total: 640 cylindres = (98-53) + (183-98)+(183-37) +(122-37) +(122-14)


+(124-14) +(124-65) +(67-65)
SE B. AKSASSE 125
3.2.2 SSTF: Shortest Seek Time First

Plus Court Temps de Recherche (positionnement) d’abord (PCTR)

À chaque moment, choisir la requête avec le temps de recherche le plus court à


partir du cylindre courant

Clairement meilleur que FIFO

Mais pas nécessairement optimal!

Cet algorithme peut causer la famine pour certaines requête

SE B. AKSASSE 126
Mouvement total: 236 cylindres (680 pour le précédent)
= (65-53) + (67-65)+(67-37) +(37-14) +(98-14)
+(122-98) +(124-122) +(183-124)

SE B. AKSASSE 127
3.2.3 LOOK : l’algorithme de l’ascenseur
Look : La tête balaye le disque dans une direction jusqu’il n’y aie plus de
requête dans cette direction, puis dans la direction opposée de même, etc., en
desservant les requêtes quand il passe sur le cylindre désiré
Pas de famine

Il faut spécifier la direction de mouvement


vers l’intérieur direction

vers l’extérieur direction

SE B. AKSASSE 128
direction 

retour: 169 (??)

Mouvement total:153 =(65-53)+(67-65)+(98-67)+(122-98)+(124-122)+


(183-124)+(37-14)

SE B. AKSASSE 129
Résultat très semblable
Mouvement total:157 =(53-37)+(37-14)+(183-124)+(124-122 )+(122-98)+
(98-67)+(67-65)

SE B. AKSASSE 130
Comparaison
Si la file souvent ne contient que très peu d’éléments, l’algorithme du ‘premier
servi ’ devrait être préféré (simplicité)
Sinon, SSTF ou LOOK

En pratique, il faut prendre en considération:


•Les temps réels de déplacement et retour au début
•La longueur moyenne de la file
•Le débit d ’arrivée des requêtes

SE B. AKSASSE 131

Vous aimerez peut-être aussi