Informatique Générale
Systèmes d'exploitation
(d'après Fabrice Huet, Wikipedia ... et bien
d'autres)
1
Qu'est-ce qu'un système d'exploitation ?
Il n’existe pas une unique définition pour un Système
d’Exploitation (Operating System - OS)
Pourtant plein sont connus : Windows, Linux,
Mac OS, Solaris, FreeBSD, Android ….
On peut dégager des éléments
C’est un programme
Il fournit des services aux autres programmes,
leur permet de s'exécuter et de communiquer
entre eux
Il masque la diversité matérielle
Il gère l’accès aux ressources matérielles
L’OS est un programme, donc écrit dans un langage de
programmation
Premiers OS écrits en assembleur, maintenant en C
(et en assembleur quand nécessaire)
Exemple Linux 2.6.27 : 6 399 191 lignes de code, 96.39% en
ANSI C, 3.32% en assembleur
2
L'OS est un programme
privilégié
L’OS est différent des autres programmes
C’est le premier à s’exécuter
Il bénéficie d’un accès privilégié au processeur
L’OS peut exécuter des instructions interdites aux autres
programmes
Notion de niveau de privilège (ring en x86)
Niveau 0 : OS, tous les droits
Niveau 3 : programme classique
L’OS, quand il existe, est vital : sans lui
Aucun programme ne peut s’exécuter
Aucun programme ne peut accéder aux ressources
S'il a un problème, la machine devient instable
Blue Screen of Death en Windows, Kernel Panic en Linux
Pas d’autre solution que de redémarrer
3
Utilisation
des
principaux
OS
(2012)
4
OS et distributions
On confond souvent l’OS et une distribution
Distribution : ensemble formé par un OS et des
logiciels
Exemple de distribution : Windows Vista, Windows 7,
Windows 8 ...
Linux Fedora, Linux Ubuntu …
L’OS est le programme qui
a l’accès privilégié
La calculatrice, le navigateur
distributions Linux (source
web … ne font en théorie http://blog.tuxforge.com)
pas partie de l’OS
5
OS et diversité des
matériels
Un OS doit s’exécuter sur un maximum de matériel
différent
Impossible d’avoir une version différente pour chaque
processeur, mémoire, carte vidéo …
Comment faire ?
Limiter la diversité en ayant du matériel normalisé :
norme USB 1.0, 2.0, …
Spécialiser l’OS en lui ajoutant des extensions pour
communiquer avec du matériel spécialisé
Pour cela, on a des pilotes (drivers)
extensions du système
d’exploitation qui lui
permettent de gérer un
périphérique
6
Accès aux ressources
Un programme passe par l’OS pour accéder à une
ressource, par exemple
demande de mémoire
demande de lecture/écriture sur un périphérique de
stockage
demande d’affichage
L’OS vérifie
que le programme a le droit (sécurité)
que la ressource est libre (graveur par exemple) ou
partageable (mémoire)
que l’accès à une ressource partagée est équitable
7
Notion d’utilisateur
Besoin de distinguer entre les personnes utilisant
une même machine
Sécurité
Confidentialité
Un OS supportant la notion d’utilisateur est dit
multi-utilisateur
Chaque utilisateur est identifié de manière
unique
Toute action/objet est associé à un utilisateur
Utilisateurs simultanés ou
se succédant dans le temps
8
Droits sur les fichiers
Principal intérêt de la notion d’utilisateur : restreindre
l’accès aux fichiers
Qui a le droit de lire, écrire un fichier
Qui a le droit d’exécuter un programme, de regarder un dossier
Règle de base : tout ce qui n’est pas autorisé est interdit
Unix :
Supporte 3 catégories : l’utilisateur, le groupe (e.g.
« Etudiants »), et le reste du monde, soit (user, group, all)
Assez grossier
Windows :
Gestion fine à base d’Access Control List (ACL)
inspiré de Multics, ancêtre de Unix, abandonné par Linux
possibilité de dire quel utilisateur a le droit de faire quoi
précisément (e.g. « Alice peut lire/écrire le fichier toto »)
Très (trop) complexe
9
Restrictions sur les
ressources
Possibilité de restreindre les ressources
utilisables par un utilisateur ou par un groupe
d'utilisateurs
Quelques exemples :
Limiter la quantité d’espace disque par utilisateur
(quota)
Limiter le nombre de processus (programmes en
cours d'exécution)
Limiter le nombre de connexions réseau
Limiter le nombre d'impressions ou de pages
imprimées
10
Super utilisateur
Un utilisateur a plus de droits que les autres
administrateur en windows
root en Unix/Linux
il a la charge de l’administration de la
machine
Modification/installation de logiciels
Maintenance
il peut tout faire
Lire les fichiers des autres utilisateurs sans autorisation
Terminer les programmes des autres utilisateurs
Utilisation prudente
ne pas utiliser l’ordinateur au quotidien en étant
super utilisateur
11
Résumons
L’OS est un programme critique
qui sert aux autres programmes
qui a le contrôle sur les ressources du système
qui applique des règles de contrôle d’accès
Mais si c’est un programme,
il s’exécute sur le CPU
qui le lance ?
Comment d’autres programmes peuvent-ils
s’exécuter ?
12
Basic Input Output System -
BIOS
Programme élémentaire (firmware) contenu dans la
mémoire de la carte-mère (mémoire rémanente -
ROM)
Le BIOS a un rôle essentiel pour le fonctionnement de
la carte mère :
Il initialise tous les composants de la carte mère, du chipset
et de certain périphériques
Il identifie tous les périphériques internes et externes qui lui
sont connectés
Si cela n'a pas déjà été fait il initialise l'ordre de priorité des
périphériques d'entrée (choix de l'ordre modifiable par
l'utilisateur)
Il démarre le système d'exploitation présent sur
le premier périphérique disponible (via le
chargeur d'amorçage – boot loader)
13
Unified Extensible Firmware
Interface (UEFI)
A tendance à remplacer le BIOS (Mac OS depuis Tiger,
Windows 8, Linux ...)
Vise à dépasser certaines limites du BIOS
boot à partir de disques plus grands
autorise beaucoup plus de partitions que le BIOS
gestion intégrée du réseau, du graphique et de
plusieurs systèmes d'exploitation sur une même
machine
un démarrage plus sûr (en particulier contre les
virus de boot)
A mi-chemin entre un firmware et un système
d'exploitation
14
Processus
15
Notion de Processus
Processus : programme en cours d’exécution
Composé :
de ses instructions
de ses données (variables, liste des ressources
utilisées…)
de l’état du processeur
La notion de processus est un service offert par l’OS
les données composant un processus varient suivant
les OS
Un processus a toujours besoin de deux ressources
au moins
le CPU et la mémoire
16
CPU partagé
Quand il peut y avoir plusieurs processus en cours
d’exécution, on parle de multitâches
Il n’y a souvent qu’un CPU par machine 1
mais tous les processus en ont besoin
et l’OS aussi en a besoin
Considérons le CPU comme une ressource
chaque processus devrait avoir un peu de cette ressource
si chaque processus utilise un peu le CPU par petites
tranches de temps, on aura l’impression que tout le
monde l’a (effet dessin animé)
Le passage d’un processus à un autre est appelé
changement de contexte :
Opération relativement coûteuse
1
le problème est analogue si plusieurs processus doivent se partager un
même coeur
17
Multitâche collaboratif
Comment partager le CPU ?
Solution simple :
l’OS donne le CPU a un processus
le processus utilise le CPU
quand il a fini, il rend le CPU à l’OS ou à un autre
processus
Facile à mettre en œuvre mais
Problème si un processus ne rend pas le CPU
(volontairement ou bug)
18
Multitâche préemptif
Il faut pouvoir limiter le temps que passe un
processus sur le CPU
chaque processus a le CPU pour une durée x
s'il termine avant la durée x, il rend le CPU à
l’OS
sinon le processus est interrompu et l’OS est
remis sur le CPU
Ok, mais remis comment ?
On utilise un mécanisme du CPU appelé
interruption
19
Notion d'interruption
Une interruption est un signal indiquant un
évenement nécessitant une action
Interruption logicielle
Signal envoyé par un logiciel
Interruption matérielle
Signal envoyé par du matériel (clavier, souris, carte
réseau, horloge, …)
Quand une interruption est levée, elle arrive au
CPU
Le CPU doit la traiter
Il exécute un programme (fonction) appelé
gestionnaire d'interruption (interrupt handler)
C’est l’OS qui enregistre son propre code comme
interrupt handler
20
Multitâche préemptif - suite
Une horloge génère des interruptions régulières
100-1000 Hz
L’OS place un handler pour les interruptions de
l’horloge
toutes les 1-10 ms, le CPU exécute ce
handler
donc l’OS est remis sur le CPU même si un
processus ne l’avait pas rendu
L’OS peut ensuite décider quel processus aura
le CPU
c’est l'ordonnancement (scheduling)
21
Ordonnancement et états
de processus
Question : le processus P vient d’avoir le CPU,
quel sera le suivant ?
Une partie de l’OS est chargé de cette décision :
l'ordonnanceur (scheduler)
Dans un système, chaque processus est dans un
certain état, variant plus ou moins suivant l’OS ; par
exemple :
Running : actuellement sur le CPU
combien de running dans un système ?
Ready : attend le CPU pour continuer
Blocked : attend la fin d’une entrée/sortie
22
Transitions d’états
Running 1
Blocked
3 2
Ready
1. Début I/O
2. Fin I/O
3. Sélection par le scheduler
4. Selection d’un autre processus par le scheduler
23
Principes pour
l'ordonnancement
Objectif possibles pour déterminer quel processus aura le CPU :
Équité : chaque processus doit avoir la même durée de CPU
Équilibre : maximiser l’utilisation du système (alterner les I/O
et le CPU)
Temps de réponse : répondre rapidement aux demandes
L’utilisateur clique sur une fenêtre, rien ne se passe tant
que le processus qui a créé la fenêtre n’a pas le CPU
Proportionnalité : être proche des attentes de l’utilisateur
Les utilisateurs ont souvent une idée de la durée d’une
opération (click = rapide)
Contraintes temps réel
Forte: il faut garantir que dans une durée x, le processus P
aura eu le CPU
Faible : ce serait bien que P ait le CPU avant une durée x
24
Scheduling Round-Robin
À chaque processus est associé un quantum
Durée maximale durant laquelle il peut s’exécuter
S'il atteint son quantum, il est préempté
S'il est bloqué avant, un autre processus est mis à sa place
Quelle est la bonne valeur pour le quantum?
Quantum long : meilleur efficacité
Quantum court : meilleur réactivité
En général entre 20 et 50 ms
Exemple simple :
P1 a besoin du CPU pendant 25ms, P2 pendant 20ms,
P3 pendant 30ms, quantum de 15ms, pas d’I/O :
P1 P1 P1 P2 P2 P2 P3 P3 P3 P1 P1 P2 P3 P3 P3
0 5 10 15 20 25 30 35 40 45 50 55 60 65 70
25
Notion de priorité
Limites du Round Robin
Il peut y avoir beaucoup de processus en attente
Dans ce cas, certains n’auront pas le CPU avant plusieurs
secondes
Tous les processus sont-ils égaux ?
Un processus qui joue de la musique a besoin du CPU
régulièrement
Pour un processus qui affiche l’heure, ce n’est pas
grave s'il n’a pas le CPU de suite
Des processus devraient avoir le CPU plus souvent
que d’autres
Donnons leur une plus grande priorité
La priorité est souvent un nombre entier ; 20 à -20 pour
Linux
Les processus sont organisés en file par priorité
26
Round-Robin avec priorité
Le scheduler regarde la file de plus haute priorité
Si processus en attente, il lui donne le CPU
Sinon il passe à la file de priorité plus basse
Avantage
Les processus prioritaires ont le CPU
Problème
Risque de famine pour les processus de basse priorité
Le problème vient d’une priorité statique : tant qu’un
processus haute priorité veut le CPU, il l’a
Il faudrait faire varier la priorité
Pour favoriser les processus basse priorité, mais pas trop
Toujours avoir plus de temps CPU pour les processus de
priorité élevée
27
Ordonnancement avec
priorité dynamique
On donne à chaque processus
Une priorité de base et une priorité dynamique
Les processus sont organisés en file de même priorité dynamique
Objectif
Donner du CPU à ceux qui n’en ont pas eu
Ne pas en donner trop à ceux qui en consomment déjà beaucoup
Donner du CPU à ceux qui en ont besoin
Favoriser les processus bloqués pour quand ils se débloqueront
Algorithme
Analogue au Round Robin avec priorité statique, ajoute juste une
étape de calcul de priorité
Si un processus consomme tout son quantum de temps, alors
sa priorité diminue
Si un processus devient bloqué, alors sa priorité augmente
Globalement très difficile à faire correctement
28
Exemple : Windows XP
6 classes de priorité (realtime, high, above normal,
normal, below normal, idle)
32 priorités possibles
Certaines sont dites priorité dynamiques
Le système peut les augmenter/diminuer
Augmente si le processus appartient à une fenêtre qui
vient de passer en premier plan
Un processus qui atteint la fin de son quantum a sa priorité
courante diminuée de 1, jusqu’à atteindre sa priorité
initiale
Un processus qui n’a pas eu le CPU depuis longtemps
passe en priorité 15 pour 2 quanta
15 est le max des priorités dynamiques
Retour à son ancienne priorité courante ensuite
Quantum 30ms pour un XP Pro, 120ms pour un XP
Serveur
29
Gestion de la
mémoire
30
Gestion de la mémoire
L’OS gère la mémoire
Il en utilise une partie pour son fonctionnement
Il décide ce qu’il donne à chaque processus
La façon dont l’OS gère la mémoire est liée au
CPU
Support par le CPU (MMU) ?
Les processeurs
empiètent de plus
en plus sur les
fonctionnalités des OS
La protection mémoire est assurée en partie par
le CPU
31
Pagination
Intel introduit la pagination dans le 80386
La mémoire est découpé en blocs, appelés pages
4Ko (x86) ou 4Mo (x86 avec pagination étendue)
L’OS ne peut pas donner moins qu’une page à un
processus
Même si il n’a besoin que de quelques octets
Le processus manipule des adresses linéaires
(virtuelles) : on parle de mémoire virtuelle
La MMU les transforme en adresses physiques
Utilisation de tables de pagination, maintenues
par l’OS
32
Pagination
Adresse linéaire Adresse
(memoire physique
virtuelle) (mémoire réelle)
Programme MMU
Table de
Pagination
33
Allocation mémoire
Un processus ayant besoin de mémoire le demande à
l’OS
Qui peut accepter ou refuser
Quand accepter?
Idéalement, il faut accepter le plus souvent possible
Permet d’avoir plein de processus, et donc utiliser au
mieux l’ordinateur
La mémoire est implicitement rendue lorsque le processus
termine, ou qu'il en rend explicitement une partie
Allocation
L’allocation consiste à marquer la mémoire comme
appartenant au processus
Pas de nettoyage (on ne met pas la zone à 0), sauf demande
explicite
34
Allocation différée
Si l’OS accepte une demande d’un processus,
doit-il lui donner la mémoire de suite ?
Pas forcément car un processus :
n’utilise pas toujours la mémoire qu’il demande (il a
trop demandé par rapport à ses besoins)
n’utilise pas immédiatement la mémoire qu’il
demande (principe de localité)
L’OS fait de l’allocation différée
Il répond oui au processus, mais ne fait rien
Quand le processus utilise la mémoire, la MMU râle,
l’OS est appelé, et il fait l’allocation
35
Mémoire Virtuelle
Grâce à la pagination, chaque processus voit
toute la mémoire comme si elle était à lui
Mais il n’a le droit d’utiliser que les morceaux qu’il a
demandé à l’OS
Que se passe-t-il si il n’y a plus de mémoire
physique libre ?
L’OS pourra refuser les demandes d’un processus
Mais pourquoi se limiter à la mémoire physique ?
On ajoute à la mémoire physique des disques
Zone de swap (ou pagefile)
Bien sûr ils sont beaucoup plus lents que la RAM
On essaie de maintenir en RAM le maximum
36
Swap Mémoire
Mémoire
physique
virtuelle
Programm
e
Granularité : on peut mettre dans le swap
Le processus complet
Seulement une partie de sa mémoire, celle qu’il n’utilise
pas ou peu
L’OS décide quand mettre dans le swap (swap-in)
Quand un processus accède à une zone mémoire dans
le cache, elle est remise en RAM (swap-out)
Si l’OS n’utilise pas le swap judicieusement, très
mauvaises performances (Swap Storm)
Quelle quantité de Swap faut-il avoir ? Suffisamment
37
Surengagement (overcommit)
Combien de mémoire l’OS peut-il allouer ?
À priori, autant que RAM + Swap
Mais ça limite ce qu’il est possible de faire
Si un processus demande beaucoup de mémoire, il
va bloquer tous les autres
Un processus qui demande beaucoup de mémoire
mais ne l’utilise pas va gêner les autres
L’OS se comporte comme une banque
Il promet (beaucoup) plus de mémoire
que ce qu’il a de disponible
Dans la majorité des cas, pas de soucis
(allocation différée et principe de localité)
Mais si tout le monde a besoin de la
mémoire demandée, alors c’est la faillite…
38
Dénouer le noeud du
surengagement
Quand un processus réclame la mémoire promise
par l’OS, l’OS doit en trouver, il l’avait promis…
Que faire s'il n’y en a plus ?
Solution : arrêter (tuer) un processus
Lequel ?
Celui qui vient de demander ? … mais il n’est pas
responsable
Il vaut mieux tuer un processus tel que le problème
sera résolu
Quelqu’un qui consomme beaucoup de mémoire
Et qui ne sert pas à grand chose
Comment est choisie la victime ? Voir par exemple
http://linuxdevcenter.com/pub/a/linux/2006/11/30/linux-out-of-memory.html?
page=2
39
Protection mémoire
L'OS est prioritaire et n’a pas de limite, sauf
physique, pour l'allocation mémoire, ni de
restriction pour l'accès en mémoire
Mais si un processus peut lire/écrire la mémoire
d’un autre processus
pas de confidentialité (un programme peut aller lire
votre numéro de carte bleue)
pas de stabilité (un programme peut modifier la
mémoire d’un autre et le faire planter)
Dans un OS multitâche, il est vital d’avoir une forme de
protection mémoire
Est-ce que l’OS peut assurer la protection mémoire ?
40
OS et protection mémoire
L'OS donne la mémoire aux processus
Donc il sait qui a quoi
Quand un processus accède à de la mémoire, l’OS
sait si c’est la sienne ou celle d’un autre
Mais, ça arrive alors que le processus a le CPU, pas
l’OS, comment l’OS pourrait-il savoir ?
L’OS a recours à la Memory Management Unit
(MMU)
Lors du changement de processus sur le CPU (aussi
dit changement de contexte), l’OS indique à la MMU
les zones mémoire appartenant au processus
Si le processus essaie d’accéder à une autre zone
La MMU génère une interruption
Un interrupt handler de l’OS est exécuté
En général, le processus est tué (segfault)
41
Fragmentation mémoire
Souvent un programme a besoin que la
mémoire soit attribuée de manière contigüe
Exemple : dans un tableau, une donnée en case i+1
est en mémoire à coté de la donnée de la case i
Mais le garantir ne serait pas efficace. Par
exemple
Un programme réclame 200Mo
Il y a 200Mo de libre, mais en plusieurs morceaux.
Que faire ? Défragmenter la mémoire ?
Efficace dans quelques rares cas, trop coûteux la
plupart du temps
Solution : séparer la mémoire vue par le
processus de la mémoire physique
D'où l'intérêt de la mémoire virtuelle
42
Et si l'OS perd la tête ?
L’OS protège les processus entre eux
Mais il ne se protège pas contre lui-même
L’OS contrôle tout, donc il doit
pouvoir écrire/lire où il veut
S'il écrit dans la mémoire d’un
processus, la MMU va le lui dire
Que faire si la MMU râle ?
Vérifier si l’action est volontaire
Si oui, on ignore la MMU
Si non, on a un problème, l’OS
fait n’importe quoi… suicide !
http://aedena.over-blog.com
Blue Screen of Death ou Kernel Panic
43
Machines virtuelles -
virtualisation
La virtualisation fait fonctionner plusieurs OS
simultanément sur une même machine
ne pas confondre avec le dual-boot, qui permet d'utiliser
plusieurs OS sur une même machine, mais 1 seul à la fois
ni avec les machines virtuelles (par ex. la Java Virtual Machine –
JVM ), qui sont des logiciels émulant une machine abstraite (par
ex. le Java Runtime Environment - JRE), pour permettre aux
compilateurs de ne produire qu'un seul code « exécutable » sur
des architectures variées (du smartphone au supercalculateur :
write once, run anywhere)
Nombreux intérêts
installation, tests, développements, cassage et possibilité de
recommencer sans casser le système d'exploitation hôte (TP
système)
sécurisation et/ou isolation d'un réseau (cassage malveillants des
systèmes d'exploitation virtuels mais pas des systèmes
d'exploitation hôtes, invisibles pour l'attaquant, ...)
allocation dynamique de la puissance de calcul en fonction des
besoins
...
44