Document

publicité
Systèmes d’exploitation
Chapitre 1 : Généralités
A : INTRO
- Un OS c’est :
 un ensemble de programmes qui se charge de tous les problèmes liés à l’exploitation de
la machine.
 Objectifs : - faciliter la tâche des utilisateurs, optimiser l’utilisation des composants de
la machine.
Point de vue externe :
 Il s’agit de :
- masquer à l’utilisateur les problèmes de gestion interne des ressources
- présenter une machine virtuelle plus simple à exploiter que la machine réelle
- offrir des services
But du noyau : isoler les applicatifs du matériel.
Point de vue interne :
 Il s’agit de :
- gérer au mieux les unités fonctionnelles (CPU, mémoire etc.) qui compensent la
machine
- offrir un ensemble d’opérations de bas niveau que les programmes applicatifs peuvent
invoquer
Unités fonctionnelles :
 Processeur :
 Mémoire centrale :
 E/S :
Traiter
Mémoriser
Communiquer
Une instruction a plusieurs phases : Fetch, Decode, Execute, Store. Paradigme séquentiel ( on fait
les choses les unes après les autres ).
Maxime Augerd
Page 1
SE 2004
Maxime Augerd
Page 2
SE 2004
Architecture de machine :
 L’architecture d’une machine c’est l’organisation de ses unités fonctionnelles
 On ne retient dans un premier temps qu’une architecture d’interconnexion classique dans laquelle
un processeur, une mémoire centrale et les dispositifs d’E/S sont reliés par un bus.
 L’OS doit donc optimiser l’utilisation des ressources et gérer les problèmes liés au
partage de ces ressources.
Vision d’un O.S. :
 Dépend du niveau d’observation
 Pour l’utilisateur il s’agit d’un ensemble de fonctionnalités offertes soit grâce à un
langage de commandes, soit à travers une interface graphique
 Pour le développeur l’OS n’est qu’un ensemble d’appels systèmes qui fournit des
services de bas niveau ( ex : API WIN 32 )
 Pour l’administrateur l’OS est un ensemble complexe de ressources à gérer et à
configurer ( espace disque, comptes utilisateurs, droits et protections, etc. )
B : Définitions :
Processus : suite d’instructions chargée totalement ou partiellement en mémoire centrale, et
constituant un ensemble logique en cours d’exécution ou susceptible de s’exécuter.
Notion dynamique : un processus naît lors du chargement d’un programme et meurt à l afin de
l’exécution du programme. Un processus est caractérisé par un état à un instant donné.
Programme : entité composée de séquences d’instructions agissant sur un ensemble de données.
C’est du code obtenu par compilation d’un fichier source suivie d’une phase d’édition des liens.
Notion essentiellement statique car c’est un fichier stocké sur disque.
Des processus distincts peuvent exécuter un même programme (programme réentrant).
Thread : un processus peut être parfois décomposé en unités d’activités distincts appelées thred et
qui :
 s’exécutent de façon parallèle ou concurrente
 partagent l’espace d’adresse du processus
Le processus représente donc pour ses threads une unité d’encapsulation des ressources utilisées.
Et le thread est un sous-ensemble d’exécution du processus sur cet ensemble de ressources.
 Thread : pour exploiter le parallèlisme
Tâche : nous conviendrons que la tâche représente la plus petite unité sémantique d’exécution au
niveau macroscopique. Donc suivant les systèmes :
 une tâche = un processus sur les systèmes multi-processeurs
 une tâche = un thread sur les systèmes multi-threads
Typologie des systèmes :
 Système en mono ( obsolète )
 Système multi-tâches :
o Plusieurs tâches résident en mémoire centrale
o L’OS doit alors gérer l’attribution et le partage des ressources entre les
différentes tâches.
 Pose les problèmes liés à la programmation concurrente
 Pose les problèmes de protection du code et des donnée
 Système multi-threads :
o Supporte l’exécution d’un processeur en unités indépendantes
o Implémente au niveau du noyau la gestion des threads
o L’ordonnancement se fait alors sur des threads et non plus des processus
o Possibilité d’ordonnancer les threads sur plusieurs processeurs dans une
architecture parallèle
o Ex : Win NT
 Système temps réel :
o Système dans lequel il existe des interactions entre le système et des
équipements (capteurs, actionneurs etc.)
Maxime Augerd
Page 3
SE 2004
o
Avec des contraintes de temps fortes d’origine matérielle entre l’occurrence
d’un évènement et la réponse appropriée du système à cet événement
Transactionnel et Temps Réel :
Un système temps réel est un système déterministe par opposition au système transactionnel de
l’informatique de gestion.
 dans un système temps réel le temps de fin d’exécution d’une tâche est contraint
 dans un système transactionnel le temps d’exécution d’une tâche dépend de l’activité
du système et du temps de réponse de l’utilisateur
 Ceci impacte les stratégies d’ordonnancement des tâches suivant la nature du système
Mode d’utilisation :
Mode différé :
 il s’agit d’un traitement par lots ( Batch Processing )
 un lot = ensemble de programmes préparés avec leur données
 les lots sont placés en file d’attente et exécutés séquentiellement
 on peut aussi exécuter dans ce mode des fichiers de commandes
Mode intéractif :
 dans ce mode toute action de l’utilisateur est traitée immédiatement par le système
 2 types :
o time sharing : les utilisateurs ont accès simultanément à l’ensemble des
ressources, le système gère l’allocation cyclique des ressources
o le transactionnel : principal mode en informatique de gestion : il s’agit
d’applications qui gèrent le dialogue homme-machine suivant une logique liée
aux fonctionnalités attendues.
C – Les Fonctions d’un OS
Le chargement
Le système comprend généralement :
 une partie toujours résidente en mémoire centrale et qui se nomme le noyau ( kernel )
 une partie dynamiquement à l’exécution de la fonction demandée
Le chargement à la mise sous-tension s’effectue grâce à un programme chargeur simplifié appelé
BOOTSTRAP.
Principe :
 le chargeur est automatiquement appelé au démarrage de la machine
 pour cela il doit être stocké à une adresse disque convenue ( MBR ).
 Permet de charger le noyau du système en mémoire centrale
 Possible de changer le de chargeur
La génération système
Il s’agit du paramètrage d’un certain nombre d’éléments gérés par le système comme :
 la taille de la zone de swap
 la taille de la pagination
 la taille des tampons utilisés pour les E/S ( entrées sorties )
 les noms symboliques de périphériques
 les protocoles d’échange
 etc.
Permet de configurer le système.
Gestion de l’Unité Centrale :
La gestion de l’U.C. par l’OS consiste à :
 planifier l’exécution des différentes tâches suivant une stratégie d’ordonnancement
 assurer un mécanisme de commutation entre les tâches
Gestion de la mémoire centrale :
Il s’agit essentiellement :
 d’allouer de l’espace mémoire aux tâches naissantes
Maxime Augerd
Page 4
SE 2004
 de charger les tâches à des adresse valides
 d’assurer une non violation de l’espace mémoire alloué de chaque tâche
 et de libérer l’espace mémoire des tâches terminées
Gestion des E/S :
Pour l’OS, traiter les E/S c’est desservir les demandes de transfert d’informations en
 gérant des matériels divers ( CPU, interface d’E/S, contrôleur de périphériques, DMA,
périphériques )
 en s’appuyant sur la mise en œuvre d’instructions privilégiées exécutées en mode
noyau pour les opérations de bas niveau
Autres fonctions :
Gestion des fichiers
 l’organisation des supports ( logiques et physiques )
 les accès aux fichiers
 la protection et les droits d’accès aux fichiers
Gestion des utilisateurs
 utilisateurs et droits et comptes etc.
 dialogue homme-machine
Les utilitaires de service :
Outils d’administration :
 configuration
 exploitation
Outils d’aide à la production de programme
 mesure et surveillance
 droits et quotas
D – Comparatifs des OS
Les Windows : 9X, NT, 2000, XP, CE de Microsoft
MacOS d’Apple
La famille UNIX
 HP/UX ( HP )
 AIX ( IBM )
 SunOS / Solaris ( SUN )
Unix-like : Linux, FreeBSD
OS/390 et Z/OS pour les MainFrame d’IBM
Chapitre 2 : Les interruptions ( rappel )
A : Qu’est ce qu’une interruption ?
-
Une interruption consiste à suspendre la tâche en cours d’exécution pour exécuter autre
chose
On appelle système d’interruptions la composante système qui prend en charge les
réponses appropriées aux demandes d’interruptions
On distingue deux familles d’interruptions
Les IT Externes
Une IT externe est une IT asynchrone provoquées par un évènement sans relation avec les
instructions de la tâche en cours d’exécution.
Il s’agit d’une interruption matérielle générée par un dispositif externe.
On distingue :
 défauts externes pour le traitement des erreurs matérielles
 l’horloge utilisée pour le temps partagé
 les E/S avec les périphériques
Maxime Augerd
Page 5
SE 2004
Les IT internes :
C’est une IT synchrone provoquée par l’exécution même de l’instruction en cours de la tâche
active.
On distingue :
 les exceptions ( ou déroutements ) : décléenchée par une anomalie lors de l’exécution
d’une instruction ( ex : division par 0 )
 les interruptions logicielles ( ou appels système ) : une IT logicelle est déclenchée
lorsque la tâche en cours fait appel aux services du noyau
B – IT Externes
Principe general
Arrivée d’un événement asynchrone
 identification de la source ( = qui est l’émetteur de la demande )
 autorisation ( = prise en compte ou non de la demande )
Attendre un point interruptible, soit la fin de l’exécution de l’instruction (machine) en cours
Sauvegarde du contexte d’exécution de la tâche interrompue
Chargement du contexte de la tâche à exécuter suivant la source de la demande.
 Plusieurs notions :
o Identification de la source
o Autorisation
o Contexte d’une tâche
o Commutation de contextes
 Notion de rupture de séquence
Maxime Augerd
Page 6
SE 2004
Identification de la source
Sur un système multi-tâches
 plusieurs demandes d’IT peuvent être émises « en même temps »
 et d’autres demandes peuvent survenir alors qu’une IT est déjà en cours de traitement
Il faut donc pouvoir identifier et établir un ordre de priorité.
 Une IT externe est émise sur un niveau
 Généralement sur les systèmes le nombre de niveaux disponibles sur le CPU pour les IT externes
est très inférieur au nombre de sources possibles d’IT ( un seul sur les micro processeurs. )
 Il faut alors un mécanisme supplémentaire pour permettre au CPU d’identifier la source.
 Technique de scrutation : l’UC va interroger les différentes sources possibles sur un niveau pour
savoir de laquelle il s’agit.
 Technique par vectorisation : toute demande d’IT est accompagnée par une info ( le vecteur d’IT
) permettant de mettre en œuvre le programme de gestion d’IT approprié
Hiérarchie des IT externes :
 Etablir un ordre de traitement entre les différentes demandes d’IT
 pour éviter les IT cycliques
 car il existe des demandes plus prioritaires que d’autres ( ex : l’horloge )
 On associe une priorité par niveau d’IT.
Maxime Augerd
Page 7
SE 2004
Le contrôleur d’IT
 Il s’agit d’un circuit dédié à la gestion matérielle des IT externes
 Fonctions :
 identifier les sources d’IT en fournissant autant de niveaux nécessaires que de sources
possibles.
 Attribuer une priorité à chaque niveau, donc à chaque source
 Permettre la modification par programmation de la hiérarchie des IT
 Autoriser ou non les IT sur un niveau ( masquage )
Maxime Augerd
Page 8
SE 2004
Autorisation des IT
 IT masquable
 IT dont la prise en compte peut-être différée mais pas ignorée
 Lorsqu’un niveau est masqué, toute demande émise sur ce niveau est mise en attente et
sera traitée ultérieurement ( lorsque le niveau sera démasqué ). Deux niveaux de
masquage des IT : sur le PIC directement sur un niveau ou sur le CPU, toutes les IT sont
masquées.
 Le fait de pouvoir masquer à un moment donné les Its au niveau CPU permet de définir
des séquences de code critique c’est à dire non interruptible.
 Le masquage/démasquage se fait par des instructions particulières ( STI et CLI sur un PC
)
 Correspond à la patte INT sur un microprocesseur
 Lorsqu’un niveau est masqué, toute demande émise sur ce niveau est mise en attente et
sera traitée ultérieurement ( lorsque le niveau sera démasqué ). Deux niveaux de
masquage des IT : sur le PIC directement sur un niveau ou sur le CPU, toutes les IT sont
masquées.
 IT non masquables
 IT dont la demande ne peut être inhibée
 Correspond à la plus haute priorité
 Toujours prise en compte et sert au traitement des pannes matos ( failure )
 Correspond généralement à la patte NMI sur un microprocesseur
On peut ( sur certaines machines ) désarmer ou réarmer un niveau. Toutes les IT du niveau sont
ignorées et non mises en attente.
Maxime Augerd
Page 9
SE 2004
C – Les IT internes
Cas des IT internes
 Les IT internes ( les déroutements et les IT logicielles ) sont déclenchées par une instruction de la
tâche en cours d’exécution.
 Fonctionnement selon un principe identique aux IT matérielles
 Dans le cas d’un déroutement le CPU se branche lui-même au traitement approprié suivant
l’exception qu’il a détecté.
 Une IT logicielle est générée par une instruction particulière de type INT Y où Y est une
information permettant de connaître la routine à exécuter ( par ex une entrée dans la table des
vecteurs d’IT ).
 Les appels système de l’OS qui permettent à une tâche d’invoquer les services du noyau
s’appuient sur le mécanisme des IT logicielles
D – Exemples
Les IT du Z80 ( inutile )
E – Conclusion
 Une IT peut être :
 externe ( ex : l’horloge )
 appel système ( ex : demande d’E/S )
 ou déroutement en cas de plantage du programme
 Toute IT génère une commutation lors de laquelle le noyau reprend la main pour assurer
 la sauvegarde du contexte de la tâche suspendue ( au niveau système )
 la restauration du contexte de la tâche à exécuter
La sauvegarde de contexte s’appuie sur des mécanismes matériels.
 La gestion des IT par le noyau de l’OS s’appuie donc sur le niveau matériel ( le système d’IT du
CPU ).
 Le noyau représente un ensemble de services uniquement accessibles par le biais des IT et des
appels système.
 Le noyau réside toujours en mémoire et sa taille doit être aussi petite que possible pour laisser
suffisamment de même aux applications
 Les appels systèmes
 s’exécutent en mode noyau ( mode protégé )
 sont non interruptibles ( intégrité du noyau )
 permettent d’accéder sous le contrôle du noyau hors de l’espace d’adressage de la
tâche
 assurent les grandes fonctionnalités du système
o gestion des E/S
o gestion de la mémoire
o gestion de la communication inter-processus
o gestion des fichiers et répertoires
o gestion du temps
Maxime Augerd
Page 10
SE 2004
Chapitre 3 : Processus et Threads
A : Gestion des processus
Description d’un processus
 Problématique d’un système multi-tâches
 plusieurs processus sont présents simultanément en mémoire centrale
 il faut donc partager la ressource CPU entre ces différents processus
 Ceci implique que chaque processus
 possède un certain nombre de caractéristiques propres
 passe au cours de son « existence » par plusieurs états.
 Caractéristiques d’un processus :
 l’identificateur ou PID :
o entier attribué par le noyau du système
o au moment de la création
o unique
 la priorité
o indique le caractère d’urgence du processus
o sert à déterminer l’ordre d’allocation de la CPU
 Espace d’adressage d’un processus :
 ensemble des objets ( instructions et données ) qui est propre au processus
 comprend 3 zones :
o zone programme : code et constantes ( en lecture )
o zone données : variables globales et variables locales déclarées static ( en
lecture et écriture )
o zone pile : informations temporaires ( paramètres d’appel, adresse de retour,
variables locales )
o zone tas : allocation dynamique de mémoire ( schéma zones )
 Mode d’exécution d’un processus
 mode utilisateur :
o le processus n’accède qu’à son espace d’adressage
o exécution d’instructions ordinaire
 mode noyau :
o accès à des données externes à l’espace d’adressage du processus
o permet d’isoler l’applicatif du système
o s’appuie sur les mécanismes de protection du processeur ( instructions
privilégiées ). Permet de sécuriser le système, d’isoler ce que fait un
développeur du système.
o Concerne les appels systèmes, les routines d’IT, la commutation de tâches
 Contexte d’un processus
 représente l’ensemble des informations qui doivent être sauvegardées lors d’une
commutation afin de garantir une reprise ultérieur correcte de l’exécution du processus
 s’appuie sur le mécanisme des IT
 informations sauvegardées
o registres processeurs
o informations sur les zones mémoires associées au processus ( voir chapitre sur la
M.C. )
 Descripteur d’un processus ( PCB, Processus Control Block )
 structure système en mémoire centrale qui contient les informations nécessaires à la
connaissance exacte du processus à un instant t
o identificateur ( PID ), PPID ( PID du père du processus )
o état et priorité du processus
o contexte utilisateur ( zone code, zone de données, zone pile )
o contexte système ( répertoire courant, descripteurs des fichiers, ouverts,
variables d’environnement …)
o compteurs de temps d’exécution
Maxime Augerd
Page 11
SE 2004
 Table des descripteurs = table système
 localisée à une adresse fixe en zone mémoire non swappée
 constitue le point d’entrée à l’ensemble des descripteurs des processus présents sur le
système
 les descripteurs sont chaînés entre eux par des pointeurs
 chaque descripteur est représenté par une structure
 il y a un descripteur par processus
Maxime Augerd
Page 12
SE 2004
Etat d’un processus
 Un processus passe par plusieurs états
 élu : le processus est actif et dispose du CPU
 éligible : le processus prêt à être exécuté mais c’est un autre processus qui est élu
 en attente : le processus est bloqué dans l’attente de l’occurrence d’un événement ; il
n’est pas candidat à l’allocation du CPU
 hors service : le processus est dans un phase intermédiaire ( création ou terminaison )
 Les transitions entre les états
 la transition d’un état à un autre est liée à l’occurrence d’un événement
 les principaux évènements :
o la préemption ( ou réquisition ) le processus en cours perd le CPU
o la sélection
o le blocage
o le déblocage
o la création
o la destruction et la terminaison
Pour être élu il faut toujours passer par l’algorithme d’ordonnancement.
Allocation du processeur
 Dans un système multitâches plusieurs tâches sont candidates à la ressource processeur
 Mais au niveau microscopique, un processeur ne peut exécuter qu’un seul processus à la fois
 Il faut donc ordonnancer les processus, c’est à dire déterminer dans quel ordre chacun des
processus éligibles va devenir actif
Commutation
 D’autre part un processus peut être interrompu au cours de son exécution
 Il faut donc sauvegarder et restaurer le contexte
Maxime Augerd
Page 13
SE 2004
 Une commutation peut être provoquée par une IT matérielle ou un appel système.
 Mécanismes mis en jeu :
 le système d’IT ( niveau matériel )
 la gestion des IT par le noyau ( niveau logiciel )
 Lors d’une commutation le noyau reprend la main
 pour assurer la sauvegarde / restauration des contextes
 pour appliquer l’algorithme d’ordonnancement
Stratégies d’ordonnancement
 Basée sur un algorithme dit de scheduling
 Plusieurs techniques :
 FIFO
 PCTE et PCTER ( basé sur le temps d’exécution )
// Pas pour le transac
 Temps partagé ( time sharing )
// Pour système transac
 Priorité
// Pour système transac
 Les stratégies d’ordonnancement des systèmes transactionnels reposent sur les notions de temps
partagé et priorité
Temps partagé :
 algorithme basé sur la préemption ( -> IT horloge )
 processus gérés en listes circulaires : tourniquet
 chaque processus se voit attribuer cycliquement un quantum de temps d’occupation
CPU
 lorsque le quantum est écoulé, le processus est interrompu
 stratégie équitable mais chaque processus a la même priorité
Maxime Augerd
Page 14
SE 2004
Priorité :




on définit plusieurs niveaux de priorité
ces niveaux sont hiérarchisés
on exécute les processus selon leur priorité
Pas de préemption ( -> s’exécutent entièrement puis suivant le plus prioritaire ).
o Un processus a une priorité statique
o Mais problématique ( exemple d’une boucle infinie )
o Famine : celui qui est le moins prioritaire, si à chaque fin de processus un plus
prioritaire arrive, les moins prioritaires n’auront jamais le CPU
o Variante avec préemption : la priorité d’un processus est dynamique et varie
selon l’état du processus ( par exemple un processus qui « attend » depuis
longtemps deviendra plus prioritaire )
La variante :
Niveau = valeur du champ priorité du PCB ( descripteur ) . Un algorithme « recalcule » la priorité et
permet de « remonter »
Maxime Augerd
Page 15
SE 2004
Temps partagé ET Priorité
 Basée sur la préemption du CPU avec la notion de priorité dynamique
 Le processus le plus prioritaire est élu pour un quantum de temps
 La priorité est recalculée à chaque commutation pour éviter la famine
 Stratégie adoptée sur les systèmes transactionnels.
CPU_usage( Ti ) = [CPU_Usage ( Ti – 1 ) + nb_ticks ( Ti ) ] / 2
Priority ( Ti ) = Priority ( Ti – 1 ) +/- CPU_Usage ( Ti ) ] / 2
On fait + pour diminuer la priorité, et – pour l’augmenter. ( DANS CE CAS ).
Les processus qui font des demandes d’E/S sont moins pénalisés que les autres.
B – Gestion des Threads
Introduction
● Il existe de nombreux problèmes qui relèvent du parallélisme.
 soit que leur solution possède un parallélisme intrinsèque (par exemple le cas d’un serveur)
 soit que leur solution est optimisée par le parallélisme (par exemple un calcul matriciel)
● Or le parallélisme est coûteux dans le cadre du multitâche classique
 mécanisme de création, destruction de processus
 mécanisme de communication interprocessus lourd
Maxime Augerd
Page 16
SE 2004
Définition d’un Thread
● Afin d’exploiter un parallélisme fin, l’idée est de décomposer un même problème en unités
distinctes appelées threads (processus léger)
● Un processus est composé d’au moins un thread
● Les threads d’un même processus peuvent s’exécuter de façon concurrente mais partagent le
même espace d’adressage (celui du processus)
● Chaque thread possède sa propre pile et ses propres variables locales
Avantages des threads
● Le contexte d’exécution est réduit
 les threads partagent les ressources du processus
 le nombre d’instructions contenues dans un thread est plus faible que dans un processus
● Donc le temps de création, de destruction ou de commutation d’un thread est plus court que pour
un processus
● Enfin sur une architecture parallèle, l’OS répartit les threads sur les différents processeurs
● La mise en œuvre de variables communes ( variables partagées ) par plusieurs processus sur un
système multitâches classique
 Nécessite la création de segments de mémoire sous le contrôle du noyau
 Qui n’appartiennent à aucun espace d’adresses des processus communiquant
● Dans le cas des threads, la communication est simplifiée car les variables communes font partie
d’un seul espace d’adresses ( celui du processus )
Maxime Augerd
Page 17
SE 2004
Gestion des threads
● On distingue deux niveaux suivant les systèmes :
 applicatif : la gestion des threads est assurée par une bibliothèque ( ULT = User Level
Thread )
o exemple : la bibliothèque des gestions des threads posix_thread sous UNIX
o autre exemple : machine virtuelle java
 noyau : c’est le noyau qui gère les threads ( KLT = Kernel Level Thread ) = vrai système
multi-threads.
o Exemple : le système Windows NT ( windows server )
Mode ULT
● Le système est en fait un système multi-tâches classique
● Le noyau commute des processus et ignore l’existence de threads
La bibliothèque va émuler un système KLT.
● Les services fournis par la bibliothèque
 création, destruction, synchronisation (cf. Chap. 7) et communication entre threads
 ordonnancement des threads ( indépendant de l’ordonnancement de l’OS) avec possibilité
de choisir un algorithme d’ordonnancement des threads suivant les besoins de
l’application
Reproches : fait que ça passe par une couche logiciel ralentit le temps d’exécution de l’application.
Mode KLT
● Il s’agit d’un véritable OS multithreadé dans lequel l’ordonnancement est fait au niveau des
Threads et non plus de processus
● Mais les algorithmes d’ordonnancement restent les mêmes. ( transac : temps partagé avec priorité
dynamique ). Gain en terme de performances. En revanche on ne peut pas changer une stratégie
d’ordonnancement.
● Le processus ne représente plus que le contexte de travail.
Maxime Augerd
Page 18
SE 2004
● Exécution parallèle des threads sur des processeurs distincts (architecture SMP = plusieurs
processeurs)
Relations inter-threads
● L’exécution concurrente des threads implique des problèmes qui sont du même ordre que ceux
vus précédemment sur la relation inter-processus.
 la synchronisation des activités de chaque thread suivant un ordre prévu par le développeur
 l’exclusion mutuelle lorsque plusieurs threads tentent de mettre à jour une variable
commune
 l’évitement de l’étreinte fatale ( deadlock, inter-blocage )
Aspects traités au chapitre 7.
Maxime Augerd
Page 19
SE 2004
CHAPITRE 4 : La gestion de la mémoire
A – Généralités
Objectifs
● Pour que la CPU puisse exécuter du code il doit être présent en mémoire centrale.
● En conséquence dans un système multi-tâches plusieurs processus sont chargés en mémoire
centrale
● Mais …
 tous les processus n’ont pas la même taille
 ils commencent et se terminent chacun à un moment quelconque
● Pour gérer la mémoire le SE doit donc :
 allouer de l’espace mémoire à chaque processus suivant ses besoins ; cette allocation se
fait en connaissance des parties libres et occupées de la mémoire centrale.
 Effectuer des translations d’adresse ; le code d’un processus contient des adresses
relatives qu’il faut transformer en adresses réelles
 Protéger les informations en interdisant qu’une zone mémoire allouée à un processus soit
accédée par un autre processus
 Permettre le partage d’informations grâce à des zones mémoire communes
Mécanisme d’adressage
● Les instructions comprises dans le code d’un processus référencent les objets qu’elles manipulent
● L’espace des adresses des objets atteints par le code s’appelle l’espace adressable (cf. chapitre
3)
● Mais lors de la phase de traduction ( compilation, édition des liens )
 on ne peut pas fixer les adresses de façon absolue, ce qui figerait l’emplacement de
chargement du code
 donc toutes les adresses dans le code d’un processus sont traduites relativement l’adresse
de la première instruction, adresse considérée comme égale à 0
Maxime Augerd
Page 20
SE 2004
● Code translatable :
 un module exécutable est dit translatable, s’il peut être chargé à n’importe quelle adresse
réelle de la mémoire.
 La transformation de l’adresse relative en adresse physique se fait par une translation
statique
● Code relogeable :
 un module exécutable est relogeable, s’il peut être déplacé en mémoire même son
exécution démarrée
 la translation des adresses est donc dynamique
Gestion de la mémoire
● La mémoire centrale est une ressource coûteuse et de taille limitée ce qui implique :
 un mode d’organisation : la mémoire centrale est découpée en partitions ou en cases
 un mode d’allocation : en zones mémoires contiguës ou bien en zones non contiguës
 le stockage temporaire sur un disque (le swap) de l’image d’un ou plusieurs processus
lorsque la taille de la mémoire centrale ne permet pas de les charger tous
o par swapping (transfert de processus entiers)
o par pagination (transfert de parties de processus)
o
B – Gestion de la mémoire centrale en partitions (ancien système,
jusque dans les années 60)
Principes
● La mémoire centrale est vue comme un vecteur d’emplacements découpé en partitions
● Le code d’un processus :
 doit être chargé entièrement dans une partition pour qu’il puisse s’exécuter
 doit être translatable pour pouvoir être chargé à n’importe quelle adresse
 éventuellement relogeable si le code du processus doit être déplacé en mémoire centraled
Maxime Augerd
Page 21
SE 2004
● Traduction des adresses d’un processus
 le passage des adresses relatives aux adresses réelles se fait par une translation
 à partir d’un registre de base qui
o contient l’adresse de chargement du code en mémoire
o et qui fait partie du contexte du processus
● Mécanisme de protection mémoire
 par un registre limite
 chargé au lancement du processus à la taille de la partition
Partitions fixes
● Allocation en partitions fixes
 le découpage est défini à la génération système
 les partitions peuvent être de taille inégale
 tout processus est chargé dans la plus petite partition pouvant le contenir
● Mais …
 la mémoire est fragmentée (car quand on charge un programme même dans la plus petite
partition, le processus ne fait pas exactement la taille de la partition)
 la taille d’un processus est limitée à celle de la plus grande partition
Maxime Augerd
Page 22
SE 2004
Partitions de taille variable
● Allocation en partitions de taille variable
 l’allocation se fait à la demande
 mais lorsqu’un processus se termine
o il crée un trou
o la taille du trou n’est peut être pas suffisante pour un autre processus
 Il faut donc récupérer de la mémoire par fusion de zones consécutives ou par compactage
(Garbage Collector = Ramasse miettes)
 Ce qui implique de reloger le code des processus
Maxime Augerd
Page 23
SE 2004
Limites de l’allocation en partitions
● Le degré de multiprogrammation est contraint
 par le nombre de partitions (partitions fixes)
 par la taille de la mémoire centrale (partitions de tailles variables)
● Le swapping contourne cette contrainte
 création d’une partition spéciale sur un disque appelée swap
 pour y placer des processus en attente d’exécution et/ou des processus expulsés de la
mémoire centrale en vue de libérer de la place
Swapping
● Il y a échange entre la mémoire centrale et la zone de swap sur disque de l’image entière de
processus (swap in, swap out)
●Géré par un processus système (le swapper)
 réveillé par le noyau lorsque la mémoire arrive à saturation
 le choix du ou des processus à swapper est fonction du temps passé en mémoire et/ou en
zone de swap, de la priorité, de l’état
● Cependant
 cette technique est coûteuse en E/S car les transferts entre swap et mémoire portent sur la
totalité des images mémoires des processus swapés
 et elle ne résout pas le problème d’un processus qui aurait une taille supérieure à la taille
de la mémoire centrale
 c’est pourquoi tous les systèmes modernes mettent en œuvre la gestion d’une mémoire
virtuelle par pagination
C – Gestion de la mémoire centrale par pagination
La localité
● Les processus tendent à exécuter des instructions groupées dans le temps et dans l’espace
 dans le temps : la probabilité que les adresses référencées dans un passé récent soient à
nouveau référencées dans un futur proche est forte (ex : traitement d’une boucle)
Maxime Augerd
Page 24
SE 2004
 dans l’espace : sur un intervalle de temps moyen, les références d’un processus portent
majoritairement sur des adresse voisines dans l’espace de code (ex du parcours d’un
vecteur)
● Ce principe de la localité permet de s’affranchir de la contrainte d’allocation contiguë
● La partie active du code d’un processus est plus petite que le code tout entier
● Il n’est donc plus nécessaire de charger le code entier d’un processus pour qu’il s’exécute.
Notion de WORKING SET
● On cherche alors à ne charger en MC que la partie active d’un processus en constituant un espace
de travail (le Working set)
● Qui correspond au sous-ensemble de l’espace des adresses qui sont référencées pendant un
certain intervalle de temps par le processus
● Le reste du code du processus est stocké sur une mémoire auxiliaire (le swap)
● Cette approche permet d’optimiser l’utilisation de la mémoire
 il est possible de charger plus de processus que la mémoire ne peut réellement contenir
 l’exécution d’un processus n’est plus contrainte par la capacité de la mémoire centrale
 Ici on va pouvoir aussi éviter le problème des partitions qui était la fragmentation
● La notion de Working Set sert de modèle à la mise en œuvre d’une mémoire virtuelle par
pagination
Principes
● L’espace adressable d’un processus est vu linéairement comme une suite de blocs de taille
identique appelés des pages
● La MC est vue comme une matrice dont toutes les cases appelées cadres de page (ou frames)
sont identiques et de taille égale à une page.
● La partie active d’un processus (le Working Set) correspond à des pages du processus chargées
dans des cadres non contiguës de la MC.
● Le code des processus est stocké sur une partition spéciale d’un disque : le swap.
● Comme toutes les pages du code d’un processus ne sont pas chargées en même temps en MC, il
faut
 gérer des transferts de pages entre MC et swap
 disposer d’une cartographie de la mémoire afin de connaître les emplacements disponibles
en MC lors d’un chargement
Maxime Augerd
Page 25
SE 2004
● Les adresses dans le code d’un processus et les adresses réelles en MC sont dissociées
● L’espace adressable d’un processus devient un espace virtuel dans lequel les adresses relatives
sont appelées adresses virtuelles
● Toute adresse dans le code d’un processus est vue comme un couple (numéro de page +
déplacement dans la page (= offset))
● Les adresses physiques de la mémoire centrale constituant l’espace réel sont appelées adresses
réelles
● Toute adresse réelle en mémoire centrale est vue comme étant formée d’un couple (numéro de
cadre de page + déplacement)
● La taille des adresses qu’elles soient réelles ou virtuelles est fixée par l’architecture de la
machine (du processeur).
Format des adresses
● Adresse virtuelle
- format d’une adresse : n + k bits
- taille d’une page
: 2K mots de mémoire
- nombre de pages
: 2n
● Adresse réelle
- format d’une adresse
- taille d’un cadre
- nombre de cadres
- bits inutilisés
: m + k bits
: 2k mots mémoire
: 2m
: n – m bits
La pagination
● La mise en œuvre du concept de mémoire virtuelle par pagination nécessite
 des structures de données système
 des mécanismes particuliers
● Les structures manipulées par le système :
 la table des pages
Maxime Augerd
Page 26
SE 2004
 la table des cadres de pages
 la table d’utilisation du swap
● Les mécanismes particuliers
 la traduction d’une adresse virtuelle en adresse réelle
 le traitement des interruptions de défaut de pages
 le remplacement de pages
 le chargement de pages
 l’allocation de cadres de pages
La table des pages
● Les adresses référencées dans le code d’un processus sont des adresses virtuelles.
● La traduction d’une adresse virtuelle en une adresse réelle est donc réalisée à chaque référence
mémoire.
● On utilise pour cela une structure système appelée table des pages qui permet d’établir la
correspondance entre une adresse virtuelle et une adresse réelle.
● Il y a une table par processus
● Elle fait partie du contexte du processus
● Elle comprend une entrée par page qui indique :
 dans quel cadre elle est placée si la plage est chargée
 l’adresse de la zone de swap où la page est stockée
 un ensemble de bits indicateurs
● Les bits indicateurs :
 bit de validité
:
page chargée dans un cadre ou non chargée
 bit de protection
:
permission en lecture ou en mise à jour
 bit de verrouillage
:
page non « swappable »
 bit de référence
:
page appartenant au Working Set
 bit de modification
:
contenu de la page modifié ou non
 bit âge
:
compteur indiquant le temps pendant lequel la page a
appartenu au Working Set
Maxime Augerd
Page 27
SE 2004
Au cours de la vie d’un processus, une même adresse virtuelle peut être traduite par des adresses
réelles différentes.
De la même façon au court de la vie d’un processus, une même adresse réelle peut être la
traduction de plusieurs adresses virtuelles.
Traduire une adresse virtuelle en adresse réelle, c’est simplement traduire un numéro de page en
numéro de cadre. La structure qui permet de faire cette traduction est la table des pages, mais il
existe un mécanisme matériel qui permet d’accélérer cette traduction, c’est une mémoire
associative (cache).
Les autres tables utilisées
● La table des cadres de pages : structure système qui permet de savoir pour chaque cadre de
page.
 s’il est libre ou alloué
 à quelle page de quel processus il est alloué
● La table d’utilisation du swap
 permet de connaître le mapping de la zone de swap
 utilisée pour l’allocation d’espace disque en blocs contigus pour optimiser les E\S (mode
multiblocs)

Traduction des adresses
● On peut accélérer la traduction d’adresses grâce à une mémoire associative (la TLB = Translation
Look-aside Buffers)
 descripteur = adresse virtuelle (n°page)
 données = adresse réelle (n°cadre)
 gérée par un étage matériel (le MMU = Memory Management Unit)
 chargée par les derniers couples (n°page, n°cadre) accédés par le processus élu
 si cache hit (= fait de trouver l’info dans la mémoire associative), la traduction est
immédiate
 si cache miss, consultation de la table des pages
Mécanisme de traduction d’adresse
● Associativité totale :
 n’importe quelle adresse peut occuper n’importe quelle entrée dans le cache
 nécessite une comparaison avec au plus tous les descripteurs
 stratégie de remplacement LRU (Least Recently Used) ou FIFO
● Associativité directe :
 l’entrée est donnée par les n bits de poids faible (principe de la localité)
 il y a 2n entrées dans le cache
Maxime Augerd
Page 28
SE 2004
Maxime Augerd
Page 29
SE 2004
Interruption de défaut de pages
● Lorsque le processus référence une adresse virtuelle
 si la page est chargée en MC l’accès est immédiat
 sinon il faut
o suspendre l’exécution (avec éventuellement retour ultérieur au début de
l’instruction)
o charger la nouvelle page
● On appelle interruption de défaut de pages ce mécanisme mis en œuvre
(CETTE PARTIE N’A PAS ETE TAPE PAR MAX)
-Problèmes liés à la pagination
-taille des tables de pages
-il y a une table par processus et chaque table à 2p entrées (p = nb de
bits au format d’une page
-la taille de la table des pages d’un processus devient trop grand pour
être chargée entièrement en MC
-le système pagine alors la table des pages
-une adresse virtuelle comprend toujours un offset mais la partie
n° de page est elle même découpée en 2 ou 3 niveaux
(pagination multiniveaux)
-le système ne change en mémoire qu’une partie de la table des
pages par processus
-vidage de la mémoire associative TLB
-à chaque commutation de contexte
-pour s’assurer que les infos contenues ne génèrent pas une traduction
erronée
-retour sur instruction
Maxime Augerd
Page 30
SE 2004
-s’il se produit une IT de défaut de page pendant l’extraction des
opérandes d’une instruction, il faut être capable de redémarrer
l’instruction à son début lorsque la page en défaut est chargée
-le système s’appuie sur des mécanismes matériels pour gérer ce
problème
-Transfert de pages
-il y a transfert de pages entre la MC et la zone de swap
-lorsqu’il faut allouer de la mémoire
-swap => MC
-dépend de la stratégie de chargement
-lorsqu’il faut libérer de la place en mémoire
-MC => swap
-dépend de stratégie de remplacement
-les stratégies de remplacement et de chargement sont en inter relation
-stratégie de chargement
-pagination à la demande (demand paging)
-on ne charge que la page référencée par le processus
-simple à mettre en œuvre
-mais provoque des IT de défaut de page (ex : cas limite : boucle à
cheval sur 2 pages
-et ne tente pas d’implémenter la notion de Working Set
-stratégie utilisée sur les premières versions de Linux
-pré chargement (prepaging)
-on anticipe en chargeant plusieurs pages par processus
-quelques types d’allocation :
-équitable : dépend du nombre de processus et du nombre de
cadres libres
-proportionnelle : dépend de la taille du processus et du nombre
de cadres libres
-locale : chaque processus a un nombre de cadres fixes avec
remplacement des pages dans cet ensemble
-globale : on affecte dynamiquement des cadres de processus à
évincement
-stratégie de remplacement
-FIFO :
-le système gère une liste de toutes les pages chargées en mémoire (
avec la plus récemment chargée en tête de liste )
-on remplace en commençant par la page la plus anciennement chargée
-mais elle peut être à nouveau référencée dans un futur proche
-seconde chance
-variante du FIFO où on observe le bit de référence
-si le bit de référence est à 0, la page est évincée car cela signifie qu’elle
n’est plus utilisée
-sinon le système la considère comme éventuellement chargée en la
mémorisant en tête de la liste, puis observe la page devenue la plus
vieille
-LRU : Least Recently Used
- stratégie basée sur le modèle de Working Set
-lorsqu’il faut remplacer une page de l’espace de travail d’un processus
on évince la page la moins récemment utilisée et non plus la moins
récemment chargée
-politique de remplacement considérée comme efficace
-mise en œuvre du LRU :
-chaque page possède un bit de référence et un compteur âge
-lorsque le processus accède à une page, on positionne le bit de
référence et on met âge à 0
Maxime Augerd
Page 31
SE 2004
-périodiquement on échantillonne le bit de référence en incrémentant
l’âge d’une page non référencée (une page référencée appartient alors
à l’espace de travail, une page non référencée vieillit)
-lorsqu’il faut allouer de la place mémoire
-Gestion de la mémoire sous UNIX
-gestion d’une mémoire virtuelle paginée
-structures de données relatives à la pagination
-table des pages (une par processus)
-table des cadres de pages (mapping de la M.C)
-descripteurs de blocs disque (emplacement disque des pages)
-table d’utilisation du swap (mapping du swap)
-principaux bits utilisés dans la table des pages
-valide : page chargée
-référence : page référencée
-modification : page dont le contenu a été modifié
-âge : temps d’appartenance de la page au Working Set
-table des cadres
-décrit pour chaque cadre de la mémoire physique
-l’état (libre ou occupé)
-le ou les processus utilisateurs
-le n° du bloc swap contenant une copie de la page
-chaîne les cadres libres (prêt à être réassignés)
-allocation de la mémoire
-le noyau alloue de la mémoire à partir de la liste des cadres libres
-en commençant par le moins récemment utilisé : il est possible ainsi
d’éviter certains défauts de pages en retrouvant la page intacte dans la
liste des cadres libres
-le transfert des pages hors de la mémoire
-géré par le dérobeur de pages qui procède à l’élection des pages devant
être transférées
-principe du dérobeur
-si une page est dans le Working Set d’un CPU (bit de référence
masqué) le dérobeur remet, lorsqu’il est sollicité, ce bit à 0 ainsi que
l’âge
-si une page n’est pas référencée au prochain examen du dérobeur, le
conteneur âge est incrémenté
-au delà d’une certaine valeur du compteur âge (fonction du nombre de
bit du compteur) , le dérobeur place la page dans l’état “à transférer”
(gestion par une liste chainée)
-Mise en œuvre
-le dérobeur est réveillé par le noyau dès que la mémoire libre disponible est en
dessous d’une limite inférieure
-il recherche des pages éligibles au transfert et les place dans la liste des pages
à transférer jusqu’à ce que la mémoire libre dépasse une limite supérieure
-ce mécanisme des deux limites réduit l’emballement qui consisterait
constamment à charger décharger des pages
-transfert de pages
-le noyau écrit les pages élues sur les périphériques de swap uniquement si leur
contenu a été modifié (valeur de bit de modification)
-il efface le bit valide de toutes les pages élues
-il chaîne les cadres de pages devenues libres dans la liste appropriée
-IT de défaut de pages
-générée lorsque le bit valide n’est pas positionné
-le noyau recherche dans la table des pages le descripteur du bloc disque de la
page en défaut
Maxime Augerd
Page 32
SE 2004
-si le descripteur de bloc ne mentionne pas la page le noyau signale une
violation mémoire du processus
-si la page est encore intacte dans la liste des cadres libres (élue par le dérobeur
mais le cadre n’a pas été réassigné) elle est retirée de la liste, les structures de
données et les bits adéquats sont positionnés
-sinon le noyau alloue un cadre de pages et y place la page depuis le
périphérique de swap (ou depuis un fichier exécutable)
-swapping et pagination
-il peut arriver que beaucoup de processus soient dans leur espace de travail,
donc que les bits référence soient positionnés
-le dérobeur de pages ne peut pas faire transférer assez de pages hors de la
mémoire
-et la procédure de traitement des IT s’endort car elle ne peut pas attribuer des
pages à un processus
-il y a donc emballement du système
-c’est pourquoi le système V associe pagination et swapping
-algo de pagination en première intention
-swapping de processus entiers (par réveil du processus swapper) pour
libérer de la mémoire si emballement du système
Maxime Augerd
Page 33
SE 2004
Maxime Augerd
Page 34
SE 2004
CHAPITRE 5 : Les entrées/sorties
Introduction
● Une E/S consiste à effectuer un transfert de données entre l’unité centrale et un organe
périphérique.
● Caractéristiques d’une E/S
 grande diversité des périphériques
 vitesse de transfert lente par rapport au fonctionnement de la CPU
 implémentation des couches 1 et 2 du modèle OSI
o codage des signaux
o protocoles d’échange
● Le système d’Entrée/Sortie est la composante du système qui prend en charge ces différents
problèmes
 un niveau physique : les E/S physiques et les drivers
 un niveau logique : le gestionnaire d’E/S
 une interface normalisée avec les applicatifs (API = ensemble de fonctions qui constitue une
interface que les programmes applicatifs peuvent invoquer)
Maxime Augerd
Page 35
SE 2004
L’interface d’E/S
● Interface programmable avec le « monde extérieur »
● Assure la synchronisation entre l’unité centrale et le contrôleur de périphérique
● Gère un véritable protocole de communication avec le contrôleur
● Comprend des registres (données, commandes, état, mode) adressables par des instructions d’E/S
spécialisées (de type in ou out)
(UART = Universal Asynchronous Receive Transmit)
● Représente l’attachement canal sur les gros systèmes
Le contrôleur de périphérique
● Peut être regroupé physiquement avec le périphérique.
● Destiné à gérer un type de périphérique ou une même famille de périphériques.
● Envoie au périphérique des ordres
● Exécute les commandes du programme pilote
● L’interface contrôleur – périphérique peut être standardisée (ex : SCSI)
Accès direct à la mémoire
● Dispositif matériel appelé DMA (micro) ou Canal (gros système) qui comprend
 un compteur ordinal chargé avec l’adresse du programme d’E/S à exécuter (qui est appelé
programme canal)
 un mot d’état sur l’opération d’E/S en cours
 des buffers d’échange
 un compteur de mots transférés
● Permet au contrôleur d’effectuer des transferts directs entre la MC et les périphériques en mode
bloc (pendant que le CPU fait autre chose).
● Mais le bus représente une ressource critique qui nécessite un arbitrage (peut être fait par le DMA
ou par le CPU). Il y a un partage temporel du bus entre le DMA et le processeur.
Maxime Augerd
Page 36
SE 2004
● Un programme canal décrit une opération d’E/S
 quel est le sens du transfert
 à partir de quelle adresse mémoire est effectué le transfert
 le nombre d’octets à transférer
 éventuellement l’adresse du prochain programme canal à effectuer
Une entrée/sortie est encadrée par une IT logicielle et est terminée par une IT externe
Notion de Pilote
● Le pilote représente l’ensemble des commandes que peut comprendre le contrôleur
● Il s’agit de code appelé lors d’une demande d’E/S du logiciel par le gestionnaire d’E/S
● C’est la seule partie du système qui connaît les particularités du périphérique concerné
● Il assure une interface normalisée entre les requêtes du gestionnaire d’E/S et le périphérique
afin d’en masquer les détails particuliers
● Au début d’une E/S, le pilote
 charge le DMA (ou le canal) avec une adresse mémoire et un décompte de transfert
 lance le périphérique
● Pendant l’E/S
 le pilote est endormi si il y’a une autre demande d’E/S dans la file d’attente des E/S sur le
périphérique concerné
 le transfert est effectué de manière autonome par le programme canal
● A la fin d’une E/S, le pilote
 est réveillé par le dispositif d’accès direct à la mémoire qui génère une demande
d’interruption lors de la fin du transfert
 sert cette demande d’interruption
 vérifie le compte rendu de l’opération et en informe l’appelant
Maxime Augerd
Page 37
SE 2004
 la communication entre le pilote et le gestionnaire d’E/S se fait par une structure de
données particulière appelée le bloc de commandes
 s’il y a plusieurs demandes d’E/S sur un même pilote, celles-ci sont gérées en file d’attente
● Les différents types de pilote
 les pilotes de périphérique
o désigne le logiciel qui commande un contrôleur
o un même pilote peut gérer tous les périphériques rattachés à un même contrôleur
 les pilotes de fichiers
o interceptent les requêtes d’E/S
o transforment une requête orientée fichier en une requête orientée périphérique
(voir SGF = Système de Gestion de Fichier)
o font appels aux pilotes de périphérique
● Structure d’un pilote
 un pilote est composé d’un ensemble de routines
 les routines clés d’un pilote son
o routine d’initialisation
o routine de démarrage d’E/S
o routine de répartition
o routine de prise en charge des interruptions
Le gestionnaire d’E/S
● Au niveau des programmes, les E/S se font sur des fichiers virtuels
● Une demande d’E/S du logiciel est traduite en un appel système qui invoque le gestionnaire
d’E/S
● Le gestionnaire d’E/S représente donc
 un ensemble de services invoqués par les appels système
Maxime Augerd
Page 38
SE 2004
 un modèle permettant de diriger les requêtes d’E/S aux différents pilotes concernés grâce
au bloc de commandes (Input Ouput Request Block)
● Le bloc de commande contient les informations relatives à une demande d’E/S
 l’unité logique concernée
 le type d’E/S
 le processus qui émet la demande d’E/S
 le nombre d’octets à transférer
 l’adresse du tampon mémoire
 des champs positionnés en retour de l’E/S
o un code retour d’E/S
o le nombre d’octets réellement transmis
● Traitement d’une E/S par le gestionnaire
 interception de la demande
 création d’un bloc de commandes après vérification des paramètres (on vérifie que le type
d’E/S correspond bien au fichier virtuel sur lequel on veut effectuer cette E/S)
 appel du pilote de système de fichiers qui reçoit le bloc de commandes
 le pilote complète le bloc de commandes et invoque le pilote de périphérique concerné
 déroulement de l’E/S physique
 à la fin de l’E/S physique le contrôleur génère une interruption matérielle
 le pilote de périphérique prend en charge la demande d’interruption
 puis retourne au pilote de système de fichiers l’état de l’E/S
 les données à transférer doivent être placées dans l’espace d’adressage du processus
demandeur de façon asynchrone par mise en file d’attente.
 Le gestionnaire d’E/S supprime enfin le bloc de commandes associé à l’E/S
 Le processus qui avait fait la demande d’E/S est à nouveau éligible
Les appels système d’E/S
● Ensemble de fonctions pour effectuer des E/S
 rudimentaires (bas niveau)
 indépendantes du support physique
 réalisées par le noyau
 sur des fichiers virtuels (stream)
● Dirigées vers les structures de données adéquates du système
 descripteurs de processus
 table des fichiers
 table des périphériques
Exemple d’appels système d’E/S
● int read(int fd, void *buf, int nbr);
 lecture de nbr octets
 sur un descripteur de fichier fd (clavier, socket, pipe, fichier nommé)
 rangés à l’adresse buf
● int write(int fd, void *buf, int nbr);
 écriture de nbr octets
 sur un descripteur de fichier fd (écran, socket, pipe, fichier nommé)
 à partir de l’adresse buf
Maxime Augerd
Page 39
SE 2004
Maxime Augerd
Page 40
SE 2004
CHAPITRE 6 : Le système de Gestion de
fichiers
A – Généralités
Présentation
● Le SGF est la couche système qui s’appuie sur la gestion des E/S pour offrir des services fichiers
indépendamment des périphériques
 au niveau utilisateur : utilisation, droit et protection sur les fichiers
 au niveau physique : allocation et organisation de l’espace disque, nommage des fichiers et
répertoires, sécurité et performance
● Les concepts physiques d’un système de fichiers et leur mise en œuvre ont déjà été traités dans
le cours d’ARCHI.
Définitions
● Fichier = Collection de données sur une unité de mémoire auxiliaire
 assure la permanence des informations
 sur un périphérique comme supporte physique (disque, disquette, cd, etc.)
● Un fichier est donc une structure de données
Ce qui caractérise une structure de données :
 une organisation = la façon dont les données sont rangées au niveau logique dans le fichier
 des méthodes d’accès = la façon d’accéder aux données en fonction de leur organisation
logique. C’est l’organisation qui implique des méthodes d’accès.
Typologie des fichiers
● Fichier binaire
 contient des données telles qu’elles sont représentées en MC (C2, IEEE754, …)
 non éditable, non imprimable
 gain de place
● Fichier texte
 toutes les données sont enregistrées sous forme de caractères
 éditable et imprimable
 nécessite une conversion entre la MC et le fichier
● Fichier d’enregistrement
 collection de données décrites selon une structure identique appelée enregistrement
 chaque enregistrement contient des champs ou rubriques
 ce type de fichiers correspond à l’implémentation d’un MCD (ex : fichier produit)
 un enregistrement peut contenir des rubriques codées au format texte ou au format binaire
Sécurisation des fichiers
● Les droits sur le fichier suivant
 mode : lecture, écriture, exécution, suppression …
 appartenance : propriétaire, groupe, autres
● La protection du contenu d’un fichier
 cryptage du contenu du fichier
 accès sous contrôle d’un mot de passe
● La pérennité du fichier
 sauvegarde totale ou incrémentale
périodicité et diversitifaction des sauvegardes
COURS INTERROMPU ( complété par le cours des 2ième années de l’an dernier )
Maxime Augerd
Page 41
SE 2004
Maxime Augerd
Page 42
SE 2004
Maxime Augerd
Page 43
SE 2004
Maxime Augerd
Page 44
SE 2004
Maxime Augerd
Page 45
SE 2004
Maxime Augerd
Page 46
SE 2004
Maxime Augerd
Page 47
SE 2004
CHAPITRE 7 : Programmation parallèle
A – Introduction
Programmation séquentielle
● Dans le modèle Von Neumann, le paradigme d’exécution est fondamentalement séquentiel.
 les instructions du code sont exécutées les unes après les autres
 sauf pour les branchements (in)conditionnels (jump) qui permettent de traduire les
schémas itératifs et répétitifs.
 Et sauf pour les branchements avec retour qui permettent de traduire les appels de
procédure (call)
->
●
modèle de programmation séquentielle
● Limites du modèle de programmation séquentielle
 On ne peut pas optimiser une solution qui contient un certain degré de parallélisme.
 On ne peut pas traduire un problème dont la résolution passe forcément par du
parallélisme.
● Quelles solutions ?
 adopter un modèle de programmation concurrente sur les architectures Von Neumann
 ou adopter un modèle de programmation parallèle sur les architectures parallèles
Programmation concurrente
● Modèle de programmation parallèle
 sur un seul processeur
 avec un parallélisme simulé grâce à un OS multitâche basé sur la préemption (réquisition
du CPU par des IT externes horloges)
 comportement séquentiel au niveau microscopique
 parallèle au niveau macroscopique
● Introduit de nouveaux concepts
 concurrence
 communication
 synchronisation
Programmation parallèle
● Programmation
 sur des architectures parallèles
 mais pas de modèle unique
o dans les architectures (Single Instruction Single Data (SISD), SIMD, MIMD)
o dans l’approche du parallélisme (parallélisme de tâches ou parallélisme de données)
● Tendance pour les serveurs d’entreprise :
 architecture SMP (Symetric Multi Processor) MIMD
 parallélisme de tâche avec OS multithreads
● Attention : système parallèle différent de système distribué
Architecture SMP
● SMD désigne une architecture MIMD au sens de la classification de Flynn
 plusieurs processeurs identiques
 une mémoire commune partagée
● L’ordonnanceur traite autant de tâches qu’il y a de processeurs
 les threads d’un même processus peuvent s’exécuter sur des processeurs différents
 mais un processus monothread ne s’exécutera pas plus vite
Maxime Augerd
Page 48
SE 2004
Architecture SMP (suite)
● Gestion des conflits d’accès au bus et à la mméoire
 par un mécanisme de verrouillage
 ce qui limite le nombre de processeurs pour des raisons de performance
● Intérêt : on augmente la puissance de calcul par ajout de processeurs sans changer l’OS
● Exemples d’OS supportant le SMP :
 Linux depuis le noyau 2.2
 Windows depuis NT
Maxime Augerd
Page 49
SE 2004
Parallélisme de tâches
● Les architectures techniques rencontrées en IG (Informatique de Gestion)
 postes clients : machines VN
 serveurs : machines SMP
● Sur ces architectures le modèle de programmation parallèle repose sur un parallélisme de tâches
 simulé : machine VN
 vrai : machine SMP
● Le parallélisme de tâches implique l’existence
 de tâches totalement indépendantes
 mais aussi de tâches coopérantes ou concurrentes
Coopération et concurrence
● Type de coopération entre tâches :
 dans le temps : il s’agit alors de synchroniser l’activité d’une tâche sur celle d’une ou
plusieurs autres tâches.
 dans l’espace : il s’agit alors de communiquer des informations entre tâches
● Type de concurrence :
 une tâche peut détenir une ressource de manière exclusive : notion d’exclusion mutuelle
 ou bien la partager en même temps avec d’autres tâches : notion de réentrance
Définitions
● Une ressource (matérielle ou logicielle) est dite commune si elle peut être utilisée par plusieurs
tâches
 elle est dite réentrante à N entrées (ou encore partageable à N entrées) si au plus N tâches
peuvent y accéder en même temps
 elle est appelée ressource critique si une seule tâche peut y accéder à la fois.
● Une ressource non commune est dite privée
● Attention : ne pas confondre les variables communes avec les variables globales
 une variable commune est partagée par plusieurs tâches
 une variable globale est vue par plusieurs fonctions ou modules au sein d’une même tâche
Maxime Augerd
Page 50
SE 2004
Conclusion
● Finalement le parallélisme de tâche relève de trois classes de problèmes.
 l’exclusion mutuelle : chaque fois que plusieurs tâches veulent accéder à une ressource
critique, il faut interdire l’accès simultané à cette ressource
 la synchronisation : lorsque plusieurs tâches sont interdépendantes, il faut garantir que
leur exécution puisse se faire dans l’ordre prévu par le concepteur
 La communication : pour coopérer, les tâches ont aussi besoin d’échanger des
informations.
B – L’exclusion mutuelle
Présentation
● Dans un système multitâche l’accès à une ressource commune est fonction de l’ordonnancement
● Lorsque plusieurs tâches veulent accéder en mise à jour à une ressource critique le résultat
risque, si l’on n’y prend garde, d’être incohérent
● Ceci est illustré par l’exemple du compte bancaire mis à jour par deux transactions distinctes
mais simultanées
L’exemple du compte bancaire
Sur une architecture Von Neumann
● On considère les deux opérations suivantes effectuées par deux tâches en parallèle :
 compte <- compte + crédit_1
 compte <- compte + crédit_2
● Chacune des deux instructions donne naissance à une suite de trois instructions machine du type :
Load compte
Add
crédit_
Store compte
● On suppose que
 les deux tâches T1 et T2 s’exécutent sur le même processeur d’un système multitâches en
temps partagé
 la tâche T1 est active et que le processeur est réquisitionné après les 2 premières
instructions
 la tâche T2 est élue par la suite de sorte qu’elle exécute l’ensemble des 3 instructions
machine
 plus tard T1 est à nouveau élue
Maxime Augerd
Page 51
SE 2004
● Que vaut la variable compte ?
 compte vaut compte + crédit 1
● Pourquoi ?
 à cause de la restauration du contexte de T1
CONCLUSION : le résultat dépend bien dans ce type de situations de l’ordonnancement
Définitions
● On appelle ressource critique une ressource commune qui ne peut être accédée en MAJ que par
une seule tâche à la fois (= qu’on essaye de modifier par plusieurs tâches)
● On désigne par section critique la partie du code d’une tâche pendant laquelle elle accède à une
ressource critique
● On nomme par exclusion mutuelle le moyen d’interdire l’accès simultané à une ressource
critique par plusieurs tâches
Gestion de l’exclusion mutuelle
● Les solutions pour gérer l’exclusion mutuelle
 les solutions logicielles
o exemple : algorithme de DEKKER
o inefficientes (blocage de la CPU par boucle d’attente, consomme du temps CPU
pour rien) et lourdes à mettre en œuvre
o plus aucun intérêt aujourd’hui
 les appels systèmes : tous les OS modernes proposent des outils qui permettent de gérer
l’exclusion mutuelle : les sémaphores
Maxime Augerd
Page 52
SE 2004
Introduction aux sémaphores
● Outil système proposé au départ par E.W. Dijkstra en 1968
● Basé sur le concept du blocage d’une tâche pour éviter les boucles d’attente active
● Rappels :
 bloquer une tâche c’est :
o retirer son descripteur de la liste des tâches éligibles -> ne participe plus à
l’ordonnancement
o et le placer dans une file d’attente, généralement gérée en FIFO (pour respecter
l’ordre)
 débloquer une tâche constitue l’opération inverse (retirer le descripteur de la liste
d’attente, la tâche redevient éligible)
● Conceptuellement un sémaphore est une structure système comprenant
 un champ entier
 une file d’attente des tâches bloquées sur le sémaphore en question
● Les données de cette structure ne peuvent être manipulées que par certaines primitives système
 création avec initialisation d’un sémaphore
 destruction d’un sémaphore
 2 opérations baptisées P() et V() par Dijkstra
● Caractéristiques principales :
 les primitives de création avec initialisation, de destruction ou de manipulation P(à et V()
d’un sémaphore sont toutes indivisibles
 car implantées par des fonctions non interruptible du noyau
 la valeur initiale d’un sémaphore dépend du problème à traiter
Etude de l’opération P()
Opération P ()
// ou WAIT
Début
InterdireInterruptions() ;
n <- n – 1
Si (n < 0)
Alors
Bloquer la tâche dans la file en _attente du sémaphore
Finsi
AutoristerInterruptions() ;
Fin
● Egalement appelée Wait (mais ne pas confondre avec Wait d’Unix)
● Conceptuellement cette primitive
 décrémente la valeur n du sémaphore courant
 bloque la tâche en file d’attente si cette valeur devient négative
 en_attente est la file des tâches bloquées par le sémaphore
Etude de l’opération V()
Opération V ()
// ou Signal()
Début
InterdireInterruptions() ;
n <- n + 1
Si (n <= 0)
Alors
Débloquer la tâche en tête de la file en_attente du sémaphore
Finsi
AutoristerInterruptions() ;
Fin
Maxime Augerd
Page 53
SE 2004
● Egalement appelée Signal (mais ne pas confondre avec Signal d’Unix)
● Conceptuellement cette primitive :
 incrémente la valeur n
 débloque la première tâche de la file d’attente en_attente si cette valeur est négative ou
nulle
● Débloquer une tâche c’est la rendre éligible
Utilisation des sémaphores
● La valeur initiale du sémaphore
 indique le nombre maximum de tâches pouvant faire appel à P() sans se bloquer
 donc dépend de la classe de problèmes à traiter
o 0 pour la synchronisation
o 1 pour l’exclusion mutuelle
o N pour une ressource réentrante à N entrées
● Le sémaphore est un outil permettant de gérer plusieurs types de problèmes
●q sd qsd
Sémaphore et exclusion mutuelle
SCHEMA section critique
● Pour gérer une section critique il faut créer un sémaphore initialisé à 1 (ici le sémaphore est
appelé mutex)
● La section critique à l’intérieur d’une tâche est alors encadrée par mutex.P() et mutex.V()
● Sa valeur initiale de 1 garantit l’exclusion mutuelle
Tous les processus qui veulent manipuler la même section critique manipulent le même sémaphore.
● Un sémaphore est un outil système partagé
● Si on veut gérer une même section critique entre plusieurs tâches
 il faut créer un seul sémaphore initialisé à 1
 et toutes les tâches concernées doivent faire appel aux opération P et V de ce sémaphore
● En revanche s’il y a plusieurs ressources critiques à gérer, il faudra créer autant de sémaphores
(initialisés à 1à que de ressources critiques.
Quand on est à l’intérieur d’une section critique, il peut y avoir des commutations. Ce sont
uniquement P() et V() qui sont non interruptibles.
SCHEMA SEMAPHORE ET EXCLUSION MUTUELLE
C – Synchronisation de tâches
Présentation du problème
● Un système transactionnel est non déterministe
 l’ordonnancement des tâches ne peut être prévu à l’avance car la charge du système est
variable
 le temps d’exécution d’une tâche est indéterminé car fonction de l’utilisateur et de
l’activité du système
● Conséquences :
 on ne peut pas faire d’hypothèses relatives au temps d’exécution d’une tâche
 pour imposer un ordre sur l’exécution des instructions de plusieurs tâches
interdépendantes, il faut les synchroniser
Synchroniser = je ne peux pas continuer une tâche tant qu’une autre n’est pas arrivée à un état
précis.
Maxime Augerd
Page 54
SE 2004
La synchronisation
● La synchronisation consiste à mettre en œuvre des mécanismes qui garantissent un certain ordre
d’exécution
 quelle que soit la charge du système
 quelles que soient les vitesses d’exécution des tâches
● Ainsi une tâche T1 est synchronisée avec une tâche T2, si son activité dépend d’un évènement
modifié par T2
● On peut généraliser ce raisonnement à n tâches
Les mécanismes
● Les mécanismes de synchronisation
 le blocage : la tâche devient éligible
 le déblocage : la tâche est à nouveau éligible
● On distingue généralement deux types d’action
 les actions directes : ce sont des primitives fournies par le système de type dort, bloque ou
réveille
 les actions indirectes : on utilise l’outil sémaphore et les opérations P() et V() assurent le
blocage ou le déblocage
SCHEMA LES MECANISMES
Synchronisation par sémaphores
● Dans l’exemple précédent, l’opération s.P()
 est placée dans T1 au point d’attente de l’action qui doit être réalisée par T2
 fait passer la valeur du sémaphore s à -1 donc bloque T1 en file d’attente
● Et l’opération s.V()
 est placée après la réalisation par T2 de l’action attendue
 incrémente la valeur du sémaphore s qui devient 0 ce qui débloque T1
● Ce principe peut s’étendre à plus de deux tâches
Exemple
● On considère l’expression suivante :
E = (a+b) * (c+d) – (e/f)
● On cherche à paralléliser l’évaluation de cette expression
● Les questions à se poser
 en combien de tâches peut-on décomposer ce calcul ?
 quelles sont les règles de précédence des tâches ?
 comment synchroniser les tâches, sachant qu’on ne peut connaître à l’avance le temps
d’exécution de chacune d’elles
● On considère ici trois tâches :
 T1 : assure l’évaluation de a+B
 T2 : assure l’évaluation de c+d
 T3 : assure l’évaluation de e/f
● T1 doit ensuite multiplier le résultat de T2 avec le sien puis retrancher le résultat de T3 pour
éditer R
● Synchronisation de l’activité de T1 sur les résultats fournis par T2 et T3 donc définition de 2
sémaphores s1 et s2 initialisés à 0
● Communication des résultats entre tâches par variables communes (t2 et t3)
● Ici il n’y a pas d’exclusion mutuelle car il n’y a pas de mise à jour par deux tâches en même
temps.
SCHEMA SOLUTION PROPOSEE
L’étreinte mortelle (ou fatale, c’est plus romantique, ou deadlock)
● L’étreinte mortelle (Dead Lock) ou interblocage
 situation dans laquelle deux tâches (ou plus) se bloquent réciproquement
 il faut alors tuer une des tâches cause du blocage, d’où perte d’informations
Maxime Augerd
Page 55
SE 2004
 prévention : difficile et coûteuse (algorithme du banquier)
● Pour éviter un interblocage, il ne faut pas faire d’appel à P() à l’intérieur d’une section critique
SCHEMA DE L’Etreinte MORTELLE
D – Communication inter tâches
Présentation
● Dans la programmation parallèle, les tâches doivent aussi coopérer en échangeant entre elles des
informations
● On parle de communication entre tâches
● Terme qui regroupe plusieurs mécanismes
 communication par évènement : les signaux
 communication par envoi d’information : les tubes et files de messages
 communication par partage de données : zones mémoire commune
Les mécanismes
● La communication par signaux
 permet à une tâche d’avertir de façon asynchrone une autre tâche
 la tâche qui reçoit le signal active alors un traitement approprié (handler)
 nécessite un protocole d’accord à l’avance (association d’un signal à un handler)
 comportement par toujours très stable
SCHEMA LES MECANISMES (communication par signal)
Maxime Augerd
Page 56
SE 2004
Téléchargement