The operating system

Reading time30 min

En bref

Résumé de l’article

Dans cette conférence, nous examinons l’histoire des systèmes d’exploitation (OS) et nommons leurs principales fonctionnalités.
Nous détaillons ensuite le système d’exploitation moderne qui fonctionne très probablement sur votre propre ordinateur.

Points clés

  • Les premiers ordinateurs nécessitaient des opérations humaines pour attribuer manuellement les tâches et les planifier séquentiellement.

  • Avec la puissance de calcul croissante, l’automatisation de la journalisation, de la comptabilité et du paiement s’est mise en place à mesure que plus d’utilisateurs pouvaient exécuter plus de programmes.

  • Les systèmes d’exploitation sont passés de systèmes mono-utilisateur, mono-tâche à des environnements multi-utilisateurs, multitâches.

  • Les systèmes d’exploitation modernes suivent toujours ces principes.
    Ils consistent en un noyau, qui gère la gestion des composants matériels et des ressources, et une interface utilisateur ou shell (qui peut être graphique ou non) pour permettre l’interaction avec l’utilisateur (par exemple, exécuter des programmes).

  • Les systèmes d’exploitation mettent également en œuvre divers mécanismes de sécurité pour garantir que les utilisateurs ne peuvent accéder qu’aux fichiers et ressources auxquels ils sont autorisés, l’OS peut enregistrer les activités pour l’audit et la responsabilité, ce qui est également important pour la sécurité.

Contenu de l’article

Nous avons défini dans le cours précédent ce qu’est un ordinateur et donné une description de ses principaux composants.
Nous avons vu qu’un ordinateur est essentiellement un dispositif électronique pouvant être programmé pour exécuter automatiquement des séquences d’opérations arithmétiques ou logiques.
Cependant, nous avons conclu qu’il serait fastidieux d’utiliser un tel ordinateur si chaque programme avait besoin de la spécification complète du matériel allant du jeu d’instructions du CPU aux pilotes des périphériques.

Pour éviter cela, un programme spécial, le système d’exploitation (OS), agit comme un intermédiaire entre les utilisateurs et le matériel informatique.

1 — Histoire des systèmes d’exploitation

1.1 — Premiers ordinateurs (années 1940 – 1950)

Les premiers ordinateurs étaient des mainframes dépourvus de toute forme de système d’exploitation, ce qui signifie que des ordinateurs comme le ENIAC, brièvement mentionné dans le cours précédent, nécessitaient une opération manuelle, les programmeurs saisissant directement du code machine à l’aide d’interrupteurs et de panneaux de connexion.
Pour améliorer l’efficacité, le concept de traitement par lots est apparu, où des jobs (programmes) étaient collectés, regroupés et traités séquentiellement.
Des systèmes comme le IBM 701 utilisaient des cartes perforées et des bandes magnétiques pour l’entrée des jobs et des tambours magnétiques pour le stockage secondaire.
Les programmes pouvaient généralement être débogués via un panneau de contrôle utilisant des cadrans, des interrupteurs à bascule et des voyants.

À mesure que les ordinateurs devenaient plus puissants, le temps nécessaire pour exécuter les programmes diminuait, rendant le processus de changement d’utilisateur plus important.
Cela a conduit à la journalisation automatisée pour la comptabilisation de l’utilisation et le paiement, remplaçant les contrôles manuels.
Les files d’attente de jobs ont également évolué, passant de files physiques de personnes ou de piles de cartes perforées à la gestion par la machine de ses propres séquences de jobs.
Les programmeurs n’étaient plus ceux qui avaient accès à la machine physique, remplacés par des opérateurs dédiés qui s’occupaient de l’ordinateur et de ses périphériques.

Pour éviter la falsification des données et les erreurs opérationnelles, les fournisseurs ont amélioré les bibliothèques d’exécution, et une surveillance automatisée a été introduite pour diverses ressources.
Des fonctionnalités de sécurité ont été ajoutées aux systèmes d’exploitation pour suivre l’accès aux programmes et empêcher l’utilisation non autorisée des fichiers.
Finalement, les bibliothèques d’exécution ont évolué en un programme unifié qui s’initiait avant le premier job client.
Ce programme pouvait lire le job du client, gérer son exécution, enregistrer son utilisation, réaffecter les ressources matérielles une fois le job terminé, et passer sans interruption au traitement du job suivant.
Cela a conduit à un premier type de systèmes d’exploitation appelés moniteurs.
Fait intéressant, ces moniteurs n’ont pas été développés par les fournisseurs d’ordinateurs mais par leurs clients, comme le North American Monitor de General Motors pour l’IBM 704.

1.2 — Ère des mainframes (années 1960)

Durant les années 1960, l’ère des ordinateurs mainframe a vu des avancées significatives dans les systèmes d’exploitation, posant les bases de nombreux concepts modernes en informatique.
Cette période a marqué la transition des systèmes mono-utilisateur, mono-tâche vers des environnements multi-utilisateurs, multitâches, motivée par les besoins des grandes organisations pour des solutions informatiques plus efficaces et puissantes.

Avec le progrès de la technologie informatique, le concept de partage du temps est apparu, permettant à plusieurs utilisateurs d’interagir avec un ordinateur simultanément.
Les systèmes de partage du temps, tels que le Compatible Time-Sharing System (CTSS) et le Multics (Multiplexed Information and Computing Service), ont été développés pour permettre aux utilisateurs d’accéder au mainframe via des terminaux.
Ces systèmes allouaient une petite tranche de temps CPU à chaque utilisateur, créant l’illusion que chaque utilisateur disposait de sa propre machine dédiée.
Cette innovation était cruciale pour les institutions académiques et de recherche, où de nombreux utilisateurs avaient besoin d’accéder à l’ordinateur pour diverses tâches.

Exemple

Quelques systèmes d’exploitation précoces :

  • IBM OS/360 : L’un des systèmes d’exploitation les plus influents des années 1960 était l’OS/360 d’IBM. Conçu pour la famille de mainframes System/360, OS/360 a introduit de nombreuses fonctionnalités qui sont devenues standard dans les systèmes d’exploitation ultérieurs, telles qu’un système de fichiers hiérarchique, un langage de contrôle de jobs (JCL), et le support de plusieurs langages de programmation. C’était un système robuste et polyvalent capable de gérer une large gamme de tâches, des calculs scientifiques au traitement des données commerciales.

  • MULTICS : Le projet Multics, initié par le MIT, Bell Labs et General Electric, visait à créer un système de partage du temps hautement sécurisé, fiable et capable. Bien que Multics fût complexe et ait eu une influence significative sur les systèmes d’exploitation ultérieurs, son héritage le plus notable est l’inspiration qu’il a fournie pour la création de Unix.

La complexité croissante des opérations mainframe et le nombre croissant d’utilisateurs ont nécessité des avancées en matière de sécurité et de gestion des ressources.
Les systèmes d’exploitation ont commencé à incorporer des fonctionnalités pour prévenir l’accès non autorisé et l’utilisation abusive des ressources.
Ils ont mis en œuvre des mécanismes de contrôle d’accès, des pistes d’audit, et une comptabilité des ressources pour s’assurer que les activités de chaque utilisateur étaient correctement surveillées et limitées à leurs privilèges assignés.

1.3 — Unix et premiers mini-ordinateurs (années 1970)

Les années 1970 ont vu l’essor des mini-ordinateurs, des machines plus petites et abordables comparées aux mainframes de la décennie précédente.
Ces mini-ordinateurs, comme la série PDP de Digital Equipment Corporation (DEC), sont devenus populaires dans les entreprises, universités et laboratoires en raison de leur rapport coût-efficacité et de leur polyvalence.
La demande croissante de puissance de calcul dans des environnements plus petits a stimulé des avancées significatives dans les systèmes d’exploitation.

L’un des développements les plus influents de cette époque fut la création du système d’exploitation Unix.
Unix a été initialement développé à la fin des années 1960 et au début des années 1970 aux Bell Labs d’AT&T par Ken Thompson et Dennis Ritchie.
Ses principes de conception et ses fonctionnalités ont laissé une empreinte durable dans le monde de l’informatique.

Caractéristiques clés d’Unix :

  • Portabilité – Unix a été écrit en langage de programmation C, ce qui a facilité son portage sur différentes plateformes matérielles.
    Cela représentait un changement révolutionnaire par rapport à l’assembleur utilisé dans la plupart des systèmes d’exploitation antérieurs.

  • Multi-utilisateur et Multitâche – Unix supportait plusieurs utilisateurs et le multitâche, permettant à plusieurs programmes de s’exécuter simultanément.
    Cette capacité rendait Unix adapté aux environnements informatiques personnels et partagés.

  • Système de fichiers – Unix a introduit un système de fichiers hiérarchique avec des répertoires et sous-répertoires, offrant une manière structurée d’organiser et d’accéder aux fichiers.

  • Outils simples et puissants – Unix était livré avec un ensemble d’utilitaires en ligne de commande petits, simples et puissants pouvant être combinés pour effectuer des tâches complexes.
    Cette philosophie de combinaison d’outils petits est devenue une caractéristique d’Unix et de ses dérivés.

  • Sécurité et permissions – Unix a mis en œuvre un modèle de sécurité robuste avec des permissions de fichiers et une authentification des utilisateurs, garantissant que les utilisateurs ne pouvaient accéder qu’aux ressources qu’ils étaient autorisés à utiliser.

En plus d’Unix, les années 1970 ont vu le développement de plusieurs autres systèmes d’exploitation pour mini-ordinateurs.
Ces systèmes étaient adaptés aux besoins des organisations plus petites et offraient des fonctionnalités similaires à celles des systèmes mainframe mais adaptées à du matériel moins puissant.

Exemple

Quelques exemples de ces OS sont :

  • VMS (Virtual Memory System), développé par DEC pour sa série VAX de mini-ordinateurs.

  • RT-11, également développé par DEC, était un système d’exploitation mono-utilisateur en temps réel pour le PDP-11.

  • Control Program Facility (CPF), développé par IBM pour son IBM System/38.

  • CP/M, qui sera plus tard supplanté par DOS (voir section suivante).

1.4 — Ordinateurs personnels (années 1980)

Les années 1980 ont marqué une période révolutionnaire dans l’histoire de l’informatique avec l’avènement des ordinateurs personnels (PC).
Cette époque a vu la transition de l’informatique des grands mainframes centralisés et mini-ordinateurs vers des machines abordables, plus petites et conviviales pouvant tenir sur un bureau, rendant l’informatique accessible aux individus et petites entreprises.

Étapes clés :

  • Apple II (1977) – Bien que sorti à la fin des années 1970, l’Apple II est devenu l’un des premiers ordinateurs personnels les plus réussis et influents.
    Conçu par Steve Wozniak et commercialisé par Apple, il a rendu l’informatique accessible au grand public grâce à son design convivial et sa large gamme de logiciels.

  • IBM PC (1981) – La sortie de l’IBM PC (Modèle 5150) en 1981 fut un moment clé dans l’histoire de l’informatique personnelle.
    L’IBM PC a établi la norme pour les ordinateurs personnels, et son architecture ouverte a permis à d’autres fabricants de produire des systèmes compatibles, conduisant à la prolifération des PC “compatibles IBM”.

L’essor des ordinateurs personnels a nécessité le développement de systèmes d’exploitation capables de gérer les ressources matérielles et de fournir une interface conviviale pour des utilisateurs non experts.
Contrairement aux mainframes et mini-ordinateurs, les ordinateurs personnels étaient conçus pour un usage individuel, leurs systèmes d’exploitation devaient donc être plus simples, plus intuitifs et capables de fonctionner sur du matériel moins puissant.

Exemple

Exemples de systèmes d’exploitation et leurs caractéristiques :

  • PC DOS/MS DOS (1981) – Microsoft Disk Operating System (MS-DOS) fut l’un des systèmes d’exploitation les plus importants des années 1980, notamment sur le marché des PC compatibles IBM.
    MS-DOS était un système d’exploitation à interface en ligne de commande (CLI) permettant aux utilisateurs d’interagir avec l’ordinateur en tapant des commandes.

  • Apple Macintosh (1984) et l’interface graphique utilisateur (GUI) – Le Macintosh fut le premier ordinateur personnel commercialement réussi avec une interface graphique utilisateur (GUI).
    La GUI du Mac était révolutionnaire car elle permettait aux utilisateurs d’interagir avec l’ordinateur à l’aide d’une souris et d’icônes visuelles, rendant l’informatique beaucoup plus accessible à l’utilisateur moyen.
    Le système d’exploitation original du Macintosh, connu sous le nom de System Software, comportait une métaphore de bureau avec fenêtres, icônes, menus et une corbeille pour les fichiers supprimés.
    Cette interface conviviale a rendu le Mac populaire dans les industries créatives telles que le design graphique et l’édition.

En réponse à la popularité croissante des GUI, Microsoft a lancé Windows 1.0 en 1985 comme extension graphique de MS-DOS.
Bien qu’il ne s’agisse pas d’un système d’exploitation à part entière, Windows 1.0 fournissait un environnement fenêtré permettant aux utilisateurs d’exécuter plusieurs applications MS-DOS simultanément.

1.5 — Montée des systèmes d’exploitation modernes (années 1990)

Les années 1990 furent une décennie de transformation pour les systèmes d’exploitation, marquant la transition des débuts de l’informatique personnelle vers des systèmes plus sophistiqués, conviviaux et puissants que nous connaissons aujourd’hui.
Cette période a vu des développements significatifs tant dans les systèmes d’exploitation grand public que d’entreprise, ainsi que l’essor d’internet, qui a profondément influencé la conception et la fonctionnalité des systèmes d’exploitation.

1.5.1 — Microsoft Windows – De 3.0 à 95 et au-delà

Sortis respectivement en 1990 et 1992, Windows 3.0 et 3.1 furent déterminants pour établir Microsoft Windows comme système d’exploitation de bureau dominant.
Ils furent suivis par Windows 95 qui combinait l’interface graphique et la facilité d’utilisation des versions précédentes avec des fonctionnalités plus avancées d’un système d’exploitation moderne.
Il introduisit le menu Démarrer, la barre des tâches, et un système de gestion de fichiers plus intégré, qui devint la base de toutes les versions Windows ultérieures.

1.5.2 — GNU/Linux – La révolution open-source

GNU (GNU’s Not Unix!) est un projet lancé par Richard Stallman en 1983 dans le but de créer un système d’exploitation libre et open-source de type Unix.
Le projet GNU a développé de nombreux composants logiciels essentiels, tels que la GNU Compiler Collection (gcc), la GNU C Library (glibc), et divers utilitaires et outils qui composent le système d’exploitation.
Cependant, le projet GNU manquait initialement d’un noyau, qui est la partie centrale d’un système d’exploitation gérant le matériel et les ressources système.

Information

Le projet GNU a commencé le développement de son propre noyau complet et libre appelé HURD en 1990.
Cependant, en raison de l’adoption rapide de Linux comme noyau, les développements n’ont jamais vraiment rattrapé leur retard.

En 1991, Linus Torvalds, étudiant finlandais en informatique, a publié la première version du noyau Linux, qu’il avait développé comme projet hobby.
Le noyau est responsable de la gestion du matériel, de la mémoire, des processus et des appels système.
Bien que Linux soit souvent appelé système d’exploitation, il s’agit techniquement uniquement du noyau, pas d’un système d’exploitation complet en soi.

Combinés, les outils et utilitaires GNU avec le noyau Linux forment un système d’exploitation complet, communément appelé “GNU/Linux”.
Ce système d’exploitation est ce que la plupart des gens désignent lorsqu’ils parlent de “Linux” dans la conversation générale.

Information

En cherchant des systèmes d’exploitation alternatifs, vous pouvez rencontrer une autre famille de type Unix appelée Berkeley Software Distribution (BSD) incluant FreeBSD, OpenBSD, NetBSD ou DragonFly BSD.
Ces OS sont principalement utilisés pour des tâches très spécifiques telles que les appliances de sécurité, les serveurs Web et les serveurs de fichiers.
Cependant, en note de côté, de larges parties du code de FreeBSD ont été incorporées dans le système d’exploitation MacOS d’Apple.

1.5.3 — MacOS – De System 7 à Mac OS X

Au début des années 1990, le système d’exploitation d’Apple était encore connu sous le nom de System 7.
Il continuait à s’appuyer sur l’interface graphique pionnière des versions antérieures, avec des fonctionnalités comme le multitâche, la mémoire virtuelle, et une expérience utilisateur plus raffinée.
Cependant, à la moitié des années 1990, Apple faisait face à une concurrence croissante de Microsoft et peinait à innover au même rythme.

La fin des années 1990 fut une période de transition significative pour Apple.
Après avoir acquis NeXT en 1997, Apple a commencé à développer un nouveau système d’exploitation basé sur NeXTSTEP, le système d’exploitation créé par la société NeXT de Steve Jobs.
Cela a conduit au développement de Mac OS X, sorti en 2001.
Mac OS X représentait une rupture radicale avec les versions précédentes, avec un noyau basé sur Unix, une interface graphique moderne appelée Aqua, et des fonctionnalités avancées comme le multitâche préemptif, la mémoire protégée, et une architecture plus robuste.

1.5.4 — L’essor d’internet

Les années 1990 ont également vu la croissance rapide d’internet, qui a influencé le développement des systèmes d’exploitation de manière significative.
Les systèmes d’exploitation incluaient de plus en plus un support intégré pour la mise en réseau (protocoles TCP/IP par exemple), la navigation internet, et le courrier électronique.
Microsoft a inclus Internet Explorer avec Windows 95, et Apple a introduit Cyberdog dans le cadre de son framework OpenDoc.
Les systèmes de fichiers en réseau, les outils d’accès à distance, et les fonctionnalités de sécurité sont devenus standards à mesure qu’internet devenait une partie intégrante de l’informatique quotidienne.

1.6 — Ère moderne (années 2000 – Présent)

L’ère moderne des systèmes d’exploitation, s’étendant des années 2000 à aujourd’hui, est caractérisée par des avancées significatives dans la technologie informatique, des changements dans les attentes des utilisateurs, et l’émergence de nouveaux paradigmes dans le développement et le déploiement logiciel.

1.6.1 — Montée de l’Open Source et domination de Linux

Au début des années 2000, Linux s’était fermement établi comme une force dominante sur le marché des serveurs, alimentant tout, des serveurs web aux superordinateurs.
Sa nature open-source a permis un développement rapide et une adaptation à divers besoins, conduisant à son adoption généralisée dans les entreprises, le milieu universitaire, et même sur les ordinateurs personnels.

Exemples de distributions Linux modernes
  • Debian est un système d’exploitation libre et open-source largement utilisé basé sur le noyau Linux.
    C’est l’une des distributions Linux les plus anciennes et les plus influentes, connue pour sa stabilité, son vaste dépôt logiciel, et son engagement envers les principes open-source.

  • Ubuntu est un système d’exploitation populaire basé sur Linux dérivé de Debian.
    Il est conçu pour être convivial, accessible, et adapté à une large gamme d’appareils, y compris les postes de travail, serveurs, et dispositifs IoT.
    Ubuntu est développé et maintenu par Canonical Ltd., qui fournit un support commercial et des services pour l’OS.

  • Arch-Linux est une distribution Linux légère et flexible conçue pour les utilisateurs avancés qui valorisent la simplicité, la transparence, et le contrôle sur leur système d’exploitation.
    Contrairement à de nombreuses autres distributions Linux, Arch Linux suit un modèle de “rolling release”, ce qui signifie qu’il est continuellement mis à jour, et les utilisateurs reçoivent les dernières versions des logiciels sans avoir besoin de passer à une nouvelle version de l’OS.

  • Fedora Linux est une distribution Linux communautaire développée par le Fedora Project et sponsorisée par Red Hat, une grande entreprise de logiciels open-source.
    Elle est souvent considérée comme un “terrain d’essai” pour de nouvelles fonctionnalités qui pourraient éventuellement être incluses dans Red Hat Enterprise Linux (RHEL).

  • Et bien d’autres !
    En raison de la nature open-source de Linux, vous pouvez construire votre propre distribution avec des guides tels que Linux From Scratch qui vous donne toutes les instructions pour construire Linux à partir des sources ou utiliser une distribution comme Gentoo Linux qui est hautement personnalisable et orientée performance pour les utilisateurs souhaitant un contrôle complet sur leur système.

1.7 — Avancées dans les systèmes d’exploitation Windows

Windows XP, sorti en 2001, a marqué un tournant pour Microsoft.
Il combinait stabilité et facilité d’utilisation, devenant l’un des systèmes d’exploitation les plus utilisés de l’histoire.
Les versions successives, incluant Windows Vista, 7, 8, 10, et maintenant 11, ont continué à affiner l’expérience Windows, avec des améliorations en sécurité, conception de l’interface utilisateur, et intégration avec les services cloud.

1.8 — Systèmes d’exploitation mobiles

Les années 2000 et 2010 ont vu la croissance explosive des systèmes d’exploitation mobiles. Android, basé sur Linux, et iOS d’Apple, dérivé de MacOS, sont devenus les plateformes dominantes.
Ces systèmes d’exploitation ont non seulement transformé les téléphones mobiles en puissants dispositifs informatiques mais ont aussi conduit à la création d’un vaste écosystème d’applications et de services.

1.9 — Informatique en nuage et virtualisation

Les années 2000 ont vu l’essor de la technologie de virtualisation, permettant à plusieurs systèmes d’exploitation de fonctionner simultanément sur une seule machine physique.
VMware, Xen, et plus tard, KVM sont devenus des acteurs clés, révolutionnant les centres de données en améliorant l’utilisation des ressources et en permettant l’informatique en nuage.

L’émergence de l’informatique en nuage a conduit au développement de systèmes d’exploitation conçus spécifiquement pour les environnements cloud.
Des systèmes d’exploitation comme les AMIs d’Amazon AWS, les systèmes d’exploitation Cloud de Google, et la plateforme Azure de Microsoft sont devenus des éléments essentiels de l’infrastructure informatique moderne.

1.10 — Internet des objets (IoT)

La prolifération des dispositifs connectés a conduit au développement de systèmes d’exploitation spécialisés pour l’Internet des objets (IoT).
Ces OS sont conçus pour fonctionner sur une large gamme d’appareils, des appareils domestiques intelligents aux capteurs industriels.

Pour les applications où le timing et la fiabilité sont critiques, les systèmes d’exploitation en temps réel sont devenus plus répandus.
Ces systèmes sont utilisés dans les dispositifs embarqués, les équipements médicaux, les systèmes automobiles, et d’autres domaines où un contrôle précis est essentiel.

2 — Composants et fonctionnalités des systèmes d’exploitation

Beaucoup des fonctionnalités des systèmes d’exploitation modernes ont été présentées dans la section historique précédente.
Cependant, à mesure que les systèmes d’exploitation deviennent de plus en plus divers, il devient de plus en plus difficile d’en donner une définition définitive.
Néanmoins, certains éléments clés les définissent.

2.1 — Gestion des ressources / Noyau

L’OS assure la gestion des composants matériels et des ressources, en particulier ceux de l’architecture von Neumann, qui sont l’unité centrale de traitement (CPU), la mémoire, les entrées/sorties avec la gestion ajoutée du stockage des fichiers.
Plus précisément, il a la responsabilité d’allouer ces ressources aux autres programmes pouvant s’exécuter sur l’ordinateur.

Ces tâches sont généralement prises en charge par le composant central du système appelé Kernel et qui est l’un des premiers programmes chargés au démarrage (après le bootloader).
Le code du Kernel est généralement chargé dans une zone mémoire séparée, inaccessible aux autres applications, appelée Kernel space pour protéger la mémoire et le matériel de l’ordinateur contre les logiciels malveillants ou bogués.
La zone où tous les autres programmes sont stockés en mémoire est appelée User space.

Ses fonctions clés sont les suivantes :

  • Gestion des processus – Le noyau gère la création, l’exécution et la terminaison des processus.
    Il planifie le temps CPU entre les processus, assurant un multitâche efficace.

  • Gestion de la mémoire – Le noyau gère la mémoire du système, allouant de l’espace aux processus et s’assurant qu’ils ne corrompent pas les données des autres.
    Il gère également la mémoire virtuelle, qui permet au système d’utiliser plus de mémoire que ce qui est physiquement disponible.

  • Gestion des périphériques – Le noyau communique avec les périphériques matériels via des pilotes de périphériques, qui sont des composants logiciels spécialisés traduisant des commandes génériques en instructions spécifiques au matériel.

  • Gestion du système de fichiers – Le noyau gère les fichiers et répertoires sur les dispositifs de stockage, gérant la création, suppression, lecture et écriture des fichiers.
    Il applique également les permissions d’accès pour assurer la sécurité des données.

  • Communication inter-processus (IPC) – Le noyau facilite la communication entre processus, leur permettant de partager des données et de synchroniser leurs actions.

  • Sécurité et contrôle d’accès – Le noyau applique les politiques de sécurité, telles que l’authentification des utilisateurs et la gestion des permissions, pour protéger le système contre les accès non autorisés et les abus.

Les noyaux peuvent être de différents types :

  • Noyau monolithique – Dans cette conception, toutes les fonctions de base de l’OS (comme la gestion des périphériques, la gestion du système de fichiers, et la gestion de la mémoire) sont intégrées dans un seul noyau volumineux.
    Bien que cela puisse offrir des avantages de performance, cela peut être plus sujet aux bugs et moins modulaire.
    Des exemples incluent les noyaux Linux et Unix.

  • Microkernel – Ce type de noyau minimise les fonctions exécutées en mode noyau, les limitant souvent à la gestion basique des processus et de la mémoire.
    D’autres services, comme les pilotes de périphériques et les systèmes de fichiers, s’exécutent en espace utilisateur.
    Les microkernels sont plus modulaires et peuvent être plus stables, mais peuvent impliquer plus de surcharge due aux changements de contexte entre espace utilisateur et espace noyau.
    Un exemple est le noyau MINIX.

  • Noyau hybride – Un noyau hybride est un compromis entre les noyaux monolithiques et microkernels.
    Il exécute certains services en espace noyau pour des raisons de performance, tandis que d’autres s’exécutent en espace utilisateur pour la modularité et la stabilité.
    Des exemples incluent le noyau Windows NT (le noyau actuel de Windows 11) et le noyau MacOS XNU.

2.2 — Interface utilisateur (UI) / SHELLS

L’interface utilisateur, parfois appelée Shell, est ce qui permet à l’utilisateur d’interagir avec le système d’exploitation.
Elle agit comme un intermédiaire entre l’utilisateur et le noyau du système, permettant l’exécution de commandes, scripts et programmes.

Ce shell peut être de deux types différents :

  • Shells en ligne de commande sont une interface textuelle qui permet aux utilisateurs d’interagir avec le système d’exploitation en tapant des commandes.
    Contrairement aux interfaces graphiques, qui reposent sur des éléments visuels comme fenêtres, boutons et icônes, les shells en ligne de commande exigent que les utilisateurs saisissent des commandes textuelles pour effectuer des tâches telles que la gestion des fichiers, le contrôle des processus, et la configuration du système.

    Les shells en ligne de commande permettent aux utilisateurs d’écrire des scripts, qui sont des séquences de commandes stockées dans un fichier.
    Ces scripts peuvent automatiser des tâches répétitives, simplifier des processus complexes, et effectuer du traitement par lots.
    Les shells gèrent un ensemble de variables d’environnement qui définissent le contexte dans lequel les commandes s’exécutent.
    Ces variables incluent des informations comme le répertoire de travail courant, les préférences utilisateur, et les détails de configuration système.
    Les shells en ligne de commande offrent des fonctionnalités robustes de contrôle des jobs, permettant aux utilisateurs de gérer plusieurs processus (jobs) simultanément.
    Les utilisateurs peuvent démarrer, arrêter, mettre en pause ou reprendre des jobs, et ils peuvent exécuter des jobs au premier plan ou en arrière-plan.

    Exemples de shells en ligne de commande
    • Bourne shell (sh) est l’un des premiers interprètes de commandes Unix les plus influents, développé par Stephen Bourne aux Bell Labs à la fin des années 1970.
      Il était le shell par défaut des systèmes Unix avant d’être remplacé par des shells plus avancés dans les versions Unix ultérieures.

    • Bash (Bourne-Again shell) est le shell par défaut sur de nombreux systèmes de type Unix, y compris la plupart des distributions Linux.
      Il est connu pour sa compatibilité avec les anciens scripts Bourne shell, ainsi que pour de nombreuses améliorations comme des capacités de scripting améliorées, l’historique des commandes, et l’expansion des accolades.

    • Zsh est une version étendue de Bash avec plus de fonctionnalités, telles que l’autocomplétion avancée, le globbing (correspondance de motifs pour les noms de fichiers), et le support de plugins.
      Zsh est hautement personnalisable et est le shell par défaut de MacOS depuis la version 10.15 (Catalina).

    • COMMAND.com/cmd.exe est l’interpréteur de commandes pour DOS (Disk Operating System) et les premières versions de Windows.
      Il a été remplacé par cmd.exe, l’interpréteur de commandes pour les systèmes Windows basés sur NT (incluant Windows 2000, XP, Vista, 7, 8, 10, et 11).
      Le langage utilisé par cmd.exe est appelé Batch script (ou simplement Batch).

    • PowerShell, développé par Microsoft, PowerShell est principalement utilisé sur Windows mais est aussi disponible sur Linux et MacOS.
      Contrairement aux shells Unix traditionnels, PowerShell est orienté objet, ce qui signifie qu’il transmet des objets plutôt que du texte brut entre les commandes.
      Le langage utilisé par PowerShell est appelé PowerShell Scripting Language (ou simplement PowerShell).

  • Shells graphiques sont un type d’interface utilisateur qui fournit aux utilisateurs un accès aux fonctions d’un système d’exploitation sans avoir à taper des commandes dans le CLI.
    La plupart des shells graphiques fournissent aux utilisateurs des fenêtres pour afficher des informations, des boutons et barres de menus ainsi que des icônes et un pointeur de souris.
    La plupart des OS orientés bureau utilisent ce type de shell graphique tels que Windows, MacOS et de nombreuses distributions Linux, ils sont généralement construits sur le concept d’un “bureau électronique”, où les fichiers de données sont représentés comme s’ils étaient des documents papier sur un bureau physique, et les programmes applicatifs ont des icônes visuelles plutôt que d’être lancés via des instructions en ligne de commande.

    Ces shells graphiques sont souvent construits au-dessus de ce qu’on appelle un système de fenêtrage comme le système X Window pour Linux.
    Nous ne développerons pas ces aspects dans cette conférence mais n’hésitez pas à les consulter.

    Exemples de shells graphiques
    • GNOME shell est le shell graphique de l’environnement de bureau GNOME pour Linux.
      Cet environnement est largement utilisé, convivial, axé sur la simplicité et la facilité d’utilisation.
      C’est l’environnement par défaut pour de nombreuses distributions Linux comme Ubuntu et Fedora.

    • KDE Plasma est un shell graphique pour Linux connu pour sa personnalisation et ses riches fonctionnalités, KDE Plasma offre une expérience de bureau plus traditionnelle avec un large éventail d’options pour que les utilisateurs adaptent leur environnement.

    • Windows shell est l’interface utilisateur graphique fournie par Microsoft Windows.
      Il englobe divers éléments avec lesquels les utilisateurs interagissent pour utiliser leur ordinateur, tels que le bureau, la barre des tâches, le menu Démarrer, l’explorateur de fichiers, et la zone de notification.

    • Aqua est l’interface graphique utilisateur et le thème visuel pour MacOS, il s’intègre parfaitement à l’architecture Unix sous-jacente de MacOS, offrant une expérience utilisateur cohérente et visuellement attrayante.
      Le Dock, Finder, et Mission Control sont des composants clés de l’interface Aqua, fournissant aux utilisateurs un accès facile aux applications, fichiers, et outils de gestion système.

3 — Autres composants et fonctionnalités

Nous avons présenté les principaux composants du système d’exploitation, du noyau à l’interface utilisateur (qu’elle soit CLI ou GUI).
Cependant, sur les systèmes d’exploitation modernes, il existe beaucoup plus de composants nécessaires pour utiliser correctement l’ordinateur.
Ici, nous avons l’intention de les résumer ainsi que d’autres fonctionnalités importantes afin de vous donner un aperçu succinct du fonctionnement interne de votre propre machine.

3.1 — Init

Nous avons déjà mentionné qu’au démarrage, le noyau était l’un des premiers programmes à s’exécuter sur l’ordinateur.
Cependant, il y a quelques étapes supplémentaires entre son démarrage et un environnement pleinement fonctionnel.
Dans la plupart des systèmes, ces étapes sont sous la responsabilité d’un programme spécifique chargé de lancer les autres.
Sous Linux, ce programme s’appelle généralement Init en référence au programme Unix original Init chargé de lancer les différents shells.
Ce programme peut cependant varier d’un OS à un autre.
Sous Linux, deux programmes Init sont généralement utilisés :

  • Le historique SysV Init.

  • Il a été majoritairement remplacé dans les distributions modernes par le programme systemd.

Le launchd assume ce rôle sur MacOS et le Windows Service Control Manager (SCM) peut être vu comme un équivalent sous Windows.

3.2 — Daemons et services

Si vous regardez tous les processus en cours d’exécution lorsque vous utilisez votre OS, vous constaterez très certainement que Init et le shell ne sont pas les seuls programmes en fonctionnement.
Les daemons et services sont tous deux des processus en arrière-plan dans les systèmes d’exploitation qui effectuent des tâches sans interaction directe avec l’utilisateur.
Ils sont cruciaux pour gérer diverses fonctions système, traiter les requêtes, et soutenir le fonctionnement global de l’OS.
Bien que les termes soient parfois utilisés de manière interchangeable, ils ont des connotations spécifiques selon le contexte ou le système d’exploitation.

  • Daemons – Dans les systèmes Unix-like (par exemple, Linux, MacOS), un daemon est un processus en arrière-plan qui s’exécute en continu et remplit des fonctions spécifiques.
    Les daemons sont souvent lancés lors du processus de démarrage et continuent à s’exécuter en arrière-plan, attendant les requêtes ou effectuant des tâches périodiques.
    Les noms des daemons se terminent souvent par la lettre “d” et peuvent être utilisés pour gérer les connexions réseau (ftpd, sshd), enregistrer les événements système (syslogd) ou planifier des tâches spécifiques (cron) par exemple.

  • Services – Le terme service est plus couramment utilisé dans le contexte des systèmes d’exploitation Windows, bien qu’il puisse s’appliquer à tout OS.
    Un service est essentiellement un programme ou processus qui s’exécute en arrière-plan, similaire à un daemon, et fournit une fonctionnalité spécifique ou un support à d’autres programmes et composants système.
    Les services sous Windows peuvent être gérés via le panneau de configuration Services ou via des outils en ligne de commande comme sc (Service Control).
    Il n’y a pas de convention de nommage spécifique, néanmoins vous pouvez généralement trouver les termes service, agent ou manager dans leur nom.

3.3 — Utilisateurs

Dans un système d’exploitation (OS), les utilisateurs sont des entités qui interagissent avec le système, représentant typiquement des individus ou des processus qui accèdent et utilisent les ressources et services de l’OS.
Les utilisateurs sont catégorisés de différentes manières selon leurs rôles, permissions, et leur manière d’interagir avec l’OS.

  • Utilisateurs humains :

    • Les utilisateurs réguliers sont des comptes individuels créés pour les tâches quotidiennes.
      Ils ont des privilèges limités et ne peuvent accéder qu’à leurs fichiers, programmes, et données.
    • Le superutilisateur (Administrateur ou Root) possède des privilèges élevés lui permettant d’effectuer des tâches administratives telles que l’installation de logiciels, la modification des paramètres système, et la gestion des autres comptes utilisateurs.
      Dans les systèmes Unix-like (par exemple, Linux, MacOS), le superutilisateur s’appelle root.
      Sous Windows, il est souvent appelé Administrateur.
  • Comptes de service :

    • Les processus système sont des comptes à usage spécial utilisés par l’OS pour exécuter des services, daemons, et processus en arrière-plan.
      Ils n’ont généralement pas la capacité de se connecter et sont utilisés en interne par l’OS pour gérer des tâches au niveau système.
    • Les utilisateurs invités sont des comptes avec des permissions très limitées, généralement utilisés pour un accès temporaire.
      Ces comptes ne peuvent pas effectuer de modifications système globales ni accéder aux données des autres utilisateurs.

Les utilisateurs ont différents niveaux de permission, ce qui aide à maintenir la sécurité du système.
L’OS s’assure que les utilisateurs ne peuvent accéder qu’aux fichiers et ressources auxquels ils sont autorisés, prévenant les actions non autorisées.
L’OS suit quel utilisateur utilise quelles ressources (CPU, mémoire, fichiers) et les gère en conséquence pour assurer un fonctionnement efficace.
En associant les actions à des utilisateurs spécifiques, l’OS peut enregistrer les activités pour l’audit et la responsabilité, ce qui est important pour la sécurité et l’administration système.

Pour aller plus loin

4 — Séquence complète de démarrage

Dans cette conférence, nous avons présenté les principaux composants du système d’exploitation.
Cependant, pour démarrer, l’ordinateur ne peut généralement pas charger directement le noyau système.
La séquence de démarrage d’un ordinateur est le processus qui se produit lorsqu’un ordinateur est mis sous tension ou redémarré, initialisant le matériel et chargeant le système d’exploitation.
Voici un aperçu détaillé des étapes impliquées dans la séquence de démarrage :

  1. Mise sous tension – Lorsque l’ordinateur est mis sous tension, l’unité d’alimentation (PSU) envoie de l’énergie à la carte mère et aux autres composants.
    Le CPU reçoit l’alimentation et commence à exécuter des instructions.

  2. POST (Power-On Self-Test) – Le firmware BIOS/UEFI, stocké sur une puce de la carte mère, exécute un POST pour vérifier les composants matériels de base (CPU, RAM, clavier, dispositifs de stockage, etc.) afin de s’assurer qu’ils fonctionnent correctement.
    En cas d’erreur, le POST signale généralement cela par une série de bips ou de codes d’erreur.

  3. Chargement du BIOS/UEFI – Après le POST, le BIOS/UEFI initialise le matériel, identifie les périphériques connectés (comme les disques durs, SSD, clés USB), et prépare le système à charger le système d’exploitation.

  4. Sélection du périphérique de démarrage – Le BIOS/UEFI recherche un périphérique amorçable selon l’ordre de démarrage configuré dans les paramètres (généralement le disque dur interne ou SSD en premier).
    Il recherche ensuite sur le périphérique sélectionné un Master Boot Record (MBR) ou une table de partition GUID (GPT) contenant le chargeur de démarrage.

  5. Exécution du bootloader – Le chargeur de démarrage (par exemple, GRUB pour Linux, Windows Boot Manager pour Windows) est chargé en mémoire depuis le périphérique de démarrage.
    Le rôle du bootloader est de charger le noyau du système d’exploitation en mémoire.
    Il peut fournir un menu pour sélectionner différents systèmes d’exploitation ou options de récupération si plusieurs sont installés.

  6. Chargement du noyau – Le bootloader charge le noyau du système d’exploitation dans la RAM.
    Le noyau est le cœur du système d’exploitation, responsable de la gestion du matériel, de la mémoire, des processus, et des appels système.

  7. Initialisation du noyau – Le noyau initialise le reste du système d’exploitation, y compris les pilotes de périphériques, la gestion de la mémoire, et les processus système.
    Il monte également le système de fichiers racine.

  8. Démarrage des processus système – Le système d’exploitation démarre les processus initiaux, tels que init ou systemd sous Linux, ou le Session Manager Subsystem (SMSS) sous Windows.
    Ces processus initialisent les autres services et interfaces utilisateur.

  9. Authentification utilisateur – Enfin, le système présente un écran de connexion ou une invite pour l’authentification de l’utilisateur.
    Après la connexion de l’utilisateur, le système d’exploitation charge l’environnement utilisateur (bureau, applications, etc.).

  10. Environnement utilisateur chargé – Une fois l’environnement utilisateur chargé, l’ordinateur est entièrement démarré et prêt à être utilisé.

Cette séquence complète se déroule généralement en quelques secondes à une minute, selon le matériel et le système d’exploitation.

Pour aller plus loin

  • Anneau de protection.

    Les anneaux de protection sont une architecture de sécurité utilisée par les systèmes d’exploitation pour gérer l’accès aux ressources système et isoler différents niveaux de privilèges.

  • Authentification.

    Page sur l’authentification et le contrôle d’accès dans Debian