Chapitre 6 : Architectures matérielles et systèmes d'exploitation
Architectures matérielles
Quelques dates :
1945 : Premier ordinateur : l'ENIAC
(Electronic Numerical Integrator And Computer). Il était capable de
réaliser 100 000 additions par secondes, pesait 30 tonnes et consommait
150 kW.
1950 : Premier processeur à transistor
1960 : Les missions Apollo développent l'AGC (Apollo Guidance Computer)
suffisament léger (32 kg), économe en énergie et puissant (85 kHz) pour
être embarqué dans un vaisseau spatial. Cette prouesse a pu être réalisé
grâce à la technique d'intégration des circuits.
1971 : Premier microprocesseur commercialisé par Intel. Il intégrait 2300 transistors lui permettant d'atteindre la puissance
de calcul de l'ENIAC.
1981 : Premier PC (Personal Computer) par IBM
2012 : Lancement du Raspberry Pi, un ordinateur de la taille d'une carte bancaire.
L'architecture de base de tout outil numérique s'appuie sur trois éléments :
le processeur aussi appelé microprocesseur ou encore
CPU (Central Processing Unit) qui effectue les calculs élémentaires,
la mémoire qui stocke les données
nécessaires à toute opération,
les périphériques d'entrée/sortie.
Principe de fonctionnement d'un processeur
L'interaction entre ces trois éléments est ce qui permet tous nos usages
numériques. Les quatre étapes élémentaires d'un
cycle d'exécution sont :
le chargement de l'instruction élémentaire dans le CPU : cette instruction correspond à l'opération à effectuer,
le chargement des opérandes : il s'agit des données sur lesquelles vont s'appliquer l'opération,
le calcul,
l'écriture du résultat dans la mémoire.
La mémoire
La mémoire utilise le magnétisme dans les disques durs (HDD pour Hard
Drive Disc) ou l'électricité pour la RAM, les clés USB, les SSD
(Solid-State Drive) pour stocker les bits d'information.
Elle peut être :
permanente, quand les données sont conservées même sans alimentation
électrique,
volatile, lorsqu'elle sont perdus sans alimentation électrique.
Dans un ordinateur, il existe plusieurs familles de mémoire que l'on
peut hiérarchiser ainsi :
Les registres sont des mémoires de taille réduite mais d'accès
extrèmement rapide car directement intégrée dans le processeur. Ils
stockent l'instruction, les opérandes et le résultat.
La mémoire cache est une mémoire rapide destinée à accélérer l'accès à
la mémoire centrale en stockant les données les plus utilisées.
La mémoire principale ou mémoire vive ou RAM (Random Access Memory) est
l'espace principal de stockage du processeur. C'est une mémoire volatile
qui au démarrage d'un ordinateur stocke d'abord les instructions et les
données du système d'exploitation puis des programmes à exécuter. Quand
un programme est fermé, il est déchargé de la mémoire vive.
La mémoire de masse (mémoire de stockage) est permanente et de grande
capacité.
Hiérarchie des mémoires
Le processeur
Un microprocesseur est un circuit intégré sur puce composé de milliards
de
transistors permettant
d'exécuter des instructions.
La taille des CPU est de plus en plus réduite grâce aux avancées
scientifiques qui permettent des techniques de gravures en-dessous de la
dizaine de nanomètres. Selon la technologie utilisée, un
microprocesseur peut effectuer un jeu d'instruction prédéfinie lors de se
conception. Cela peut généralement être une opération arithmétique
(addition, multiplication ...) ou une opération logique (et, ou ...).
Historiquement, il existe deux familles de microprocesseurs :
les processeurs RISC (Reduced Instruction Set Computer) qui disposent de
peu d'instructions mais très rapide à effectuer,
les processeurs CISC (Complex Instructions Set Computer) qui proposent
des instructions plus élaborées mais qui nécessitent un temps plus long
d'exécution.
Les évolutions technologiques actuelles tendent à faire disparaître cette
distinction.
Un processeur fonctionne de manière cadencées. Il est caractérisé par la
fréquence à laquelle il réalise un cycle d'exécution. Pour les processeurs
d'aujourd'hui cette fréquence est de l'ordre du GigaHertz soit 1 milliards
d'opérations par seconde.
Il peut être constitué de plusieurs coeurs, ce qui lui permet d'exécuter
des instructions en parallèle, et d'augmenter encore ses performances.
Cette stratégie multicoeurs permet de compenser les limitations de
l'augmentation de la fréquence qui entraîne une plus forte consommation
électrique et donc un besoin de dissipation d'énergie thermique.
Schéma du circuit intégré d'un processeur Intel Core I7Survoller chaque processeur pour faire apparaître le schéma de son
circuit intégré. Y retrouver les différents composants (coeurs et
mémoires cache) intégrés et déterminer leur nombre de coeurs respectif.
Processeur AMD OpteronLe processeur AMD Opteron possède 4 coeurs.
Processeur AMD RichlandLe processeur AMD Richland possède 2 coeurs.
Combien d'opérations par seconde peut théoriquement effectuer :
le processeur AMD Am286 simple-coeur cadencé entre 8 et 20 MHz, sorti en 1983 ?entre 8 et 20 millions le processeur Intel Pentium II simple-coeur cadencé à 233 MHz, sorti en 1997 ?233 millions le processeur AMD Athlon simple-coeur cadencé entre 850 et 1733 MHz, sorti en 2001 ?entre 850 millions et 1,733 milliard le processeur AMD Athlon 64 X2 avec deux coeurs cadencés à 2,2 GHz sorti en 2006 ?4,4 milliards le processeur Intel Core i7-1160G7 possédent 4 coeurs cadencés à 4,40 GHz sorti en 2020 ?17,6 milliards le processeur Intel Core i7-10875H de 8 coeurs cadencés à 5,10 Ghz sorti en 2020 ?40,8 milliards le processeur AMD Ryzen Threadripper 3990X possédant 64 coeurs cadencés entre 2,9 et 4,3 GHz sorti en 2020 ?entre 185,6 et 275,2 milliardsTrouver, installer et utiliser une application pour connaître l'état du
CPU de votre smartphone.CPU-Z pour Android ou CPU-x sur iOS
Système intégré sur puce
La miniaturisation des composants électroniques permet d'intégrer tous les
composants utiles à une fonction sur une même puce.
Un système intégré sur puce ou SoC (System On Chip) vise à effectuer
une tâche précise, de manière complète, robuste et rapide en regroupant
sur une unique puce les différents composants nécessaire à sa fonction.
Les composants qui peuvent être intégrés sont nombreux : CPU, mémoires,
dispositifs de communication sans fil, dispositifs d'entrée/sortie,
capteurs ... Ce phénomène d'intégration est apparue avec l'ère des
smartphones et l'émergence de systèmes tout-en-un. Presque tout le contenu
d'un ordinateur se retrouve intégré sur une seule puce dans un smartphone.
Il en résulte que les composants sont bien plus interconnectés qu'ils ne
le sont dans un ordinateur classique où chaque composant était plus ou
moins indépendant et liés par une carte mère.
Les principaux concepteurs de SoC, aussi appelés «fondeurs», sont : AMD,
Apple, Broadcom, Intel, Nvidia, Qualcomm, Samsung et Texas Instrument.
Par abus de langage, on appelle toujours "processeur", ce qui est en
réalité des SoC. En effet, les CPU d'aujourd'hui intègre tous de la
mémoire. C'est encore plus vrai pour les processeurs de téléphones
portables qui intègre, sur une même puce, de plus en plus des composants
supplémentaire tels que :
un processeur graphique (GPU : Graphics Processing Unit) qui est
l'équivalent de la carte graphique dans un PC,
des circuits radio pour le Wifi et le Bluetooth,
un circuits de traitement d'image pour l'appareil photo embarqué,
des circuits de communication 4G, 5G, ...
un processeur neuronnal (NPU : Neural Processing Unit) qui prend en
charge l'interlligence artificielle.
Avantages :
leur faible encombrement est un atout majeur pour les
appareils mobiles,
leur faible consommation énergétique due à la grande
proximité des composants qui limite la longueur des connecteurs
et ainsi les
pertes par effet Joule,
leur rapidité également due à la grande
proximité des composants,
leur coût réduit du fait de la facile automatisation de
la chaîne de production. En effet tous les composants sont gravés en une
seule fois sur une puce unique.
Inconvénients :
leur coût de recherche et développement est plus
important,
leur obsolescence
du fait de l'impossible évolutivité. En effet les composants intégrés ne
peuvent être séparés et remplacés individuellement,
leur faible durée de vie. La durée de vie du SoC
correspond à celle de son composant le plus fragile. Plus il y a de
composants intégrés, plus il y a de chance qu'un composant soit
défaillant rapidement et condamne le SoC tout entier.
Exemples :
les appareils photo numérique intègrent des SoC de plus en plus complets
pour le traitement d'image, offrant des fonctions qui étaient auparavant
réalisées par des logiciels.
la carte mère d'un téléphone portable Samsung Galaxy S posséde plusieurs
SoC :
Carte mère d'un Samsung Galaxy S
en rouge : le bluetooth en turquoise : le tuner radio
en orange : le contrôleur de son en jaune : un
amplificateur de réseau en violet : un contrôleur de
communication 3G en bleu : circuit de transmission/réception
le Raspberry Pi qui est un nano-ordinateur créé par des professeurs de
l'université de Cambridge et qui dans sa version 4 est équipé du SoC
Broadxom BCM2711 (en rouge).
Raspberry Pi 4Effectuer des recherches sur les SoC ci-dessous afin de déterminer
leurs caractéristiques : fabricant, taille de gravure, mémoire,
fréquence, composants intégrées ...
Raspberry PI : Soc Broadcom BCM2711
Apple iPhone 11 : SoC A13 Bionic
Samsung Galaxy S11 : SoC Exynos 990
Nintendo Switch : SoC Nvidia Tegra
Effectuer une recherche pour identifier le SoC de votre smartphone et
déterminer ses caractéristiques.
Systèmes d'exploitation
Quelques dates :
1981 : MS-DOS est le premier système d'exploitation pour PC
1985 : Lancement de Windows 1.0 ajoutant un surcouche graphique à MS-DOS.
1986 : Lancement de Mac OS 1.0, premier système
d'exploitation public à interface graphique (doté de fenêtres, icônes, menus et souris) développé
par Apple pour équiper ses ordinateurs personnels Macintosh.
1991 : Création de Linux, système d'exploitation libre
2007 : Android est créé pour l'informatique mobile
2008 : Première version d'iOS, système d'exploitation des iPhone.
Rechercher les parts de marché actuelles, des OS d'ordinateur d'un part et des OS de smartphone d'autre part.
Ses fonctions
Souvent appelé l'OS (Operating System), le système d'exploitation
est un ensemble de programme qui permet d'utiliser les éléments
physiques d'un ordinateur pour exécuter les applications nécessaires
à l'utilisateur. L'élément fondamental du système d'exploitation est
son noyau, c'est lui qui permet l'accès aux ressources matérielles.
Toute machine est doté d'un OS qui a pour fonction :
de charger les programmes depuis la mémoire de
masse,
de gérer leur exécution en leur créant des
processus et en ordonnançant les tâches,
de gérer les ressources (microprocesseur,
mémoire, disques, carte graphique, carte réseau, clavier, souris,
...),
de gérer des accès aux ressources pour permettre
: d'une part à tous les utilisateurs de travailler simultanément,
et d'autre part de ne permettre l'utilisation d'une ressource
qu'aux utilisateurs autorisés.
de traiter les interruptions,
d'assurer la sécurité globale du système.
Historique des logos de Windows
Architecture globale d'un système d'exploitation
Les processus
Pour permettre le fonctionnement d'un ordinateur, un système
d'exploitation multitâche doit permettre l'exécution simultanée de
plusieurs applications par plusieurs utilisateurs. Pour cela, il crée et
gère l'exécution de nombreux processus. Attention à ne pas confondre
programme et processus.
Un processus est un programme en cours d'exécution. Un programme
exécuté/instancié plusieurs fois (dans le temps ou par plusieurs
utilisateurs simultanément) génère autant de processus. On dit que le
système d'exploitation exécute des instances d'un programme, chargées en
mémoire, dans des processus dédiés.
Chaque processus possède en mémoire les instructions à exécuter et ses
données. L'OS multitâche exécute chaque processus dans un environnement mémoire
cloisonnée et protégé. Par sécurité, un processus ne peut lire ou écrire les données en mémoire
que dans la zone que le système d'exploitation lui a dédié.
Les processus affichés dans le gestionnaire des tâches de Windows 10 Sur votre ordinateur sous Windows, faites la combinaison de touches CTRL + ALT +
SUPR et sélectionner "Gestionnaire des tâches" pour observer tous les
processus en cours sur votre machine. Sur les postes du lycée, l'accès au gestionnaire des tâches
est verrouillé. Il est possible de créer un raccourci vers le terminal
Windows Powershell avec un clic droit
sur le bureau puis "nouveau raccourci" avec l'adresse :
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.
La commande ps permet de visualiser les processus comme
dans le gestionnaire des tâches. Sous Linux, depuis le terminal, la commande pour afficher
les processus est également ps. Utiliser l'émulateur du
Terminal Linux en ligne JSLinux pour tester cette commande. Un tableau apparait
avec plusieurs champs tels que PID (Identifiant du processus), UID ou USER (Identifiant de l'utilisateur), TIME (temps d'exécution)
et CMD ou COMMAND (nom de la commande du processurs. Avec le module os de Python :
import os
print(os.popen('wmic process get description, processid').read())
L'ordonnanceur
L'OS doit permettre à toutes les applications et tous les utilisateurs de
travailler en même temps, mais cette simultanéité n'est qu'illusion. En
réalité, il va donner l'impression à chacun qu'il est seul à utiliser
l'ordinateur et ses ressources physiques. Cela nécessite une gestion
complexe des processus qui est réalisée par une partie spécifique du noyau
du système d'exploitation, appelé :
l'ordonnanceur (scheduler).
Un coeur de processeur ou un périphérique ne peuvent pas être partagés. Ce
qui est réellement partagé c'est leur temps d'utilisation. L'ordonnanceur
alloue la ressource à tour de rôle à chaque processus sur un intervalle de
temps très courts qui peut varié selon les besoin. Le plus petit
intervalle de temps allouable est appelé le
quantum de temps du latin "quantum" qui prend ici le même
sens que celui utilisé en physique : plus petite mesure indivisible.
Généralement, un quantum de temps dure 20 à 50 ms suivant les OS et les
algorithmes d'ordonnancement utilisé.
Les objectifs de l'ordonnanceur sont :
de minimiser le temps de traitement du processus d'un utilisateur,
de garantir l'équité entre les différents processus,
d'optimiser l'utilisation des ressources,
d'éviter les blocages.
Les états d'un processus
En première on a vu qu'un microprocesseur possède des mémoires appelées
registres. C'est dans ses registres que les instructions d'un processus en
cours d'exécution sont copiées. Lorsqu'un processus est interrompu pour
laisser la place à un autre processus, l'état des registres au moment de
l'interruption, aussi appelée
contexte d'exécution (execution context), doit être
sauvegardé afin que lorsque ce sera de nouveau son tour d'être exécuté,
son contexte d'exécution soit parfaitement rétabli et qu'il puisse
poursuivre son exécution. Cette étape de remplacement d'un contexte
d'exécution par un autre s'appelle un
changement de contexte (context switching).
Tous les processus qui cohabitent en mémoire à un instant donné ne sont
pas forcément en attente d'un quantum de temps processeur. Ils peuvent
attendre d'avoir un accès à une autre ressource (périphérique
d'entrée/sortie) ou bien ils peuvent également attendre le résultat d'un
autre processus. Dans ces cas là, le processus n'est pas éligible à un
quantum de temps processeur et on dit qu'il est dans l'état
"bloqué". Au contraire quand un processus a tout ce qui lui faut et n'attend
qu'un quantum de temps processeur, on dit qu'il est dans l'état
"prêt".
Associer chacune des descriptions suivantes à l'état du processus
correspondant :
Un processus a été attaché à une instance d'un programme et il n'a
encore jamais été exécuté. Son contexte d'exécution initial doit
être préparé.
Nouveau
La dernière instruction de processus a été exécutée. Ses ressources
affectées et son environnement mémoire vont être libérés.
Terminé
Un ou plusieurs quantums de temps processeur ont été alloués au
processus. Son contexte d'exécution a été copié dans les registres
et ses instructions sont exécutées jusqu'à l'écoulement du temp
imparti.
En cours d'exécution
Le processus est en attente d'une ou plusieurs ressources (réseau,
périphériques d'entrée/sortie, action de l'utilisateur, ...) ou du
résultat d'un autre processus. Il n'est pas éligible à un quantum de
temps processeur.
Bloqué
Le contexte d'exécution est sauvegardé et complet. Le processus est
en attente de quantums de temps processeur.
Prêt
Les algorithmes d'ordonnancement
Il existe plusieurs algorithmes d'ordonnancement de processus. Ils ont
tous pour but de répartir les quantums de temps de façon optimale entre
tous les processus.
L'algorithme du premier arrivé, premier servi ou FCFS (First-Come
First-Served)
: Les processus sont stockés dans une file. La ressource est affectée
dans l'ordre d'arrivée des processus. Lorsqu'un processus se bloque, il
laisse la place au suivant et se replace en bout de file.
Exemple
: La file d'attente d'impressions des documents pour une imprimante.
Avantage : L'algorithme est simple et l'ordonnancement est
équitable. Inconvénient : Les processus faisant beaucoup
d'appels à des périphériques sont défavorisés.
L'algorithme du tourniquet ou RR (Round Robin) : La
ressource est partagé à tour de rôle entre les processus.
L'algorithme du prioritaire : La ressource est affectée
par ordre de priorité des processus. Cette priorité peut être varier
dynamiquement. Des processus qui sont bloqués et n'ont pas utiliser
complètement leurs quantums de temps alloués peuvent obtenir une
priorité. Exemple : Si le quantum de temps est de 50 ms et
que le processus l'utilise intégralement, il peut recevoir une priorité
de 50/50 = 1 tandis qu'un processus qui n'aurait utilisé que 10 ms du
quantum de temps, recevrait une priorité de 50/10 = 5 et serait ainsi
prioritaire sur le premier.
L'algorithme du plus court d'abord ou SJF (Shortest Job First)
: C'est difficile d'évaluer le temps d'exécution d'un processus mais
c'est ce critère qui est utilisé pour prioriser leurs exécutions.
Exemple : C'est typiquement cet algorithme qui est appliqué
aux caisses d'un supermarché, lorsqu'un client laisse passé un autre
client ayant peu d'article. Avantage : Le temps de
terminaison des processus est meilleur en moyenne. Inconvénient
: Si plusieurs processus plus cours arrivent sans cesse, les plus long ne
sont jamais exécutés.
L'algorithme du temps restant le plus court : est une
version plus agressive du précédent. Exemple : Un client avec très peu d'article arrive en caisse et
interrompt (entre deux quantums de temps) un autre client avec beaucoup
d'article qui été en train de passer.
Voici trois processus et leurs instructions :
Trois processus dans l'ordre d'appel.
Donner l'ordonnancement de ces instruction selon l'algorithme FCFS.FCFS : A1 A2 A3B1 B2 B3 B4 B5 B6C1 C2 C3 C4 Donner l'ordonnancement de ces instruction selon l'algorithme du tourniquet.Tourniquet : A1B1C1A2B2C2A3B3C3B4C4B5 B6 Donner l'ordonnancement de ces instruction selon l'algorithme du prioritaire.Prioritaire : B1 B2 B3 B4 B5 B6A1 A2 A3C1 C2 C3 C4 Donner l'ordonnancement de ces instruction selon l'algorithme SJF.SJF : A1 A2 A3C1 C2 C3 C4B1 B2 B3 B4 B5 B6
Le risque de l'interblocage (deadlock)
Une situation d'interblocage se produit lorsque deux processus se bloquent mutuellement soit
parce qu'ils monopolisent chacun une ressource que l'autre attend pour poursuivre son exécution,
soit parce qu'ils attendent un résultat l'un de l'autre.
Le processus A est dépendant du processus B : pas d'interblocage
Les processus A et B sont interdépendant : interblocage
Pour éviter une situation d'interblocage, il y a l'utilisation de mutex ou l'algorithme du Banquier.
Pour aller plus loin : Verrouillage d'une ressource
Deus Ex Silicium est le premier projet francophone de chaine d'électronique dédiée à la science des semi-conducteurs et à leurs très nombreuses applications. Imaginée pour les ingénieurs, hackeurs, amateurs, étudiants, geeks ou passionnés de technologie