Cours ‐ Introduction aux systèmes d'exploitations - vbridonneau/CoursSysteme GitHub Wiki
Le système d'exploitation (SE) est un logiciel essentiel qui agit comme une interface entre l'utilisateur, les applications et le matériel informatique. Son rôle principal est de gérer et de coordonner l'utilisation des ressources matérielles, facilitant ainsi l'exécution des programmes. Plusieurs exemples de systèmes d'exploitation existent, dont Microsoft Windows, macOS, Linux, et d'autres dérivés d'Unix.
Il existe une diversité de systèmes d'exploitation qui alimentent nos appareils informatiques au quotidien. Parmi les plus populaires, Microsoft Windows domine le secteur des ordinateurs personnels, offrant une interface conviviale pour les utilisateurs. macOS, développé par Apple, séduit par son design élégant et ses fonctionnalités intégrées.
Linux, un système d'exploitation open source, se distingue par sa flexibilité et sa robustesse, et est largement utilisé dans les environnements serveur et les systèmes embarqués. Les systèmes basés sur Unix, tels que FreeBSD, offrent des performances et une stabilité exceptionnelles. Pour les amateurs de personnalisation, Android, basé sur le noyau Linux, domine le marché des smartphones. En résumé, chaque système d'exploitation a sa propre histoire et influence, créant une mosaïque riche d'expériences numériques.
Système d'Exploitation | Caractéristiques | Anecdotes |
---|---|---|
Microsoft Windows | Interface conviviale, prédominant sur les PC | Le célèbre "écran bleu de la mort" est une icône informatique associée aux plantages système. |
macOS | Design élégant, intégration étroite avec les produits Apple. | Le système d'exploitation des Macintosh est connu pour ses noms basés sur des félins (par exemple, macOS Sierra, macOS Mojave). |
Linux | Open source, offre une grande flexibilité et stabilité. | La mascotte de Linux est le pingouin Tux, créé par le fondateur du noyau Linux, Linus Torvalds. |
FreeBSD | Basé sur Unix, réputé pour ses performances et sa stabilité. | Le logo de FreeBSD est un démon appelé Beastie. |
Android | Basé sur le noyau Linux, dominant sur les smartphones. | Les versions d'Android portent des noms de desserts (par exemple, KitKat, Marshmallow). |
L'ordonnanceur est une composante cruciale du système d'exploitation. Il gère l'allocation du temps processeur entre les différents processus en cours d'exécution. Son objectif est d'optimiser l'utilisation du processeur, assurant une exécution efficace des tâches. On distingue principalement deux mécanismes assurant la tâche d'allouer la ressource processeur:
- Soit le système est préemptif, c'est-à-dire qu'il gère lui même l'accès au CPU. C'est lui qui accorde ou retire l'accès à cette ressource. De manière équivalente on peut voir le système d'exploitation comme un chef d'orchestre.
- Sinon, on dira que le système est collaboratif, c'est-à-dire qu'il laisse les processus se gérer entre eux pour accèder au CPU. Dans ce cas, c'est au processus de faire attention
La MMU (Memory Management Unit) est responsable de la gestion de la mémoire physique. Elle assure le mapping entre les adresses virtuelles utilisées par les programmes et les adresses physiques du matériel. La MMU permet ainsi une utilisation transparente et efficace de la mémoire.
Image obtenu en utilisant le programme lstopo
disponible en installant le paquet hwloc
.
Le système d'exploitation gère également les périphériques, tels que les disques, imprimantes, et claviers. Il offre une interface standardisée pour les applications, simplifiant ainsi l'accès et l'utilisation de ces périphériques.
Les appels système sont des mécanismes par lesquels les programmes demandent des services au noyau du système d'exploitation. Ces services peuvent inclure la création de fichiers, l'accès à la mémoire, la gestion des processus, etc. Les appels système fournissent une interface standardisée entre les applications et le noyau, permettant aux programmes de bénéficier des fonctionnalités du système d'exploitation de manière sécurisée et contrôlée.
Pour effectuer un appel système en C, il est possible d'utiliser la
surcouche syscall
que l'on obtient en incluant :
#include <unistd.h>
#include <sys/syscall.h> /* Pour les définitions des macros SYS_xxx */
long syscall(long number, ...);
Chaque appel système à un identifiant sous la forme SYS_xxx
.
Les points de suspensions ...
doivent être remplacer par les paramètres de l'appel système que l'on souhaite effectuer.
Il existe une interface pour chaque appel système pour ne pas avoir à passer par syscall, mais pour directement exécuter un appel système précis.
Les appels systèmes en C sont souvent encapsulés dans des fonctions portant leur nom et ont souvent un prototype ressemblant à :
long appel_system(... /* paramètres */);
Le retour de chaque appel système est tel qu'il vaut 0 ou une valeur positive si l'appel s'est exécuté sans incident.
Autrement, le retour est négatif (égal à -1) et errno
contient le code d'erreur associé au problème rencontré.
Quelques exemples :
Appel système | Description |
---|---|
fork |
Création d'un processus |
clone |
Création d'un processus plus précise qu'avec fork
|
wait |
Attente d'un processus fils quelquonque |
write |
Écriture dans un fichier |
read |
Lecture dans un fichier |
open |
Ouvre un fichier |
close |
Ferme un fichier |
mmap |
Allocation/Projection de la mémoire |
munmap |
Désallocation de la mémoire |
Chacun de ces appels systèmes possède une documentation accessible via la commande man
suivit du numéro de la section consacrée aux appels systèmes : 2.
Par exemple pour accéder à la documentation de l'appel système write
, il suffit d'écrire
man 2 write
Dans chaque page associée à un appel, on trouve plusieurs informations comme le prototype de l'appel système, mais également les headers nécessaires pour le définir. On trouve par ailleurs une liste d'erreurs potentielles qui pourrait survenir lors de l'appel.