Académique Documents
Professionnel Documents
Culture Documents
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.
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
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
5
Communication interne:BUS
Structure
Structure et
et Fonctionnement
Fonctionnement des
des Ordinateurs
Ordinateurs
é
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
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
7
8
Pourquoi un système d’exploitation?
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
10
Chapitre 1: Introduction
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 :
Le SE soustrait le matériel au regard du programmeur et offre une présentation agréable des fichiers.
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).
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.
Machine virtuelle
Vue descendante
SE
Vue Ascendante
Gestionnaire de ressources
Application }Applications
Éditeur Compilateur Interprète de commandes
}
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.
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.
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é
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.
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.
19
Traitement séquentiel ou emboîté des exceptions
Code utilisateur
0
1
2
. Traitement de l’exception
. .
. .
i . .
i+1 .
.
.
N
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 exception2
. .
. . .
.
.
.
.
.
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
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.
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
Multiprogrammation
SPOOL (Simultaneous Peripheral Operation On line)
Temps partagé (Time sharing)
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.
$job
$fortran
programme
$load
$run
données
$end
27
O O
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.
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.
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.
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é.
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;
32
7.5 Systèmes généraux
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.
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.
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
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 :
Les registres
L’allocation mémoire
.
.
39
ORDONNANCEMENT DES PROCESSUS
40
ORDONNANCEMENT DES PROCESSUS
exemple: plusieurs processus sont prêts à être exécutés. Lequel il faut choisir
et selon quel critère.
41
QUELQUES ALGORITHMES D'ORDONNANCEMENT
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
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).
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
• dispositifs d ’ E/S
44
INTERACTION ENTRE PROCESSUS
Local_in=IN;
P1 P2 P3
Placer_job(local_in);
IN=local_in+1;
4 5 6 7
45
Local_in=IN;
Placer_job(local_in);
IN=local_in+1;
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.
La partie du programme où il risque d’avoir conflit d’accès est appelée SECTION CRITIQUE
46
INTERACTION ENTRE PROCESSUS
2 variables de verrouillage
3 l'alternance
4 l'algorithme de PETERSON
47
EXCLUSION MUTUELLE
VARIABLES DE VEROUILLAGE
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
48
EXCLUSION MUTUELLE AVEC UN DRAPEAU
(verrou) pour chaque processus
Processus A Processus B
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
50
L'ALGORITHME DE PETERSON
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
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)
instruction TSL:
charge le contenu d'un mot mémoire dans un registre met une valeur non nulle à l'adresse du
mot mémoire
entrer_region:
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)
B passe à l'état prêt et il est élu (plus prioritaire) (remarque: A est toujours dans la section critique)
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
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
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
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:
• aucun processus suspendu en dehors d'une section critique ne doit bloquer les autres processus à
entrer 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
- 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
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)
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.
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é?
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.
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
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).
65
GESTION DE LA MÉMOIRE
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
67
Gestion de la mémoire sans swapping
CAS DE LA MONOPROGRAMMATION
BIOS
Processus
utilisateur
S.E.
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 %)
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 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)
74
Chaque nouveau processus est placé dans la file d'attente de la plus petite
partition qui peut le contenir.
Une autre manière de faire est de n'utiliser qu'une seule file d'attente.
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)
ALORS, quelques processus sont placés sur disque puis ramenés en mémoire
avant leur exécution.
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.
77
FRAGMENTATION ET COMPACTAGE DE LA MEMOIRE
• 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,
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).
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:
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
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.
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
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.
Au début on a une liste libre de 1 Méga Octets. Les autres listes sont vides.
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.
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.
C'est une tâche qui n'est pas évidente lorsqu'on a des programmes assez
volumineux.
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
Le S.E. prend la main et doit retirer une frame et la remplacer par la page
manquante.
Mémoire de « Swap »
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.
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
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
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
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
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
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).
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.
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
1. Systèmes de fichiers
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
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.
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.
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
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.
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
• nom du fichier
• extension (cas des grands fichiers qui nécessitent plus d'une entrée dans le
répertoire
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
• 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
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 :
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.
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
Dans quel ordre exécuter les requêtes de lecture de façon à minimiser les
temps totaux de positionnement cylindre
SE B. AKSASSE 124
3.2.1 Algorithme Premier entré, premier sorti: FIFO
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
SE B. AKSASSE 128
direction
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
SE B. AKSASSE 131