Fondamentaux de l'ordinateur

Tags :
  • COURS
  • informatique
  • hardware
  • software
  • OS
  • fondamentaux
Auteurs :
  • François Brucker
  • Loïck Goupil-Hallay

Théorème fondamental de l'ingéniérie logicielle

On peut régler tous les problèmes en ajoutant une couche d'indirection. Autrement dit,
Si le passage d'un état A à un état B est complexe, on peut établir un état intermédiaire C, pour lequel la transition de A à C et de C à B est plus simple.

graph LR
    A[A] -->|Complexe| B[B]

    AA[A] -->|Simple| CC[C]
    CC -->|Simple| BB[B]

Architecture ordinateur

architecture-beta
    service users(random)[Utilisateurs]

    group computer(server)[Ordinateur]
    service software(cloud)[Logiciel] in computer
    service os(database)[OS] in computer
    service hardware(disk)[Hardware] in computer

    users:B <--> T:software
    software:R <--> L:os
    os:R <--> L:hardware

Hardware

L'Hardware est la partie matérielle de l'ordinateur, c'est-à-dire les composants physiques qui lui permettent de fonctionner.
Il comprend:

CPU

Le processeur (en anglais, Central Processing Unit ou CPU) est le composant central de l'ordinateur, responsable de l'exécution des instructions et du traitement des données.
Il est composé de plusieurs unités de calcul appelées coeurs, qui peuvent exécuter des instructions en parallèle.
Le processeur communique avec la mémoire et les périphériques via des bus (canaux de communication) et des registres (mémoire intégrée au processeur).
Il effectue des opérations arithmétiques et logiques sur les données, contrôle le flux d'exécution des programmes et gère les interruptions matérielles.

flowchart LR
    subgraph CPU["CPU"]
        direction TB

        subgraph CP["Central Processing"]
            direction TB
            ArithmeticUnit["Arithmetic & Logic Unit"]
            ControlUnit["Control Unit"]

            ArithmeticUnit<-->ControlUnit
        end

        subgraph MemoryUnit["Memory Unit"]
            direction TB
            Register["Register"]
            Cache["Cache"]
            RAM["RAM"]
            Disk["Disk"]
        end

        MemoryUnit<-->CP
    end

    InputUnit["Input Unit"]-->CPU
    CPU-->OutputUnit["Output Unit"]

Le processeur est composé de plusieurs parties:

Mémoire

Attention

Ne pas confondre mémoire (vive) avec stockage (disque)

La mémoire est un composant essentiel de l'ordinateur qui permet de stocker temporairement les données et les instructions nécessaires à l'exécution des programmes. Son rôle est de stocker et restituer très rapidement les données pour que le processeur puisse les traiter.
Sa forme la plus connue est la RAM (Random Access Memory). Physiquement, elle est composée de barrettes électroniques qui stockent les données sous forme de bits (0 ou 1).

On différencie plusieurs types de mémoire:

Il existe plusieurs types de composants de stockage (classées par ordre de vitesse d'accès):

Niveau Capacité Vitesse d'accès Localisation Quantité / Nombre d'unités Type
Registres ~128 bits ~0,3 ns Intégrés dans le CPU Variable selon l'architecture Volatile Stockage minuscule très rapide, mémoire éphémère
Cache L1 ~64 KB par cœur ~1 ns Intégré dans le CPU 1 par cœur Volatile Mémoire cache de premier niveau, très rapide, spécifique à chaque cœur
Cache L2 ~256 KB à 1 MB par cœur ~3-5 ns Intégré dans le CPU 1 par cœur Volatile Mémoire cache de deuxième niveau, plus grande mais légèrement moins rapide que L1
Cache L3 ~2 à 16 MB partagés ~10-15 ns Partagé au sein du CPU 1 pour l'ensemble des cœurs Volatile Mémoire cache de troisième niveau, partagée entre tous les cœurs du processeur
RAM 8 à 64 GB ~50-100 ns Sur la carte mère 1 module ou plus Volatile Mémoire principale de l'ordinateur, stocke les données et programmes en cours d'utilisation
SSD (Disque Flash) 200 GB à 1 TB ~0,1 ms Interne ou externe 1 ou plus Non-volatile Disque à semi-conducteurs, offre des temps d'accès rapides et une bonne fiabilité
HDD (Disque dur) 1 à 5 TB ~5-10 ms Interne ou externe 1 ou plus Non-volatile Disque mécanique traditionnel, offre une grande capacité de stockage à moindre coût

En tant que développeur, vous utiliserez principalement la RAM pour stocker les données et les instructions nécessaires à l'exécution de vos programmes. Il est important de gérer efficacement la mémoire pour éviter les fuites de mémoire et les problèmes de performance.
Vous serez également amené à réaliser des opérations de lecture et d'écriture sur le disque dur pour stocker des données de manière permanente.
Il est important de comprendre les différences de vitesse d'accès entre ces différents types de mémoire pour optimiser les performances de vos applications.

Disque dur

Le disque dur est un composant de stockage non-volatile qui permet de stocker des données de manière permanente. Il est composé de plateaux magnétiques qui tournent à grande vitesse et d'une tête de lecture/écriture qui se déplace sur ces plateaux pour accéder aux données.
Les disques durs sont utilisés pour stocker des fichiers, des programmes, des systèmes d'exploitation et d'autres données qui doivent être conservées même lorsque l'ordinateur est éteint.

Pour stocker, lire ou écrire des données, le disque dur utilise des plateaux magnétiques (circulaires) qui tournent à grande vitesse (jusqu'à 15 000 tours par minute). Les bits sont stockés sous forme de charges magnétiques sur ces plateaux, et la tête de lecture/écriture se déplace sur ces plateaux pour accéder aux données. Pour les écritures, la tête de lecture/écriture modifie les charges magnétiques à l'emplacement souhaité.

Les disques durs sont caractérisés par plusieurs paramètres:

Carte mère

La carte mère est le composant principal de l'ordinateur sur lequel sont connectés tous les autres composants matériels. Elle est composée de circuits imprimés et de connecteurs qui permettent de relier le processeur, la mémoire, le disque dur, les cartes d'extension et les périphériques.
La carte mère contient également le BIOS (Basic Input/Output System) ou l'UEFI (Unified Extensible Firmware Interface), qui est un logiciel intégré qui permet de démarrer l'ordinateur et de contrôler les composants matériels.

Software

Le Software est la partie logicielle de l'ordinateur, c'est-à-dire les programmes et les données qui permettent à l'ordinateur de fonctionner.
D'un point de vue système, les logiciels que l'on peut appeler process ont besoin d'accéder:

Daemon

Un daemon est un programme informatique qui s'exécute en arrière-plan, sans interaction directe avec l'utilisateur. Les daemons sont souvent utilisés pour des tâches de maintenance, de surveillance ou de gestion des ressources. Ils peuvent être lancés au démarrage du système et s'exécuter en continu, prêts à répondre à des événements spécifiques.
Les daemons sont des interfaces comme les autres, la plupart du temps exécutés par l'utilisateur root, car ils nécessitent des privilèges élevés pour accéder à certaines ressources système.

Shell

Un shell est une interface en ligne de commande qui permet à l'utilisateur d'interagir avec le système d'exploitation en saisissant des commandes textuelles. Les shells sont utilisés pour exécuter des programmes, naviguer dans le système de fichiers, gérer les processus et les utilisateurs, etc.
Il existe plusieurs shells disponibles sur les systèmes Unix et Linux, tels que Bash, Zsh, Ksh, etc. Chaque shell a ses propres fonctionnalités et syntaxe, mais ils partagent des concepts de base tels que les variables, les boucles, les conditions,...

GUI

Une interface graphique (GUI) est un environnement visuel qui permet à l'utilisateur d'interagir avec le système d'exploitation à l'aide de fenêtres, de menus, de boutons et d'autres éléments graphiques. Les interfaces graphiques offrent une expérience utilisateur plus conviviale et intuitive que les interfaces en ligne de commande (CLI).
Les GUI sont utilisées dans de nombreux systèmes d'exploitation modernes, tels que Windows, macOS et les distributions Linux avec des environnements de bureau tels que GNOME, KDE, etc.

Operating System

Un système d'exploitation est un (ensemble de) programme(s) qui permettent de gérer les ressources matérielles de l'ordinateur et de fournir une interface entre l'utilisateur et le matériel.
Le but d'un système d'exploitation est double:

Le système d'exploitation est séparé en plusieurs couches:

Kernel

Un système d'exploitation n'est pas un bloc monolithique, il est composé de plusieurs parties, dont le kernel.

Le kernel est la partie centrale du système d'exploitation qui gère les ressources matérielles (processeur, mémoire, périphériques) et les interactions logicielles (processus, threads, fichiers). Il gère également les appels système, qui permettent aux programmes d'interagir avec le matériel. Il est aussi responsable de la gestion des processus.

Le kernel a un accès matériel et un contrôle total sur la machine. Il est par conséquent le plus critique et le plus sensible des composants du système d'exploitation. Il est par principe le plus petit possible pour minimiser les risques de bugs et de failles de sécurité.

Interface logicielle

Une interface logicielle est un ensemble de fonctions, de procédures ou de méthodes qui permettent à un programme d'interagir avec un périphérique matériel ou un autre logiciel.

Les interfaces logicielles sont utilisées pour abstraire la complexité des interactions matérielles et logicielles, permettant aux développeurs de créer des applications sans avoir à se soucier des détails de bas niveau. Elles fournissent un moyen standardisé et simplifié d'accéder aux fonctionnalités des périphériques, en masquant les spécificités de leur implémentation.

UEFI

L'UEFI (Unified Extensible Firmware Interface) est un logiciel sur la carte mère qui est lancé dès l'allumage de l'ordinateur.
Il est en charge de la vérification, la synchronisation, et éventuellement la configuration des composants matériels de l'ordinateur.
Il est également responsable de déterminer le dispositif de démarrage (disque dur, clé USB, CD-ROM, etc.) et de lancer le système d'exploitation.

Elle remplace l'ancien BIOS (Basic Input/Output System) et offre de nombreuses améliorations en termes de performances, de sécurité et de fonctionnalités.

UEFI manager

L'UEFI manager est une interface graphique qui permet de lire et de configurer les paramètres de l'UEFI, de gérer les périphériques de démarrage, de mettre à jour le micrologiciel (firmware) de la carte mère, installer des pilotes, etc.
On y accède généralement en appuyant sur une touche spécifique au démarrage de l'ordinateur (par exemple, F2, F10, F12, ESC).

Boot

Le processus de démarrage d'un ordinateur consiste à charger le système d'exploitation en mémoire pour permettre à l'utilisateur d'interagir avec l'ordinateur.
Il consiste en plusieurs étapes:

  1. Mise sous tension de l'ordinateur.
  2. L'UEFI initialise le matériel (la carte mère, les disques durs, la mémoire, ...) et vérifie que les périphériques connectés sont reconnus et fonctionnels.
  3. Pour chaque périphérique de démarrage, l'UEFI recherche un chargeur d'amorçage (bootloader) qui permet de lancer le système d'exploitation, s'il n'y en a pas, il passe au périphérique suivant.

Lexique