0% ont trouvé ce document utile (0 vote)
4 vues45 pages

Cours

Le document présente une introduction au système d'exploitation, essentiel pour le fonctionnement des ordinateurs, et retrace l'histoire de l'informatique depuis les premiers ordinateurs jusqu'à la micro-informatique moderne. Il aborde également les principes de fonctionnement des ordinateurs, y compris le codage de l'information, les opérations de base et l'architecture de Von Neumann. Enfin, il met en lumière l'importance de l'évolution technologique dans la démocratisation de l'informatique et l'impact des micro-ordinateurs sur les entreprises et les particuliers.

Transféré par

Joseph Oloni
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues45 pages

Cours

Le document présente une introduction au système d'exploitation, essentiel pour le fonctionnement des ordinateurs, et retrace l'histoire de l'informatique depuis les premiers ordinateurs jusqu'à la micro-informatique moderne. Il aborde également les principes de fonctionnement des ordinateurs, y compris le codage de l'information, les opérations de base et l'architecture de Von Neumann. Enfin, il met en lumière l'importance de l'évolution technologique dans la démocratisation de l'informatique et l'impact des micro-ordinateurs sur les entreprises et les particuliers.

Transféré par

Joseph Oloni
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

INTRODUCTION

Pour qu’un ordinateur soit capable de faire fonctionner un programme informatique


(appelé parfois application ou logiciel), la machine doit être en mesure d’effectuer un
certain nombre d’opérations préparatoires afin d’assurer les échanges entre le processeur,
la mémoire, et les périphériques.

En informatique, un système d'exploitation (souvent appelé OS de l'anglais Operating


System) est un ensemble de programmes qui dirige l'utilisation
des ressources d'un ordinateur par des logiciels applicatifs. Il reçoit des demandes d'utilisation
des ressources de l'ordinateur ressources de stockage des mémoires (par exemple des accès à
la mémoire vive, aux disques durs), ressources de calcul du processeur central, ressources
de communication vers des périphériques ou via le réseau de la part des logiciels applicatifs.
Le système d'exploitation gère les demandes ainsi que les ressources nécessaires évitant les
interférences entre les logiciels.

Le système d'exploitation est le logiciel :

 principal car il permet à l'ordinateur et aux programmes de fonctionner,


 qui se lance en second après le firmware (programme d'amorçage ou bootloader en
anglais) exécuté lors de la mise en marche de l'ordinateur2.

Il offre une suite de services généraux facilitant la création de logiciels applicatifs et sert
d'intermédiaire entre ces logiciels et le matériel informatique. Un système d'exploitation
apporte commodité, efficacité et capacité d'évolution, permettant d'introduire de nouvelles
fonctions et du nouveau matériel sans remettre en cause les logiciels.
CHAPITRE 1 : Histoire de l’informatique

Dans ce chapitre nous allons aborder l’évolution de l’informatique jusqu’à ce jour.

I- Les premiers ordinateurs

Maintenant que l'électronique a fait des progrès suffisants et que les premiers calculateurs ont
fait leurs preuves, les ordinateurs vont pouvoir apparaître, nés du besoin de réaliser des
opérations de plus en plus complexes.

L’invention de l’ordinateur est la concrétisation du désir de l’Homme d’élaborer un


calculateur universel, idée née en Grande Bretagne au XXè siècle grâce à Charles Babbage et
perfectionnée ensuite par Alan Mathison Turing en 1936. C’est le perfectionnement des
nombreuses techniques, en particulier dans le domaine de l’électronique, qui permet ainsi en
1943 d’aboutir à la conception du véritable premier ordinateur.

Entre 1834 et 1837, un mathématicien anglais du nom de Charles Babbage imagine les
concepts de la première machine à calculer programmable. Inventeur visionnaire, il s’appuie
sur les travaux de Blaise Pascal et jette les bases de ce que deviendront par la suite les
premiers ordinateurs, avec le principe de programmation par cartes perforées que l’on
retrouve déjà pour la production automatisée de musique par exemple. Il ne parvient
malheureusement pas à mettre son idée en application, les technologies de l’époque étant
encore très limitées, et sa machine différentielle ne verra jamais le jour.

Il faut alors attendre près d’un siècle pour qu’un autre mathématicien anglais du nom d’Alan
Turing ouvre une voie décisive dans l’histoire de la science informatique. Il publie en 1936
son article “On Computer Numbers with an Application to the Entscheidungsproblem” qui
permettra la construction des machines de Turing qui fédèrent les concepts d’ordinateur, de
langage de programmation et de programme informatique.

L’ère des ordinateurs modernes doit beaucoup aux avancées majeures effectuées pendant la
Seconde Guerre mondiale. Ainsi, l’invention des circuits électroniques, tubes à vide,
condensateurs et relais remplacèrent la génération de composants mécaniques et le calcul
numérique remplaça le calcul analogique. Les ordinateurs conçus et produits à cette époque
forment ce que l’on appelle la première génération d’ordinateurs.

De 1937 à 1944 se succédèrent ainsi de nombreux appareils :

- Le model K (conçu dans une cuisine)


- Les Z-séries
- L’ABC (Atanasoff Berry Computer)
- Le Complex Number Computer
- Et enfin le Harvard Mark I

Pendant la seconde guerre mondiale, le Royaume Uni fit de grands efforts à Bletchley Park
pour déchiffrer les codes des communications militaires allemands. Le principal système de
chiffrement allemand, Enigma fut attaqué avec l’aide de machines appelées bombes, créées
par les services secrets polonais et améliorées par les britanniques.

Alain Mathison Turing ouvre la voie de la création de l’ordinateur programmable dès 1936,
en publiant son article. Il décrit sa propre machine dite de Turing, premier calculateur
universel programmable, et invente au passage les concepts de programmation et de
programme. Ces machines permettant de trouver les clés de chiffrement. Les allemands
créèrent également une autre série de systèmes de chiffrement très différents d’Enigma. Afin
de casser ces systèmes, le professeur Max Newman fabriqua le Colossus ou la bombe de
Turing qui fut démonté et caché à cause de son importance stratégique.

Passons maintenant à l’invention de l’ordinateur moderne. Il faut attendre 1946 et l’ENIAC


(Electronic Numerical Integrator and Computer) conçu par Presper Eckert et John William
Mauchly pour voir apparaitre le premier ordinateur entièrement électronique construit pour
être Turing-complet. Puis vinrent à partir de 1948 les machines à architecture de Von
Neumann (contrairement à toutes les machines précédentes, les programmes étaient stockés
dans la même mémoire que les données et pouvaient ainsi être manipulés comme des
données. La première machine utilisant cette architecture &tait le Small-Scale Experimental
Machine (SSEM) construit à l’université de Manchester en 1948. Après cela, IBM lance son
modèle 701 en 1952 puis toute une série d’évolution qui mènera aux ordinateurs dits de
seconde génération (1956), troisième génération (1963) et enfin de quatrième génération
(1971) qui vit l’intention du microprocesseur et la course interminable vers la miniaturisation
et la montée en puissance de calcul. Ordinateur de bureau, PC portables, et multiples
déclinaisons high tech (cartes graphiques, smartphone, tablettes tactiles…), font aujourd’hui
partie du quotidien grâce à cette invention, dont l’intelligence artificielle est le dernier avatar.

II- La micro-informatique
La micro-informatique désigne ce qui a rapport avec les micro-ordinateurs. Ce dernier terme
fut introduit par les développeurs du Micral (REE), pour désigner dans leurs brevets le
premier ordinateur ayant un microprocesseur comme unité centrale [réf. nécessaire], possibilité
ouverte par les progrès en matière de circuits intégrés.
Le préfixe micro- tient au fait qu'à cette époque, il existait déjà depuis les années 1940
des ordinateurs centraux qui tenaient dans de vastes salles machines et à partir de 1965
des mini-ordinateurs. Ce préfixe évoque le microprocesseur au cœur de la création et de la
commercialisation de micro-ordinateurs.
Dans le contexte de l'époque, la désignation du micro-ordinateur sous l'appellation
« ordinateur personnel » est à ce titre très précise. En effet, l'ensemble du micro-
ordinateur, c'est-à-dire l'unité processeur, la console clavier-écran et ses unités
périphériques (disques, imprimante), tenait sur une table et n'était à la disposition que d'un
utilisateur à la fois. En France, au début des années 1980, le terme « ordinateur
individuel » était aussi employé ; c'est d'ailleurs resté comme titre d'un magazine
informatique.
Depuis la fin des années 1970 jusqu'au début du XXIe siècle, la micro-informatique a eu
pour effet d'introduire l'informatique dans les petites et moyennes entreprises comme chez
les particuliers. Cette démocratisation aurait été considérablement ralentie si IBM avait
breveté les composants de son Personal Computer. En effet, l'apparition de machines
compatibles facilement extensibles et le marché de masse ont permis d'avoir des
composants génériques toujours plus puissants et bon marché. Cela a précipité la fin des
ordinateurs centraux et des mini-ordinateurs qui sont remplacés par des fermes de serveurs
voire par des grilles de calcul massivement parallèles ; et enfin cela a souvent permis
l'éclosion d'une industrie locale du logiciel dont la société Microsoft est le plus bel
exemple.
CHAPITRE 2 : Architecture des ordinateurs
I- Principe de fonctionnement d’un ordinateur
A- Le codage de l’information

L’information est représentée dans la mémoire de l’ordinateur par un bit (Binary Digit
généralement noté 0 et 1). Le système regroupant les deux valeurs est appelé système binaire
et permet de représenter un nombre, un caractère, les caractéristiques d’un pixel (point d’une
image), les caractéristiques d’un son et un code binaire. Une des fonctions des interfaces entre
l’unité centrale et les organes de communication Homme/machine consiste précisément à
traduire la représentation compréhensible par l’Homme (système décimal) en représentation
compréhensible par la machine (système binaire) et vice-versa.

 Représentation de l’information numérique

L’information numérique est représentée soit dans le système décimal (système décimal), soit
dans le système binaire (système de la machine), soit dans un système intermédiaire (système
octal ou hexadécimal)

- Passage du système décimal en système binaire

La conversion d’un entier naturel décimal (base 10) en binaire (base 2) se fait en procédant à
une division euclidienne successive de ce nombre et des quotients par 2 jusqu’à obtention de
zéro (0) comme quotient. Le nombre binaire est une suite des restes (0 et 1) en lisant du bas
vers le haut.

- Passage du système binaire en système décimal

La conversion d’un nombre entier naturel binaire en décimal se fait en suivant la formule :
(bnbn-1…b2b1b0)2 = b0*20+…bn*2n.

- Passage du système binaire en système octal (hexadécimal)

Le système octal est constitué des digits 0,1,2,3,4,5,6,7 et le système hexadécimal des digits
0,1,2,3,4,5,6,7,8,9,A (pour 10), B (pour 11), C (pour 12), D (pour 13), E (pour 14), F (pour
15).
La conversion d’un nombre binaire en octal (hexadécimal) se fait en regroupant par trois
(quatre) de la droite vers la gauche, les digits binaires pour en faire un digit octal
(hexadécimal).

- Passage du système octal (hexadécimal) au système binaire

La conversion d’un nombre entier naturel octal (hexadécimal) se fait en remplaçant chaque
digit octal (hexadécimal) par trois (quatre) digits binaires.

BASE 8 BASE 16

8 = 23 donc le binaire sur trois positions. 16 = 24

000 = 0 0000 = 0

001 = 1 0001 = 1

010 = 2 0010 = 2

011 = 3 0011 = 3

100 = 4 0100 = 4

101 = 5 0101 = 5

110 = 6 0110 = 6

111 = 7 0111 = 7

1000 = 8

1001 = 9

1010 = A

1011 = B

1100 = C
1101 = D

1110 = E

1111 = F

Application
1-

- Convertir en base 16, 8 et 2 les nombres suivants :


a) 59 b) 34 c)77
- Trouver l’équivalent décimal des nombres entiers ci-après :
a) (43)8 b) (1E3C)16 c) (11001)2
- Trouver l’équivalent binaire des nombres suivants :
a) (407)8 b) (2A3E)16

2-
Soit la combinaison binaire suivante : (0101010101101110001000000110000101110011)2
Elle représente un message envoyé par un jeune étudiant à ses amis après avoir étudié à
l’école le cours sur les combinaisons binaires. Sur ce fait un de ses camarades vient te voir
pour que tu l’aides à comprendre ce message.
Après avoir décodé ce message, donnez les équivalents de ces caractères dans les bases 10 et
8.

3-
Après les examens de fin d’année, l’Office du BAC s’apprête à donner les résultats. Dans le
sourci de ne préserver les résultats jusqu’à leur délibération et d’éviter les fuites de données,
l’Office du BAC recrute un jeune étudiant en fin de formation pour le codage des résultats.
La secrétaire, étant parent d’un candidat et impatiente de connaitre le résultat de son fils, vous
amène cette combinaison binaire retrouvée devant le nom de son fils et qui signifie s’il a
échoué ou pas.
Voici le code (0100000101000100010011010100100101010011)2
Aidez-la à comprendre ce message afin de connaitre le résultat de son fils.
B- Les opérations de base

L'arithmétique des ordinateurs est le domaine de l'informatique qui s'intéresse aux


opérations de base du calcul sur ordinateur. Parmi les questions qui relèvent de l'arithmétique
des ordinateurs, on peut citer la représentation des nombres, notamment des entiers et des
nombres en virgule flottante, la manière d'effectuer les opérations arithmétiques de base
(addition, multiplication...) sur ces représentations, aussi bien en matériel qu'en logiciel, ou
encore le calcul approché de fonctions telles que les fonctions trigonométriques.
L'arithmétique des ordinateurs étudie ces opérations du point de vue notamment de l'efficacité
en termes de temps de calcul et de consommation énergétique, de la fiabilité et de la
précision.

II- Le matériel
A- L’architecture de Von Neumann
L’architecture dite architecture de von Neumann est un modèle pour un ordinateur qui
utilise une structure de stockage unique pour conserver à la fois les instructions et les données
demandées ou produites par le calcul. De telles machines sont aussi connues sous le nom
d’ordinateur à programme enregistré. La séparation entre le stockage et le processeur est
implicite dans ce modèle.

Cette architecture est appelée ainsi en référence au mathématicien John von Neumann qui a
élaboré en juin 1945 la première description d’un ordinateur dont le programme est stocké
dans sa mémoire.

Alan Turing, John von Neumann ainsi que John William Mauchly et John Eckert (pendant
leurs travaux sur l’ENIAC), ont utilisé ce concept indépendamment.

L’architecture de von Neumann décompose l’ordinateur en 4 parties distinctes :

- l’unité arithmétique et logique (UAL ou ALU en anglais) ou unité de traitement : son


rôle est d’effectuer les opérations de base. Il est divisé en trois (3) parties à savoir : les
registres qui sont des unités de stockage, les circuits de l’UAL qui effectuent les
opérations et les voies de circulation dans l’UAL qui constituent un bus de
commandes et de données.
- l’unité de contrôle, chargée du « séquençage » des opérations. En d’autres termes,
elle permet de chercher dans la mémoire l’instruction suivante d’un programme,
décoder et déterminer ce qui doit être fait, envoyer les bonnes commandes à l’UAL, la
mémoire et les contrôleurs d’entrée sortie, mémoriser le résultat
- la mémoire qui contient à la fois les données et le programme qui indiquera à l’unité
de contrôle quels sont les calculs à faire sur ces données. La mémoire se divise entre
mémoire volatile (programmes et données en cours de fonctionnement) et mémoire
permanente (programmes et données de base de la machine) ;
- les dispositifs d’entrée-sortie, qui permettent de communiquer avec le monde
extérieur.

En traitant les instructions de la même façon que les données, un ordinateur qui a un
programme stocké en mémoire peut facilement modifier les instructions. Une raison
importante ayant induit une telle possibilité était le besoin pour un programme d’incrémenter
ou modifier le champ adresse des instructions (pour faire des boucles par exemple). Cette
raison est devenue moins importante avec l'apparition de l’utilisation de registres d’index et
de l’adressage indirect en tant que caractéristique standard des processeurs.

L’architecture actuelle des ordinateurs rend inutile la modification à faible échelle des
instructions du programme — son « code » — car cela rendrait inefficaces les techniques de
gestion de l’antémémoire et du pipeline dans le processeur. Cette pratique est donc à ce jour
obsolète. Bien sûr, à une plus grande échelle, la possibilité de traiter des instructions de la
même manière que des données est ce qui permet l’écriture de compilateurs. C’est aussi une
caractéristique exploitée par les virus lorsqu’ils ajoutent une copie de leur propre code dans
un programme existant. Le problème de la copie de code non autorisée peut être évité par
l’utilisation d’un système de protection de la mémoire et, en particulier, par le gestionnaire de
la mémoire virtuelle.

Figure : Schéma de

l’architecture de

Neumann
B- Le processeur

Le processeur est le cerveau de l’ordinateur. C’est un composant électronique qui n’est autre
que le cœur pensant de l’ordinateur. Le CPU (pour Central Processing Unit en anglais) est
composé de deux parties de base à savoir : l’Unité de Contrôle et de Commande (UCC) et
l’Unité Arithmétique et Logique (UAL).

Le processeur ou CPU (Central Processing Unit) est le composant de votre ordinateur


qui exécute les instructions qui lui sont données par votre système d’exploitation
(Windows). Quand vous exécutez un logiciel, décompressez une archive ZIP ou regardez une
vidéo en haute définition, vous faites travailler en priorité le processeur. Pour répondre à vos
demandes les plus exigeantes, le processeur peut être doté de plusieurs cœurs.

Qu’est-ce qu’un cœur ?


Un processeur standard possède un cœur (on dit qu’il est single-core). Un processeur avec
un seul cœur ne peut traiter qu’une seule instruction à la fois, une instruction étant une tâche
que l’on demande au processeur d’exécuter : convertir une vidéo, compresser des fichiers
volumineux, exécuter un logiciel, etc.
Plusieurs instructions peuvent être traitées par le cœur d’un processeur mais ce sera toujours
en série, c’est-à-dire une instruction à la fois. Avant l’apparition des processeurs multi-
cœurs, on avait l’impression que les processeurs avec un seul cœur étaient multi-tâches
tellement ils passaient d’une instruction à une autre rapidement mais il n’en était rien.
Qu’est-ce qu’un processeur multi-cœurs ?
Un processeur multi-cœurs est composé de deux ou plusieurs cœurs indépendants, chacun
étant capable de traiter des instructions individuellement. Un processeur dual-core contient
deux cœurs, un processeur quad-core quatre cœurs, un processeur hexa-core six cœurs...

Sur la représentation graphique ci-contre, on distingue bien les quatre cœurs du processeur
Intel Core i7-2600K :

Circuit intégré (die) du processeur Intel Core i7-2600K

A quoi peut me servir plusieurs cœurs ?


Un processeur multi-cœurs permet à l’utilisateur d’exécuter plusieurs tâches en même
temps sans subir de ralentissements ! Autrement dit, les cœurs sont utiles si vous utilisez
plusieurs logiciels à la fois. Quand un programme (un logiciel de retouche photo par exemple)
est en cours d’exécution et traité par un cœur, vous pouvez solliciter un autre cœur pour
utiliser votre navigateur Web ou écrire un document, sans subir de ralentissements.
Avoir plusieurs cœurs est aussi utile lorsque vous utilisez un logiciel qui peut utiliser plus
d’un cœur. En effet, la majorité des programmes est conçue pour n’utiliser qu’un seul et
unique cœur. Un logiciel qui est compatible avec le multi-cœurs fonctionne lui beaucoup
plus rapidement puisqu’il peut exécuter plusieurs instructions en même temps. C’est le cas
notamment des logiciels de retouche photo mais aussi certains jeux vidéo.
Si vous n’utilisez votre ordinateur que pour consulter vos mails ou regarder des vidéos, vous
n’avez pas vraiment besoin d’un processeur avec beaucoup de cœurs, un double-cœur
suffira alors largement.
Les cœurs sont-ils révélateurs de la puissance d’un processeur ?
Oui, mais ce n’est pas le seul indicateur ! Le nombre de cœurs est certes le premier
indicateur de la puissance d’un processeur mais il ne faut pas se focaliser uniquement sur
cette donnée. Nous allons voir dans la suite de ce dossier qu’il faut regarder d’autres
caractéristiques, notamment chez les processeurs Intel Core : la fréquence, la mémoire
cache, les technologies utilisées…

C- Les Mémoires

En Informatique, nous désignons par mémoire tout composant électronique capable


d’enregistrer, conserver et restituer les données. Et nous en distinguons deux grandes
catégories, notamment la mémoire centrale et la mémoire de masse.

Mémoire Centrale

La mémoire centrale appelée également mémoire interne est une mémoire qui permet de
mémoriser temporairement les données lors de l’exécution des programmes. Nous en
distinguons essentiellement trois types, à savoir : la mémoire vive, morte et flash.

Mémoire Vive

La mémoire vive, généralement appelée RAM (Random Access Memory), est la mémoire
principale de l’ordinateur. Il s’agit d’un espace permettant de stocker de manière temporaire
les données lors de l’exécution d’un programme.

Mémoire Morte
La mémoire morte, aussi dénommée ROM pour Read Only Memory, est une mémoire qui
permet de stocker les données même quand elle n’est plus alimentée électriquement. Celle-ci
est accessible qu’en lecture seule d’où son nom.

Mémoire Flash

La mémoire Flash est une mémoire non volatile et réinscriptible, c’est-à-dire possédant les
caractéristiques d’une mémoire vive mais dont les données ne se volatilisent pas lors d’une
mise hors tension.

Mémoire de Masse
La mémoire de masse (appelée également mémoire physique ou mémoire externe), c’est une
mémoire qui permet de stocker des informations à long terme, y compris lors de l’arrêt de
l’ordinateur.

D- Le bus

Un bus informatique désigne l'ensemble des lignes de communication connectant les


différents composants d'un ordinateur.

On distingue :

 le bus système (ou bus interne) : il relie le microprocesseur à la mémoire vive ;


 le bus d’extension (ou bus d’entrées/sorties) : il relie le microprocesseur aux
connecteurs d’entrées/sorties et aux connecteurs d’extension.

Par extension, le terme bus est également employé dans les architectures de logiciels pour
désigner un composant de connexion logicielle (voir ORB, EAI, Middleware, etc.) : on parle
alors de bus logiciel.

Les bus sont situés à l'intérieur d'un même ordinateur et permettent de connecter les
différentes parties fonctionnelles de cet ordinateur entre elles. Un bus qui n'interconnecte que
deux dispositifs est appelé un port.

Les informations transmises peuvent être les informations utiles à échanger entre les
dispositifs ou des informations de contrôle permettant de gérer l'état du bus lui-même.

Un bus est souvent caractérisé par une fréquence et le nombre de bits d'informations qu'il peut
transmettre simultanément. Lorsqu'un bus peut transmettre plus d'un bit d'information
simultanément on parlera d'un bus parallèle, sinon d'un bus série. La fréquence donnée est
tantôt la fréquence du signal électrique sur le bus, tantôt la cadence de transmission des
informations, qui peut être un multiple de la fréquence du signal.
Les technologies utilisées pour fabriquer les bus sont variées, conducteurs électriques gravés
sur un circuit imprimé, câble, fibre optique etc.
Nous distinguons deux types de bus à savoir : le bus parallèle et le bus série.
 Le bus parallèle
Matériel
D'un point de vue physique, ce type de bus est un ensemble de conducteurs électriques
parallèles. À chaque cycle de temps, chaque conducteur transmet un bit.
Ces bus ont donc une taille en nombre de conducteurs, et une taille en bits. Les tailles les plus
courantes (en bits) sont : 8, 16, 32, 64 ou plus. Lorsque l'on parle de la taille d'un bus, cela
signifie qu'il s'agit du nombre d'informations (ou bits) que le bus peut transmettre en un cycle,
non compté les informations de contrôle.
Certains conducteurs supplémentaires sont affectés à la transmission des signaux de contrôles
de l'état du bus.

Fonctionnement
Le bus sert à transmettre un entier informatique de la taille du bus. Les différents bits du bus
ont chacun un poids différent numéroté de zéro à N-1 où N est la taille du bus. Par exemple
pour un bus quatre bits on peut transmettre 16 valeurs différentes (24 = 16).
L'émetteur positionne au même instant tous les bits du bus. Au moment adéquat le composant
lecteur lira tous les bits en même temps. Cet instant adéquat peut être déterminé par un des
signaux de contrôle qui changera de valeur pour signaler au dispositif lecteur qu'il est temps
de lire les données sur le bus.
Ce type de bus souffre d'un défaut inhérent à son principe : bien que l'émetteur positionne
au même instant tous les bits, les câbles qui les transportent jusqu'au récepteur peuvent ne pas
avoir précisément les mêmes caractéristiques électriques (une nappe de conducteurs tordue
par exemple) ou pire encore ne pas avoir la même longueur : cela force l'émetteur à maintenir
l'état de chaque groupe de bits à transmettre pendant un temps suffisant pour garantir une
réception sans erreur à l'autre bout de la liaison, ce qui réduit le débit maximal d'information.

 Le bus série
Matériel
Un bus série permet de transmettre les informations bit par bit. Toutefois il comporte plus
d'une ligne permettant de transmettre des informations par l'addition d'éventuel signaux de
contrôle et généralement par l'utilisation de deux lignes distinctes permettant ainsi à ces bus
d'être bidirectionnels afin de permettre la transmission d'information dans les deux directions
simultanément.
Fonctionnement
Le bus série transmettant les données bit par bit, il est nécessaire lorsque l'on veut par
exemple transmettre un mot de 32 bits de sérialiser l'information pour sa transmission. Le
lecteur devra effectuer l'opération inverse pour reconstruire le mot de 32 bits à partir des bits
reçus.
L'intérêt principal de ce type de bus (outre un câblage simplifié par rapport à un bus parallèle)
est que pour un coût moindre (grâce au peu de conducteurs de données) il permet - en faisant
appel à des composants électroniques de haute qualité - de dépasser les débits atteints par des
bus parallèles.

E- Les périphériques d’entrée-sortie

Définition

Un périphérique informatique est un dispositif connecté à un système de traitement de


l'information central (ordinateur, console de jeu, etc.1) et qui ajoute à ce dernier des
fonctionnalités.

Types de périphériques

On peut classer généralement les périphériques en 3 types : les périphériques d'entrée, ceux de
sortie :

- Les périphériques d'entrée servent à obtenir des informations (ou données) pour le
système informatique tel que clavier (frappe de texte), souris (pointage), scanner
(numérisation de documents papier), micro, webcam, etc.
- Les périphériques de sortie servent à faire sortir des informations du système
informatique tel qu'écran, imprimante, haut-parleur, etc.
- On peut également rencontrer des périphériques d'entrée-sortie qui opèrent aussi bien
en écriture qu'en lecture : un disque dur, un lecteur/enregistreur de CD-ROM ou une
clé USB, par exemple, permettent aussi bien de stocker des données (sortie) que de les
lire (entrée).

Un périphérique peut être local ou en réseau :


 On dit qu'il est « local » lorsqu'il est branché directement à un ordinateur (PC, console
de jeux vidéo, tablette, etc.).
 On dit qu'il est « réseau » lorsqu'il est branché à un réseau informatique et qu'il
communique avec un ordinateur central, avec un superordinateur ou avec un serveur.

La plupart des périphériques sont amovibles, c'est-à-dire qu'ils peuvent être déconnectés de
l'unité centrale sans empêcher celle-ci de fonctionner (il faut parfois éteindre l'ordinateur
avant de retirer le périphérique).

Quelques exemples de périphériques

- Périphériques d’entrée

Dispositifs de saisie

 Périphériques d'entrée

Clavier

Pavé numérique

Dispositifs de lecture

Lecteur de disque optique

Lecteur de carte

Lecteur de code-barres

Dispositifs de pointage

Un dispositif de pointage est un périphérique d'entrée qui permet de contrôler un pointeur.

Souris

Tablette graphique

Pavé tactile
Contrôleurs de jeu

Un contrôleur de jeu est un dispositif qui permet d'effectuer une représentation


dimensionnelle (2D ou 3D) dans un jeu vidéo.

Manette de jeu (Joypad)

Manche de jeu (Joystick)

Dispositifs d'acquisitions

Un système d'acquisition de données est un appareil qui est utilisé pour effectuer une
numérisation d'un signal électrique. Il est, pour cette raison, classé comme un périphérique
d'entrée.

Acquisition d'images

Scanner

Webcam

Acquisition sonore

Microphone

- Périphériques de sortie

Écran

Imprimante

Enceinte acoustique

Haut parleur

Baffles

- Périphériques d'entrée-sortie
Mémoires de masse
Une mémoire de masse est un périphérique d'entrée-sortie car il permet de lire et d'écrire des
données non volatiles.

Lecteur de bande magnétique


Lecteur de disquettes
Disque dur
Graveur de disque optique
Clé USB (mémoire flash amovible)
CHAPITRE 3 : Système d’exploitation
I- Définition et rôles d’un système d’exploitation

Un système d'exploitation (souvent appelé OS de l'anglais Operating System) est un ensemble


de programmes qui dirige l'utilisation des ressources d'un ordinateur par des logiciels
applicatifs.

- Les rôles du système d'exploitation

 gérer le processeur : c'est-à-dire gérer l'allocation du processeur entre les différentes


applications grâce à un algorithme d'ordonnancement.
 gérer la mémoire : c'est-à-dire gérer l'espace mémoire alloué à chaque application et,
le cas échéant, à chaque usager.
En cas d'insuffisance de mémoire physique (RAM), le système d'exploitation peut
créer une zone mémoire sur le disque dur, appelée mémoire virtuelle.
 gérer les entrées/sorties : c'est-à-dire gérer l'accès des programmes aux ressources
matérielles par l'intermédiaire des pilotes.
 gérer l'exécution des applications : c'est-à-dire s'assurer de la bonne exécution des
applications en leur affectant les ressources nécessaires à leur bon fonctionnement,
mais aussi permettre de tuer une application ne répondant plus correctement, par
exemple.
 gérer les fichiers : c'est-à-dire gérer la lecture et l'écriture dans le système de fichiers et
les droits d'accès aux fichiers par les utilisateurs et les applications.

- Quelques exemples de systèmes d’exploitation


 Systèmes d’exploitation de bureau

Un système d’exploitation de bureau est conçu pour une utilisation domestique ou dans de
petites entreprises, avec un nombre limité d’utilisateurs. Un système d’exploitation de réseau
est utilisé dans un environnement d’entreprise, avec de nombreux utilisateurs et de multiples
besoins.

Sur le marché actuel des logiciels, il existe trois grandes catégories de systèmes d’exploitation
de bureau : Microsoft Windows, Apple Mac OS et UNIX/Linux.

- Systèmes d’exploitation de réseau


Les systèmes d’exploitation de réseau comportent des fonctionnalités supplémentaires visant
à optimiser l’utilisation et la gestion dans des environnements réseau.

Les systèmes d’exploitation de réseau offrent les fonctionnalités réseau suivantes :

 Applications serveur, par exemple des bases de données partagées


 Stockage de données centralisé
 Référentiel centralisé de comptes d’utilisateurs et de ressources sur le réseau
 File d’attente d’impression réseau
 Systèmes de stockage redondants, comme la technologie RAID et les sauvegardes

- Systèmes d’exploitation pour mobiles

Les systèmes d’exploitation pour mobiles permettent de gérer les besoins spécifiques des
terminaux mobiles (ressources limitées, interface tactile, etc).

Le marché actuel des systèmes d’exploitation pour mobiles se partage entre iOS (Apple),
Android, Windows Phone et Blackberry.

II-Les processus
Un processus est un programme en cours d'exécution.
 Un programme est une suite d'instructions ; c'est du texte, un code
statique.
 Le processus est un concept dynamique, il représente le déroulement
d'une tâche faisant partie d'une application ou un programme système
quelconque.
La notion de processus est essentielle pour décrire le fonctionnement des systèmes
multiprogrammés aussi appelés multitâches ou plus simplement multiprocessus.
Parmi les avantages de la multiprogrammation, citons :
 Le fractionnement des applications qui peut en simplifier le
développement,
 l'avantage pour l'utilisateur de savoir faire tourner plusieurs applications
simultanément
 et surtout l'optimalisation de l'utilisation du (ou des) processeurs(s)
Un processeur n'est capable de traiter qu'un seul processus à la fois. Un sous-ensemble du
système d'exploitation, appelé ordonnanceur, organise les tâches et les fait commuter tout
à tour pour donner l'impression qu'elles s'exécutent toutes simultanément.
Le système d'exploitation conserve des informations sur chaque processus pour pouvoir
les interrompre et les relancer selon ce que décide l'ordonnanceur. Ces informations
regroupent entre autres :
- un numéro d'identification du processus ( PID)
- l'état du processus, son compteur ordinal et les autres registres
- l'emplacement mémoire du code, des données et de la pile
- des pointeurs vers les ressources utilisées, fichiers, E/S, ...
- et une quantité innombrable d'informations : pointeur vers le processus parent,
priorité, compteur de threads, durée d'exécutions, informations d'attentes etc.
Toutes ces informations peuvent être regardées comme les composants d'un processeur
virtuel agent d'exécution du processus.

Les niveaux d'ordonnancement des processus


L'ordonnancement est à envisager à trois niveaux : à court, à moyen et à long terme.
1. L'ordonnancement à long terme "job schedulling" (ordonnancement des travaux) décide
des processus que le système peut mener en parallèle. Ils doivent être assez nombreux
pour que le processeur soit inactif le plus rarement possible (quand tous les processus
attendent des E/S) sans pour autant être trop abondants et saturer la mémoire principale du
système.
- Dans un traitement par lots, les processus attendent sur le disque dans une file d'attente
jusqu'à ce que le scheduler ou ordonnanceur d'admission décide de les prendre en
charge.
- Dans un système interactif à temps partagé, le système accepte en principe toutes les
requêtes de processus que les utilisateurs provoquent en lançant leurs applications.
Une fois le processus admis dans le système, il n'en sort que lorsqu'il est terminé ou s'il est
détruit par le système d'exploitation suite à une erreur grave ou à la demande de
l'utilisateur (commande kill sous Unix ou via le gestionnaire des tâches sous Windows)
2. L'ordonnancement à moyen terme est assuré par l'ordonnanceur de mémoire aussi
appelé permutateur ou swapper. Son rôle est de permuter les processus placés en mémoire
et ceux qui, faute de place, ont été temporairement entreposés sur le disque.
Ces permutations ne peuvent toutefois pas être trop fréquentes pour ne pas gaspiller la
bande passante des disques.
3. L'ordonnanceur à court terme aussi appelé dispacher, répartiteur ou ordonnanceur du
processeur choisit à quel processus sera alloué le processeur et pour quel laps de temps.
Ces commutations des processus sont très fréquentes.

Les états d'un processus


Les processus, puisqu'ils sont concurrents et doivent se partager le processeur, ne peuvent
être continuellement actifs. Ils ont donc, si on ne considère pour commencer que
l'ordonnancement à court terme, trois niveaux fondamentaux et quatre transitions
possibles.

Elu signifie en cours d'exécution. L'exécution n'est interrompue que par les conditions
suivantes :
Transition 1 : Le processus se bloque, faute de données pour l'alimenter ou en attendant une
opération d'entrée/sortie.
Transition 2 : Le processus est interrompu soit parce que la tranche de temps qui lui est
impartie est achevée soit parce qu'un processus de plus haute priorité
réquisitionne le processeur.
L'état Prêt est un état provisoire pour permettre aux autres processus de s'exécuter quasi
simultanément.
L'état Bloqué est un état d'attente d'un événement extérieur, tel qu'une entrée/sortie,
nécessaire à la poursuite de l'exécution du processus.
Ajoutons deux états qui correspondent à l'ordonnancement à long terme : les états
" Nouveau " et " Terminé ".
Nouveau : le processus vient d'être créé mais n'existe pas encore qu'à l'état de requête de
processus en attendant d'être admis par le scheduler en tant que processus activable.
Terminé : le processus est désormais inactif car il a achevé sa tâche. Il sera détruit
prochainement par le système d'exploitation pour libérer de la place en mémoire. Il est
parfois conservé pendant un temps à l'état terminé en attendant qu'une entrée/sortie
s'achève ou que les données de ce processus soient exploitées par un autre. On parle alors
de processus " zombie".
Pour être complet il faut aussi envisager les états permutés qui résultent de
l'ordonnancement à moyen terme. Le swapper range les processus prêts ou bloqués sur le
disque ou en mémoire.

Permuté-Prêt : le processus est pour l'instant transcrit en mémoire auxiliaire (sur disque).
Il serait prêt à être activé par l'ordonnanceur à court terme s'il était en mémoire principale.
La permutation de mémoire dépend de l'ordonnanceur à moyen terme.
Permuté-Bloqué : c'est l'état d'un processus qui étant bloqué en attendant un événement
externe à été transféré sur disque pour faire de la place en mémoire principale.
L'ordonnancement des processus
Les processus concurrents doivent se partager le processeur, la mémoire et les
entrées/sorties.
- Dans les systèmes anciens, les systèmes de traitement par lots mais aussi les systèmes
d'exploitation pas vraiment multitâches tels que Windows 9x, l'ordonnancement était de
type coopératif. L'ordonnanceur n'intervenait que lorsque le processus en cours se
terminait ou se bloquait. Ce système assez sommaire convenait aux traitements par lots
quand le temps de réponse n'avait que peu d'importance.
- Actuellement, sur les systèmes interactifs multitâches, parfois même multi utilisateurs et
multi processeurs, l'ordonnancement doit être préemptif. L'ordonnanceur ne peut laisser
un processus monopoliser les ressources du système et réquisitionne régulièrement le
processeur pour en répartir la disponibilité entre les processus qui simultanément sont
prêts à être exécutés. La politique suivie pour déterminer la manière d'ordonnancer les
processus est fonction de nombreux critères parfois contradictoires. Le fait de favoriser
certaines catégories de tâches peut en léser d'autres.

Critères d'ordonnancement des processus


- L'utilisation intensive du processeur
Le système perd son efficacité si le processeur passe trop de temps à attendre des E/S.
- L'équité
Tous les processus doivent avoir la possibilité d'utiliser le processeur. Nonobstant les
priorités parfois indispensables, des processus comparables doivent être traités avec les
mêmes égards.
- Utilisation répartie de l'ensemble des ressources
En ne tenant compte que de l'utilisation optimale du CPU, on risque de sous-utiliser
momentanément d'autres ressources que les processus devront se disputer ensuite. Une
bonne stratégie consiste donc à évaluer et à bien répartir l'emploi de l'ensemble des
ressources.
Certains critères s'appliquent plus particulièrement aux systèmes de traitement par lots :
- Le nombre de processus par unité de temps
Ce critère dépend cependant de la longueur des processus.
- La durée de rotation
C'est le délai moyen entre l'admission du processus et la fin de son exécution.
- Le temps d'attente
C'est le temps moyen qu'un processus passe à attendre. Il s'obtient en soustrayant la durée
d'exécution du processus de sa durée de rotation. Cette durée est indépendante de la durée
d'exécution du processus lui-même.
D'autres critères qui ne s'appliquent qu'aux systèmes interactifs :
- Le temps de réponse
C'est la vitesse de réaction aux interventions extérieures. Les programmes d'avant-plan
doivent pour cela avoir priorité sur les tâches de fond.
- La prévisibilité
Un système qui d'habitude réagit rapidement aux commandes mais qui parois prend un
temps beaucoup plus long sera perçu comme moins stable que s'il répondait à chaque fois
dans un temps comparable même s'il est globalement plus lent.
Le système semblera aussi plus convivial s'il respecte l'idée parfois fausse que les
utilisateurs se font de la complexité des tâches.

Algorithmes d'ordonnancement " scheduling algorithms "


FCFS - Fist-come First-served = Premier arrivé / Premier servi
Les jobs attendent dans une file. Le premier arrivé est admis immédiatement et s'exécute
tant qu'il n'est pas bloqué ou terminé. Lorsqu'il se bloque, le processus suivant commence
à s'exécuter et le processus bloqué va se mettre au bout de la file d'attente.
C'est typiquement un algorithme non préemptif.
Avantages : l'algorithme est simple (c'est une simple liste chaînée), l'ordonnancement est
équitable.
Inconvénient : Le processus qui utilise davantage de temps est favorisé par rapport à ceux
qui font beaucoup d'appels aux entrées/sorties.
SJF - Shorted Job First = le job le plus court d'abord
Sera élu, le processus dont on suppose que le traitement sera le plus court. Si quatre jobs
ont des durées d'exécution a, b, c et d ; le premier se termine à l'instant a, le second à
l'instant a+b et ainsi de suite. La durée de rotation moyenne est de
(4a + 3b + 2c + d)/4
Le premier job exécuté contribue donc beaucoup plus que les autres à la durée moyenne.
Il est donc normal d'exécuter le plus court en premier lieu. (C'est ce qui se passe quand à
la caisse d'une grande surface les clients laissent passer devant quelqu'un qui n'a qu'un
article )
Inconvénient : les jobs les plus courts sont favorisés. Si des processus courts arrivent sans
cesse, les processus plus longs n'auront jamais le temps de s'exécuter
SRT - Shorted Remaining Time = l'algorithme du temps restant le plus court
C'est la version préemptive de l'algorithme précédent.
( Cette fois le client qui n'a qu'un article vient carrément interrompre la caissière. Non
mais ! )
RR - Round Robin = L'algorithme du tourniquet
Chaque processus reçoit tour à tour un intervalle de temps appelé quantum. Au terme de
ce quantum ou, si le processus s'achève ou se bloque avant cet instant, l'ordonnanceur
attribue directement le processeur au processus suivant. L'algorithme est simple et
équitable. C'est généralement cet ordonnancement circulaire qui est utilisé dans les
systèmes à temps partagé. La valeur du quantum est couramment fixée aux alentours de
20 à 50 ms.
Des quanta plus courts provoqueraient trop de commutations de processus et la proportion
du temps consacré à ces changements de contexte deviendrait trop importante.
Si par contre, on optait pour des quanta plus longs, ce seraient les temps de réponse aux
processus interactifs qui en pâtiraient.
L'ordonnancement avec priorité
Une valeur de priorité est assignée à chaque processus.
La priorité peut être fonction d'un ordre de préséance entre utilisateurs ou fonction des
caractéristiques des processus. Un processus temps réel sera par exemple prioritaire par
rapport à une tâche de fond.
La priorité peut varier dynamiquement. Exemple : pour ne pas encombrer la mémoire
avec des processus qui passent le plus clair de leur temps à attendre des entrées/sorties, on
leur accorde une priorité d'autant plus grande qu'ils ne consomment qu'une petite fraction
de leur quantum.
Supposons que la valeur du quantum est fixée à 50 ms. Un processus qui n'utilise que 1
ms avant d'être bloqué aurait droit à une priorité de 50 ms/ 1 ms = 50 tandis qu'un
processus qui se bloque au bout de 25 ms a droit à une priorité de 50/25=2 et les processus
qui consomment tout le quantum ont une priorité de 1.

III- La gestion des mémoires


Le gestionnaire de mémoire est un sous-ensemble du système d'exploitation. Son rôle est
de partager la mémoire entre l'OS et les diverses applications. Le terme "mémoire" fait
surtout référence la mémoire principale, c'est à dire à la RAM, mais la gestion de celle-ci
demande la contribution de la mémoire auxiliaire (mémoire de masse, spacieuse mais
lente) et à la mémoire cache ( rapide mais de taille restreinte).
Voici quatre fonctions qu'on attend du gestionnaire de mémoire :
 L'allocation de la mémoire aux processus
- Répertorier les emplacements libres de la mémoire
- Allouer la mémoire nécessaire aux nouveaux processus
- Récupérer la mémoire des processus qui s'achèvent
Cette récupération peut nécessiter une réallocation des processus en cours
pour optimiser l'emploi de la mémoire. La zone mémoire attribuée à un
processus peut donc changer au cours de son exécution.
 La protection
Il faut s'assurer que les adresses générées par chaque processus ne concerne
que la zone mémoire qui lui est impartie, sans quoi, l'intégrité du système
d'exploitation et des autres processus n'est pas garantie.
Certaines zones mémoire doivent pourtant servir simultanément à plusieurs
processus : le code de fonctions servant à plusieurs applications qui tournent
en parallèle ou les données utilisées simultanément par divers processus
 La segmentation de l'espace d'adressage
Les programmes sont subdivisés en segments : le code, les données
modifiables, celles qui ne le sont pas, la pile. On attend donc du gestionnaire
de mémoire qu'il permette la segmentation de l'espace d'adressage des
programmes pour les raisons suivantes :
- pouvoir coder les segments séparément et les paramétrer en fonction de
l'application
- permettre des degrés de protection différents selon les segments( lecture
seule, exécution...)
- accepter le partage de certains segments.
 La mémoire virtuelle
Elle offre aux applications une mémoire de taille supérieure à celle de la
mémoire principale.
L'espace d'adressage qu'offre la mémoire centrale est parfois insuffisant. Les
disques suppléent à cette insuffisance en fournissant une mémoire auxiliaire
plus vaste mais plus lente et qui n'est pas directement accessible au
processeur.

Gestion de la mémoire pour systèmes monotâches


Dans le cas des systèmes monotâche, la gestion de la mémoire
est assez simple. Il suffit de réserver une partie de la mémoire au
système d'exploitation. L'application est ensuite casée dans
l'espace restant qui est libéré sitôt que l'application est terminée.
Cela se complique un peu si l'application nécessite plus d'espace
que ce que peut fournir la mémoire vive. On segmente alors
l'application en segments de recouvrements ou "Overlays". Cette
technique n'a plus cours maintenant. Elle était utilisée à l'époque
du DOS pour des applications volumineuses. Le programmeur
devait prévoir le découpage de son application en imaginant comment ces overlays serait
chargés en mémoire les uns à la suite des autres pour qu'au cours de son exécution
l'application puisse atteindre toutes les fonctions nécessaires.
C'était en quelque sorte comme cela qu'on concevait la mémoire virtuelle à l'époque des
systèmes d'exploitation monotâche. Notez que la zone mémoire occupée par le système
d'exploitation n'était pas protégée par ce type de gestion de mémoire.

Gestion de la mémoire pour systèmes multitâches


Plusieurs processus doivent se partager la mémoire sans empiéter sur l'espace réservé au
système d'exploitation ni aux autres processus. Quand un processus se termine, le S.E.
doit libérer l'espace mémoire qui lui était alloué pour pouvoir y placer de nouveaux
processus.

Partition de la mémoire
Partitions fixes
Le plus simple est de diviser la mémoire en partitions
fixes dès le démarrage du système. Les partitions sont
de différentes tailles pour éviter que de grandes
partitions ne soient occupées que par de petits
processus. Le gestionnaire de mémoire, en fonction de
la taille des processus, décide quelle partition lui allouer pour ne pas gaspiller trop de
mémoire.
Une file d'attente est associée à chaque partition. Quand vient une nouvelle tâche, le
gestionnaire détermine quelle est la plus petite partition qui peut la contenir puis place
cette tâche dans la file correspondante.
Le fait d'éviter d'allouer une partition trop grande à un petit processus conduit parfois à
des aberrations. Il arrive que des partitions plus grandes restent inutilisées alors que se
forment ailleurs des files interminables de petits processus. La mémoire est donc mal
utilisée.
Une autre solution est de créer une file unique. Lorsqu'une partition se libère, on consulte
la file pour trouver la tâche qui l'occuperait de manière optimale.
Le risque est que les petites tâches soient pénalisées. Une parade est de conserver une
petite partition au moins qui ne sera accessible qu'aux petites tâches. Une autre solution,
serait de dire qu'un processus ne peut être ignorer qu'au maximum un certain nombre de
fois. Après n refus, il prendra place dans une partition même si la partition est bien plus
grande qu'il ne faut.
Partitions variables
Une autre manière d'éviter les emplacements mémoires inoccupés en fin de partitions est
d'allouer aux processus des espaces qui correspondent exactement à l'espace qui leur est
utile.
Au fur et à mesure que les processus se créent et se terminent, des partitions s'allouent et
se libèrent laissant des zones mémoires morcelées et inutilisables.
La mémoire se fragmente et est de plus en plus mal employée. Il faudrait la compacter en
déplaçant régulièrement les processus mais cette tâche supplémentaire ralentit le système.
Conclusion :
Le partitionnement de la mémoire que ce soit avec des partitions de tailles fixes ou de
tailles variables, ne permet pas d'utiliser la mémoire au mieux.
La pagination
Les processus requièrent des espaces d'adresses continus. On a vu que cela est
difficilement réalisable en découpant la mémoire en partions dont les tailles correspondent
à celles des processus. La pagination est une technique d'allocation de la mémoire bien
plus efficace. Elle fournit aux processus des espaces d'adresses séquentiels à partir
d'espaces mémoire discontinus.
La pagination consiste à diviser la mémoire et les processus en blocs de mêmes tailles
appelés pages. Les pages mémoire sont souvent appelées "frames" ou "cadres" tandis que
les pages de processus sont simplement appelées "pages".
Les pages (de processus) ne sont pas toutes simultanément actives ; elles ne sont donc pas
nécessairement toutes présentes simultanément dans la mémoire principale. Les pages
inactives attendent sur le disque. L'espace d'adressage est donc virtuel sa taille peut être
supérieure à celle de la mémoire réelle.
Les processeurs disposent actuellement d'un dispositif, le MMU "Memory Manager
Unit" qui permet de placer des processus en mémoire sans nécessairement placer les pages
de processus dans des cadres de pages contigus. On distingue les adresses logiques qui se
réfèrent aux pages de processus des adresses physiques qui se réfèrent aux cadres de
pages.

Voyons à présent comment l'unité de gestion mémoire (MMU) met en correspondance les
adresses physiques et logiques. Elle contient pour ce faire une table de pages où sont
inscrits les numéros des cadres de pages.
Fonctionnement des tables de pages
L'adressage se fait au moyen de numéros de pages et d'offsets (distance séparant deux
emplacements mémoires). L'offset (= déplacement ou décalage) est la position relative au
début de la page.
L'adresse logique est composée du numéro de page de processus et d'un offset.
L'adresse physique correspondante est formée à partir du numéro du cadre de page où est
chargé la page de processus et du même offset que celui de l'adresse logique.
Le numéro du cadre de page est consigné dans une table des pages associée au processus.
On y retrouve le numéro du cadre de page en se servant du numéro de page de processus
comme d'un index.
Pagination simple
Le nombre de pages étant souvent très grand les tables des pages deviennent volumineuses
et peuvent même occuper ... plusieurs pages. On les fractionne donc en plusieurs niveaux :
une table de page de niveau supérieur dont chaque élément pointe vers une table de niveau
inférieur. L'adresse logique contient dès lors deux nombres pour aboutir au numéro de
page. Le premier sert d'index dans la table de niveau supérieur, le second sert d'index dans
la table du niveau suivant.

Tables de pages multiniveaux


Ces accès multiples à différentes pages pour aboutir à l'adresse finale ralentissent
fortement l'adressage. On évite de répéter ces recherches en notant les correspondances
trouvées entre les adresses logiques et les adresses physiques dans une mémoire
associative. Ce qui permet ensuite de retrouver presque immédiatement les
correspondances les plus récentes.

NB. L'espace d'adressage est perçu par le programmeur comme une suite continue
d'octets. La subdivision de l'adresse en numéros de page et d'offset est transparente. Elle
est prise en charge par le matériel.
La segmentation
Chaque processus est constitué d'un ensemble de segments. Chaque segment est un espace
linéaire.
Les segments sont des espaces d'adressages indépendants de différentes longueurs et qui
peuvent même varier en cours d'utilisation. Ils correspondent à des subdivisions logiques
déterminées par le programmeur ou par le compilateur.
Les segments contiennent des informations de même nature : le code, les données, la
pile, des tables, etc. Il est dès lors possible d'attribuer des protections adaptées à chaque
type de segment : un segment de code peut être déclaré en exécution seule, une table de
constantes en lecture seule mais pas en écriture ni en exécution. Certaines zones de code
en exécution seule peuvent être partagées par plusieurs processus ; cela se fait par
exemple pour des bibliothèques de sous-programmes.
L'accès aux segments se fait via une table de segments.
Chaque entrée de la table comporte l'adresse de départ du segment et sa taille.
L'adresse logique est constituée du numéro de segment et d'un offset. Contrairement aux
pages dont le fonctionnement est transparent pour le programmeur, les segments sont des
entités logiques qu'il connaît et manipule. Il distingue les deux informations contenues
dans l'adresse : le numéro du segment et l'offset.
Le numéro de segment sert d'index pour retrouver l'adresse du début du segment dans la
table de segment. Cet offset doit être inférieur à la taille du segment consignée elle aussi
dans la table de segment. Si ce n'est pas le cas, une erreur est générée qui provoque
l'abandon du programme. L'offset est ensuite ajouté à l'adresse de début de segment pour
former l'adresse physique.

Segmentation avec pagination


La segmentation et la pagination concernent des problèmes différents. Ce sont deux
techniques qui peuvent se combiner :
 La segmentation découpe les processus en zones linaires pouvant être gérées
différemment selon que ces segments sont propres au processus, qu'ils sont
partagées, lus, écrits ou exécutées et de manière à protéger les processus entre eux.
 La pagination découpe la mémoire en pages non contiguës mais de même taille. Elle
procure aux processus des espaces d'adresse continus (nécessaires aux segments).
Les pages mémoires peuvent n'être allouées que lorsqu'un processus en a besoin. On
obtient de la sorte une mémoire virtuelle de taille supérieure à la mémoire réelle.
Les systèmes d'exploitation qui gèrent ces deux techniques simultanément
administrent une table de segments et plusieurs tables de pages.
Un segment peut contenir plusieurs pages mais toutes ne doivent pas nécessairement être
présentes en mémoire à tout moment. On ne garde en mémoire que celles qui sont
réellement utilisées. Chaque segment a sa propre table de pages.

IV- La gestion des entrées/sorties


Dans un système à base de processeur, de microprocesseur, de microcontrôleur ou d'automate,
on appelle entrées-sorties les échanges d'informations entre le processeur et les périphériques
qui lui sont associés. De la sorte, le système peut réagir à des modifications de son
environnement, voire le contrôler. Elles sont parfois désignées par l'acronyme I/O, issu de
l'anglais Input/Output ou encore E/S pour Entrées/Sorties.
Dans un système d'exploitation :
 Les entrées sont les données envoyées par un périphérique (disque, réseau, clavier,
capteur…) à destination d'une unité centrale de traitement (processeur) ;
 Les sorties sont les données émises par une unité centrale de traitement à
destination d'un périphérique (disque, réseau, écran, imprimante, actionneur…).
Exemple simplifié :
 taper sur les touches du clavier envoie une série de codes vers le processeur ; ces
codes sont considérés comme des données d'entrée ;
 le processeur affiche les résultats du traitement des données sur un écran ; ce sont
des données de sortie. Habituellement, l'écran est géré par un programme de
gestion d'affichage.

Structure d’un système à microprocesseur

Un système à microprocesseur comporte nécessairement les éléments suivants :


 un processeur, qui est le cerveau du système ; il est capable d'effectuer des
opérations arithmétiques et logiques et d'organiser des transferts de données entre
les différents éléments du système ;
 une zone de mémoire morte (ROM, EPROM, EPROM Flash) qui stocke le
programme ;
 une zone de mémoire vive (RAM) qui stocke les données pendant l'exécution du
programme ; le contenu de cette mémoire est perdu lorsqu'on coupe l'alimentation
du système ;
 des périphériques ; leur nombre et genre dépendent de l'application.
Les différents éléments du système sont reliés par 3 bus :
 le bus de données permet, comme son nom l'indique, la circulation des données,
mais aussi des instructions, entre les 4 grands blocs ;
 le bus d'adresse permet au processeur de désigner à chaque instant la case
mémoire ou le périphérique auquel il veut faire appel ;
 le bus de contrôle est également géré par le processeur et indique, par exemple, s'il
veut faire une écriture ou une lecture dans une case mémoire, ou une entrée/sortie
de ou vers un périphérique ; on trouve également, dans le bus de contrôle, une ou
plusieurs lignes qui permettent aux circuits périphériques d'effectuer des demandes
au processeur ; ces lignes sont appelées lignes d'interruptions matérielles (IRQ).
L'évolution de la technologie fait que des systèmes qui, précédemment, nécessitaient plusieurs
boîtiers, peuvent parfaitement être intégrés dans un seul boîtier qui regroupe les différentes
fonctions.

Exemple de système à microprocesseur


Une machine à laver est un excellent exemple de système de contrôle piloté par
microprocesseur. Les principaux éléments de la machine sont :
 un tambour dans lequel sera placé le linge à laver ;
 un moteur pour faire tourner ce tambour à vitesse plus ou moins grande selon la
phase du programme (lavage, essorage…) ;
 une résistance chauffante pour chauffer l'eau ;
 une électro-vanne pour autoriser l'entrée de l'eau de la distribution dans la cuve de
lavage au début du cycle ;
 une pompe pour vider l'eau en fin de cycle ;
 un détecteur de niveau d'eau pour arrêter le remplissage de la cuve ;
 un thermomètre électronique pour arrêter le chauffage lorsque l'eau a atteint la
température désirée ;
 un ou plusieurs commutateurs pour sélectionner le programme, la température de
l'eau, la vitesse d'essorage ;
 un bouton de mise en marche et d'arrêt de la machine ;
 un ou plusieurs voyants ou indicateurs (témoin de marche, état d'avancement du
programme…).
Le processeur va recevoir des informations des périphériques d'entrée :
 commutateur(s) ;
 détecteur de niveau ;
 thermomètre électronique.
En fonction de ces informations, il va envoyer des commandes aux périphériques de sortie :
 moteur ;
 résistance chauffante ;
 électro-vanne ;
 pompe ;
 voyants et indicateurs.

Ports d’entrée/sortie
Les périphériques sont reliés au reste du système par des circuits appelés ports d'entrées et
ports de sortie (certains ports peuvent combiner les deux fonctions).
Un port d'entrée est essentiellement composé de tampons trois états. Ceux-ci se comportent
comme des interrupteurs électroniques qui font apparaître, au moment voulu, les niveaux
logiques du périphérique d'entrée (choisi par le bus d'adresse) sur le bus de données ; ces
niveaux seront mémorisés dans un registre du processeur (le registre est une case de RAM).
Un port de sortie est essentiellement composé de bascules de type D. Celles-ci se comportent
comme des petites mémoires. Leur entrée est reliée au bus de données. Le processeur vient
écrire un niveau logique 0 ou 1 dans chacun des bascules. Les sorties des bascules contrôlent
les périphériques, généralement via un étage de puissance.

Périphériques d’entrées
Une entrée est un flux de données provenant soit :
 du réseau,
 d'une lecture d'information sur disque,
 d'une saisie clavier, d'un mouvement de souris, d'un crayon optique
 ou de tout autre périphérique prévu pour interagir avec un système informatique.
Ces signaux d'entrée génèrent des Interruptions matérielles qui sont traitées en priorité par le
gestionnaire d'interruptions du noyau du système d'exploitation.
Dans les systèmes à microprocesseurs, tels la machine à laver évoquée ci-dessus, on trouve
des boutons poussoirs, des commutateurs.
De nombreux microcontrôleurs incorporent des compteurs ; les signaux mis en forme et
appliqués aux entrées de comptage constituent aussi des signaux d'entrée du système.
Dans les systèmes informatiques, le choix est bien plus vaste : clavier, souris, crayon optique,
numériseur, convertisseurs analogiques/numériques…
Insistons sur le fait que, pour être traités par le processeur, les signaux, quels qu'ils soient,
doivent être convertis en signaux logiques compatibles avec le processeur. Dans certains cas,
il faudra donc placer des convertisseurs de niveau ou des étages d'isolement (souvent
des opto-coupleurs).
Périphériques de sortie
Les sorties sont associées à des trappes ou appels systèmes.
Une sortie peut être (cette liste n'est pas exhaustive) :
 un signal (électrique, onde…) ;
 un flux de données (réseau), une écriture sur disque ou une mise en mémoire ;
 un affichage, un son.
Dans les systèmes à microprocesseurs, on utilise des diodes électroluminescentes (DELs) ou
des ampoules à incandescence comme voyants ou indicateurs, des afficheurs numériques ou
alphanumériques à DELs ou à cristaux liquides pour l'affichage des messages du système, des
relais (pour commander des charges nécessitant des courants et/ou des tensions élevés),
des optocoupleurs…
Dans les systèmes informatiques, le choix est vaste : écran pour l'affichage, imprimante pour
la production de documents sur papier, convertisseurs numériques/analogiques…

Périphériques d’entrée/sortie
Un grand nombre de périphériques sont à la fois des périphériques d'entrée et de sortie.
Le modem, par exemple, permet d'envoyer ou de recevoir des informations en provenance du
monde extérieur : courrier électronique, navigation Internet, mais aussi envoi et réception de
fax, téléphonie par ordinateur (VoIP, Voice over IP).
Les cartes réseau permettent de relier entre eux plusieurs ordinateurs afin de réaliser un réseau
local d'ordinateurs, ce qui permet de partager des fichiers ou des ressources telles une
imprimante réseau, un numériseur…
Il y a aussi toute la gamme des mémoires de masse : disque dur, carte mémoire, lecteur de
disquette, lecteur de DVD, clé USB.
De même, les moniteurs d'ordinateurs lorsqu'ils sont dotés d'écran tactile.

Gestion des entrées/sorties


On distingue principalement trois façons de gérer les entrées/sorties :
Entrées/sorties programmées
Pendant l'exécution de son programme principal, le microprocesseur va périodiquement lire
l'état des périphériques d'entrée et modifie, si nécessaire, l'état des ports de sortie. C'est la
technique la plus simple. Exemple : système de régulation de chauffage d'un bâtiment.
Interruption
Cette technique est utilisée lorsque le processeur doit réagir rapidement à un changement
d'état d'un port d'entrée. Le périphérique prévient le processeur par une ligne d'interruption
prévue à cet effet. Le processeur interrompt la tâche en cours, saute dans le sous-programme
destiné à gérer la demande spécifique qui lui est adressée ; à la fin du sous-programme, le
processeur reprend l'exécution du programme principal là où il l'avait laissée et donne un
résultat cohérent.
Accès direct à la mémoire
Cette technique, connue souvent par ses initiales DMA (Direct Memory Access), est utilisée
lorsque l'on doit procéder à un transfert rapide d'un grand nombre de données entre, par
exemple, un lecteur de CD et un disque dur. Plutôt que de transférer les octets d'abord vers un
registre du processeur, puis seulement vers le disque dur, les octets sont transférés directement
d'un périphérique à l'autre sans passer par les registres du processeur. Le transfert des données
est organisé par un circuit spécial appelé contrôleur DMA, qui prend la place du processeur
pendant le transfert et gère les bus d'adresses et de contrôle.

Performance
Les performances d'un ordinateur mesurent le temps qui lui est nécessaire pour effectuer un
traitement donné. Trois éléments influencent ces performances :
 la puissance du processeur ;
 la mémoire disponible ;
 le temps consacré aux opérations d'entrées/sorties.
Le temps nécessaire pour un traitement informatique quel qu'il soit est toujours déterminé par
un de ces trois éléments mais celui des entrées/sorties est généralement prépondérant. En
effet, le temps consacré aux opérations I/O se compte en millisecondes alors que celui
consacré aux instructions effectuées par le processeur se compte en nanosecondes.
La taille de la mémoire est surtout importante dans la mesure où elle permet de réduire le
nombre d'opérations d'entrées/sorties, soit parce qu'une part plus importante des programmes
applicatifs peut résider en mémoire, réduisant ainsi les phénomènes de pagination, soit parce
qu'une partie de cette mémoire peut-être utilisée comme tampon (mémoire cache) pour le
stockage des flux de données des opérations I/O.

En programmation comme au niveau système (par exemple sur les mainframes), deux
éléments matériels (entre autres) influencent les performances des entrées/sorties, c'est-à-dire
leur vitesse :
 la charge du processeur (i.e. son taux d'occupation), qui fournit les données
sortantes ou traite les données entrantes ;
 la charge du dispositif d'entrée/sortie, qui émet ou reçoit les données (on parle
généralement des lectures/écritures notamment pour les accès disques).
Si les ressources CPU ou I/O sont insuffisantes lors de l'exécution d'un ou plusieurs
traitements simultanés, on parle de saturation.

V- Système de fichier
Le système de fichiers est la portion du système d'exploitation qui s'occupe de la gestion des
mémoires de masse. Il prend en charge le stockage des fichiers sur le disque dur, le rangement
de ceux-ci dans des répertoires, l'ouverture ou la fermeture de fichiers/répertoires, et bien
d'autres choses encore. La gestion des partitions est aussi assez liée au système d'exploitation.

Partition
Avant d'installer un système d'exploitation sur un disque dur, celui-ci doit être partitionné, du
moins sur les PC actuels. Partitionner un disque dur signifie le diviser en plusieurs morceaux,
qui seront considérés par le système d'exploitation comme autant de disques durs séparés. Les
informations sur les partitions sont mémorisées dans une table des partitions, qui stocke la
taille et le premier secteur de chaque partition, ainsi que quelques informations
complémentaires.

Master Boot Record


Sur les PC actuels, on a vu que cette table est stockée dans le Master Boot Record. Celui-ci
peut contenir 4 partitions. Les informations de chaque partition sont codées sur 16 octets, de
la manière indiquée ci-dessous. La partition correspond évidemment à un bloc de secteurs
consécutifs. Vu que la taille d'une partition est codée sur 32 bits, la taille d'une partition ne
peut pas dépasser les 4 Giga-secteurs. Sur les mémoires de masse qui ont des secteurs de 512
Ko, cela correspond à une capacité totale de 2,2 Téraoctets.
Flag qui
Adresse Adresse Adresse Taille de la
indique si la Type de
CHS du CHS de la LBA du partition en
partition est la
début de la fin de début de la nombre de
bootable ou partition
partition partition partition secteurs
non

1 octets 3 octets 1 octets 3 octets 4 octets 4 octets

Extended Boot Record.


Afin de dépasser la limite de 4 partitions, il est possible de subdiviser une partition en sous-
partitions, appelées partitions logiques. Pour cela, la partition subdivisée doit être définie
comme une partition dite étendue dans le MBR (le type de la partition doit avoir une valeur
bien précise). Les informations sur une partition logique sont mémorisées dans un secteur
situé au début de la partition logique, dans une structure appelée Extended Boot Record.
Celui-ci a une structure similaire au MBR, à quelques détails près. Premièrement, seules les
deux premières entrées de la table des partitions sont censées être utilisées. La première
indique l'adresse de la prochaine partition logique (ce qui fait que les EBR forment une liste
chainée), tandis que la seconde sert pour les informations de la partition logique proprement
dite. De plus, la place normalement réservée au chargement de système d'exploitation est
remplie de zéros.

Fichiers
Les données sont organisées sur le disque dur sous la forme de fichiers. Ce sont généralement
de simples morceaux d'une mémoire de masse, sur lesquels un programme peut écrire ce qu'il
veut. Le système de fichiers attribue plusieurs caractéristiques à chaque fichier.
 Chaque fichier reçoit un nom de fichier, qui permet de l'identifier et de ne pas
confondre les fichiers entre eux. L'utilisateur peut évidemment renommer les
fichiers, choisir le nom des fichiers, et d'autres choses dans le genre.
 En plus du nom, le système d'exploitation peut mémoriser des informations
supplémentaires sur le fichier : la date de création, la quantité de mémoire occupée
par le fichier, et d'autres choses encore. Ces informations en plus sont appelées
des attributs de fichier.
 Il existe des normes qui décrivent comment les données doivent être rangées dans
un fichier, suivant le type de données à stocker : ce sont les formats de fichiers.
Le format d'un fichier est indiqué à la fin du nom du fichier par une extension de
fichier. Généralement, cette extension de nom commence par un ".", suivi d'une
abréviation. Par exemple, le .JPEG, le .WAV, le .MP3 ou le .TXT sont des
formats de fichiers. Ces formats de fichiers ne sont pas gérés par le système
d'exploitation. Tout ce que peut faire l'OS, c'est d'attribuer un format de fichier à
une application : il sait qu'un .PDF doit s'ouvrir avec un lecteur de fichiers .PDF,
par exemple.
Répertoires
Sur les premiers systèmes d'exploitation, on ne pouvait pas ranger les fichiers : tous les
fichiers étaient placés sur le disque dur sans organisation. De nos jours, tous les systèmes
d'exploitation gèrent des répertoires. Ceux-ci sont représentés sur le disque dur par des
fichiers, qui contiennent des liens vers les fichiers contenus dans le répertoire. Le fichier
répertoire mémorise aussi toutes les informations concernant les fichiers : leur nom, leur
extension, leur taille, leurs attributs, etc. Ces informations sont rarement stockées dans le
fichier lui-même. Ainsi, quand vous ouvrez un répertoire ou que vous consultez les propriétés
d'un fichier, ce fichier n'est jamais ouvert : ces informations sont récupérées dans le répertoire.
Codage des répertoires
Un répertoire contient une liste de fichier. Pour chaque fichier, il mémorise son nom, ses
attributs, ainsi que la liste des clusters qui lui sont attribués. Les attributs sont stockés dans
une structure de taille fixe, le nombre des attributs par fichier étant connu à l'avance. Mais la
liste des clusters et les noms des fichiers n'ont pas de taille fixée à l'avance. Cela ne pose pas
de problème pour la liste des clusters, contrairement à ce qu'on a pour les noms.
Généralement, les répertoires mémorisent les noms des fichiers qu'ils contiennent, avec leurs
attributs. Ceux-ci sont donc placées dans un bloc de taille fixe, un en-tête.
La gestion des noms de fichiers peut se faire de plusieurs manières. Avec la première
méthode, on limite la taille des noms de fichiers. On peut alors réserver une taille suffisante
dans le fichier répertoire pour stocker ce nom. Par exemple, sur les premiers systèmes de
fichiers FAT, les noms de fichiers étaient limités à 8 caractères (plus 3 pour l'extension de
fichier). Le répertoire allouait 8 octets pour chaque nom de fichier, plus 3 octets pour
l'extension. La taille utilisée était alors limitée. Cette méthode, bien que simple d'utilisation, a
tendance à gâcher de la mémoire si de grands noms de fichiers sont utilisés. Et si de petits
noms de fichier, l'espace utilisé sera faible, mais les utilisateurs pourront se sentir limités par
la taille maximale des noms de fichier.

Ce schéma illustre l'entrée d'un fichier (dans un répertoire) telle qu'elle est codée avec les
systèmes de fichier FAT 12 et FAT 16. La FAT-32 utilise un système quasiment identique,
sauf pour l'adresse du premier cluster, qui est codée sur 4 octets.
On peut aussi utiliser des noms de fichiers de taille variable. La solution la plus simple
consiste à placer ceux-ci à la suite de l'en-tête (qui contient les attributs). Cette méthode a
cependant un désavantage lors de la suppression du fichier : elle génère de la fragmentation
assez facilement. Pour éviter cela, on peut placer les noms de fichier de taille variable à la fin
du fichier répertoire, chaque en-tête pointant vers le nom de fichier adéquat (Linux).
Hiérarchie de répertoires
Sur les premiers systèmes d'exploitation, tous les fichiers étaient placés dans un seul et unique
répertoire. Quand le nombre de fichier était relativement faible, cela ne posait pas trop de
problèmes. L'avantage de cette méthode était que le système d'exploitation était plus simple et
qu'il n'avait pas à gérer une arborescence de répertoire sur le disque dur. Mais l'inconvénient
se faisait sentir quand les fichiers devenaient de plus en plus nombreux. Cette organisation est
encore utilisée sur les baladeurs et appareils photo numériques.
Illustration d'une hiérarchie de répertoires.
De nos jours, les répertoires sont organisés en une hiérarchie de répertoire : un répertoire
peut contenir d'autres répertoires, et ainsi de suite. Évidemment, cette hiérarchie commence
par un répertoire maître, tout en haut de cette hiérarchie : ce répertoire est appelé la racine.
Sous Windows, on trouve une seule et unique racine par partition ou disque dur : on en a une
sur C : , une autre sur D : , etc. Sous Linux, il n'existe qu'une seule racine, chaque partition
étant un répertoire accessible depuis la racine : ces répertoires sont appelés des points de
montage. Sur Windows, ce répertoire est noté : soit \, soit nom_lecteur : \ (C:\, D:\). Sous
Linux, il est noté : / .
Reste que savoir où se trouve un fichier demande de préciser quel est le chemin qu'il faut
suivre en partant du répertoire maître : on doit préciser qu'il faut ouvrir tel répertoire, puis tel
autre, et ainsi de suite jusqu’au fichier. Ce chemin, qui reprendre le chemin de la racine
jusqu’au fichier, est appelé le chemin d'accès absolu. Sous Windows, les noms de répertoires
sont séparés par un \ : C:\Program Files\Internet Explorer. Sous Linux, les noms de répertoires
sont séparés par un / : /usr/ast/courrier. Les chemins d'accès relatifs sont similaires, sauf
qu'ils ne partent pas de la racine : ils partent d'un répertoire choisit par l'utilisateur, nommé
répertoire courant. Dans les grandes lignes, l'utilisateur ou un programme choisissent un
répertoire et lui attribuent le titre de répertoire courant. Généralement, chaque processus a son
propre répertoire de travail, qu'il peut changer à loisir. Pour cela, le programme doit utiliser un
appel système, chdir sous Linux.
Linux a une particularité : il normalise la place de certains répertoires bien précis du système
d'exploitation. L'arborescence des répertoires est en effet standardisée par le Filesystem
Hierarchy Standard, la dernière version datant de juin 2015.

Vous aimerez peut-être aussi