Introduction aux systèmes d'exploitation - Chapitre 1 : Introduction aux OS
Cette synthèse est composée de trois parties qui sont :
- Introduction aux OS
- Les processus
- La mémoire
Commençons donc aujourd'hui par la partie 1.
1.1 Qu’est-ce qu’un OS ?
Un OS est le logiciel le plus important d’une machine, il fournit :
- La gestion des ressources
- Une base pour le développement et l’exécution de programme d’application
Étudier les OS est important car ceci permet :
- D'améliorer nos propres programmes en comprenant comment l'OS fonctionne
- De voir les solutions apportées à des problématiques que l'on risque de rencontrer dans nos propres programmes
- C’est une étude théorique (mais réalisable et réalisée dans la pratique) intéressante sur la recherche de l’efficacité.
1.2 Historique des systèmes d'exploitation
1.2.1 Première génération de systèmes d'exploitation
1936 —> 1955
Relais et tubes à vides
Programmés par connecteurs puis cartes perforées
Apparition du terme "bug" (vient d'un insecte dans une machine)
1.2.2 Seconde génération de systèmes d'exploitation
Apparition du transistor —> fiabilité ++
Commencent à être vendus (distinction constructeur, opérateur, programmeur et utilisateur)
Mode batch et interprète de commandes pour les charger
3 dérouleurs de bande
- Contient OS
- Contient le programme à exécuter et ses données
- Sorties du programme
En amont, un ordi plus petit traduit sur bande les cartes perforées
En aval, un autre plus petit imprime le résultat sur bande
Pour éviter la perte de temps —> plusieurs programmes par bande —> Moins de déplacement opérateur (humains)
1.2.3 Troisième génération de systèmes d'exploitation
Apparition des circuits intégrés —> diminuent rapport coût/performances
Apparition des familles de machines —> OS et structure différente
C’est maintenant le même ordinateur qui calcule et qui stocke —> Spool (Simultaneous Peripheral Operation On Line)
Multi-programmation : mémoire reçoit plusieurs programmes —> Si on attend fin I/O, on passe le processeur sur une autre tâche —> Premiers contrôles matériels des accès invalide en mémoire
Traitement par lot —> Pas de debug en temps réel —> On crée système à temps partagé.
On considère le C comme du haut niveau
1.2.4 Quatrième génération de systèmes d'exploitation (les ordinateurs personnels)
Grâce aux circuits LSI et VLSI
Création de réseaux de machines et baisse des coûts d’accès à ceux ci
Prise en compte des réseaux par les OS
1.2.5 Et après
Ordinateurs quantiques
…
1.3 Problématiques
Gérer simultanément :
- La multiplicité des ressources
- La complexité des composants
1.4 Fonctionnalités d’un OS
L’OS a pour but :
- De décharger le programmeur d’une part de travail énorme (par exemple la gestion du bras du HDD).
- De protéger le système et les usagers des mauvaises manipulations (pas sur tous les OS).
- D’offrir une vue simple et uniforme de la machine et de ses composants
L’OS peut être considéré sous deux points de vue logiques :
- La machine virtuelle (vue ascendante)
1. Uniformise les entrées-sorties
2. Virtualise et partage la mémoire
3. SGF (+ droits d'accès)
4. Sécurité et traitement des erreurs.
5. Gestion des processus et de la communication inter-processus
- Gestionnaire de ressources (vue descendante)
1. Fonctionnement des ressources (usagers, contrôle accès, interruption)
2. Respect des délais
3. Gestion des erreurs + évitement des conflits
1.5 Place de l’OS dans la machine
Le système d’exploitation sert d’interface entre les programmes d’applications, les programmes systèmes (compilateur, interprèteur de commandes) et le langage machine et autres couches de bas niveau.
Ne font pas partie des OS :
- L’interprèteur de commandes
- Le GUI
- Les utilitaires (commandes)
Ces programmes s’exécutent en mode utilisateur car ils n’ont pas besoin d’un accès au matériel ni à toutes les fonctionnalités du processeur.
—> L'OS est protégé par le matériel contre les erreurs de manipulations (le processeur bloque l'accès à certaines parties de la mémoire).
1.6 Principes des OS
1.6.1 Appels systèmes
Ils constituent le moyen pour un programme d’application (mode utilisateur —> non privilégié) d’accéder à l’OS. Ils s’exécutent via des traps (appels système) qui permettent de passer en mode privilégié (ou mode kernel) si il existe et d’exécuter une insctruction système.
Le mode noyau se différencie du mode utilisateur par :
- Le code et les données de l’OS ne sont accessibles que dans ce mode (on modifie les segments mémoires accessibles).
- La possibilité d’accéder à la table des segments mémoires
- La possibilité de faire des entrées-sorties (accéder au matériel)
La notion de mode noyau n’a rien à voir avec la notion de super-utilisateur
Les programmes ne savent pas où ils seront chargés en mémoire ni où contacter le trap vu que celui-ci est stocké dynamiquement au lancement de l’OS dans une portion de la mémoire qui n’est accessible qu’en mode noyau.
Les traps sont donc implémentés de façon matérielle au niveau du CPU. Quand un programme demande un trap, le processeur change son registre PSW et switch en mode kernel afin que toute la mémoire soit accessible.
1.6.2 Les processus
Un processus est une instance de programme.
Il es représenté dans l’OS par :
- Un PID (process id) unique
- Ses données
- Sa pile d’exécution
- Les valeurs des registres processeurs
- Ses fichiers ouverts
- Son état (prêt, bloqué, running ou "en cours d'exécution")
Il existe deux types de processus :
1. Les processus lourds possédant chacun leurs données propres
2. Les processus léger (les threads) qui existent au sein même d’un processus lourd. Ils ont leur propre pile d’exécution mais partagent les même données.
1.6.3 Le système de gestion de fichiers
Le SGF pour but de fournir un modèle d’organisation des informations persistantes.
Il uniformise également les I/O de manière cohérente avec une gestion indépendante du support matériel.
Grâce à lui, beaucoup de principes de l’OS sont considérés comme des fichiers par les autres programmes et parties de l’OS.
Par exemple :
- Les fichiers réels
- Les terminaux
- Les périphériques externes (souris, clavier, mémoire, ...)
- Les pipes (nommés ou non) ou tubes, ainsi que les sockets
1.7 Types d’OS
Il existe plusieurs types de systèmes d'exploitation chacun est spécialisé dans son milieu. Ils sont regroupés en familles en fonction des contraintes pesant sur eux.
1.7.1 OS spécialisé en mono-utilisateur
- Un seul utilisateur à la fois
- Construit sur une vm simple
- Peuvent être multi-tâche
- Pas de notion d’usager et de protection.
Exemple : Windows XP
1.7.2 OS spécialisé en Contrôle des processus
Utilisés dans le milieu industriel pour le contrôle de machines ou de dispositifs complexes
- Ont pour but de réagir en temps réel à des événements issus de capteurs.
- Orientés temps réel.
Exemple : RTX
1.7.3 OS spécialisé en Serveurs de fichiers
- Gère des gros ensemble d’informations
- Interrogeable à distance —> temps de réponse réduit + possibilité de mises à jour à la volée
- Le RAID est possible
- Actuellement ce sont souvent des sur-couches aux OS
Exemple : Linux
1.7.4 OS spécialisé en Transactionnel
- Bases de données modifiées de manières très fréquente via des transactions —> temps de réponse - - + cohérence des données +
- Résolution des conflits
Actuellement ce sont des sur-couches aux OS
1.7.5 OS Général
- Multi-utilisateurs
- Multi-tâches
- Systèmes de fichiers perfectionnés pour supporter toute utilisation
- Supportent le traitement par lots, le temps partagé et la multi-programmation
Exemple : Linux, MacOSX, BSD
1.8 Structure interne des OS généraux
1.8.1 Les systèmes monolithiques
Ce sont les plus répandus.
Ils n’ont pas réellement de structure interne, ils sont composés d’une collection de procédures chacune visible de toutes les autres (elles peuvent donc s’appeler entre elle pour autant que l’on respecte les modes kernel et utilisateur).
Ils ont une structure interne à 3 niveaux (aucune protection contre les erreurs) :
1. La procédure principale exécutée lors de chaque trap, elle appelle le service demandé par le trap
2. Les procédures de service dédiées au traitement de chaque appel système. Elles peuvent s’appuyer sur des procédures utilitaires.
3. Les procédures utilitaires assistent les procédures de service.
1.8.2 Système en couches
Ils se basent sur les systèmes monolithiques en les structurant par couches, chacune s’appuyant sur la couche immédiatement inférieure.
Exemple :
Le premier système de ce type s’appelait THE et était un système de traitement par lots décomposé en 6 couches :
Couche 0 : allocation du processeur entre les processus sur base du temps ou d’interruptions - Transparence pour les processus séquentiels au-dessus.
Couche 1 : gestion de la mémoire et du swap - Transparence de la gestion de la mémoire pour les couches supérieures
Couche 2 : communication entre les processus - Au-dessus chaque processus a son terminal indépendant —> transparence
Couche 3 : gère les périphériques I/O (place les infos lues dans des mémoires tampon) - Les processus communiquent donc avec des périphériques abstraits —> transparence
Couche 4 : programmes utilisateurs
Couche 5 : processus de l’opérateur système
1.8.3 Machines virtuelles
L’idée de la machine virtuelle consiste à séparer complètement le partage du processeur et une machine munie d’une interface plus pratique que la programmation directe du matériel.
Le coeur du système est appelé moniteur de la VM (ou hyperviseur), il virtualise le matériel pour chacune des machines émulées.
Il en existe de deux types :
1. L’hyperviseur est l’OS de base et émule les autres (Xen, KVM, ...)
2. L’hyperviseur est un programme comme les autres (VirtualBox, VMware,...)
1.8.4 Systèmes client-serveur
Dans ce cas chaque machine a son OS spécifique.
Chaque machine est un système à micro noyau (tous identiques mais avec des programmes spécialisés) servant à la communication afin que les processus client puissent effectuer leurs requêtes auprès du bon serveur parmi ceux composants l’OS.
Ce modèle se prête très bien aux systèmes distribués mais sont limités par la vitesse des réseaux (qui crée des goulots d’étranglement). On adopte donc plutôt des approches hybrides, chaque serveur gérant ses processus mais s’adressant à un autre pour une tâche spécifique spécialisée.
Ce modèle pose aussi problème dans la frontière mode utilisateur / mode kernel ; en effet, le client ne peut accéder directement au mode kernel du serveur.
1.8.5 Micro Kernel
Conçu pour minimiser le temps en mode noyau —> Moins de pannes
Ils sont principalement utilisé pour les ordinateurs ne pouvant jamais tomber en panne (par exemple dans les avions).