105 lines
4.3 KiB
Markdown
105 lines
4.3 KiB
Markdown
---
|
|
title: "Systèmes d'exploitation : Introduction"
|
|
date: 2021-09-10
|
|
tags: ["système", "appels système", "interruption"]
|
|
categories: ["Systèmes d'exploitation", "Cours"]
|
|
---
|
|
|
|
## Qu'est ce que c'est?
|
|
|
|
D'après
|
|
[Wikipedia](https://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27exploitation) "
|
|
|
|
> un système d'exploitation est est un ensemble de programmes qui dirige
|
|
> l'utilisation des ressources d'un ordinateur par des logiciels applicatifs.
|
|
|
|
Il permet l'abstraction matérielle *(via les pilotes de périphériques)*, la
|
|
gestion des processus *(et leur séparation, permettant à un processus défectueux
|
|
de ne pas impacter les autres)*, la gestion fine des ressources...
|
|
|
|
Le systèmes d'exploitation prend en charge la gestion du processeur, de la
|
|
mémoire, des accès disques, de la pile réseau, les services et souvent aussi
|
|
l'interface graphique. Il peut-être *(rarement)* mono-utilisateur ou
|
|
multi-utilisateur.
|
|
|
|
Il est donc important de ne pas confondre **Noyau** et système d'exploitation,
|
|
le premier étant une partie du second.
|
|
|
|
## Les interruptions
|
|
|
|
D'après [Wikipedia](https://fr.wikipedia.org/wiki/Interruption_(informatique)) :
|
|
|
|
> une interruption est une suspension temporaire de l'exécution d'un programme
|
|
> informatique par le microprocesseur afin d'exécuter un programme prioritaire
|
|
> (appelé service d'interruption)."
|
|
|
|
Les interruptions peuvent être envoyées par les périphériques ou le CPU
|
|
lui-même. Lors de son envoi, aucun message n'est envoyé, seulement son numéro,
|
|
le CPU fait alors un saut vers une routine définie par **la table
|
|
d'interruption**. Cette table est mise en place par le *noyau* en RAM. Cette
|
|
table contient une entrée par interruption.
|
|
|
|
Il existe deux grand type
|
|
d'interruption:
|
|
|
|
* Celle basées sur le matériel
|
|
* Celle basée sur le temps (horloge)
|
|
|
|

|
|
|
|
La routine propre à l'interruption appelle ensuite une *iret* afin de reprendre
|
|
l'exécution précédente.
|
|
|
|
sous certaines conditions, certaines interruptions sont "masquable" *(mais elle
|
|
ne peuvent pas être ignorées)*.
|
|
|
|
### Le cas du timer
|
|
|
|
C'est une interruption déclenchée à intervalle régulier, en général toutes les
|
|
10ms. Ainsi un processus ne peut pas monopoliser indéfiniment le CPU. Le noyau
|
|
peut stopper, voire tuer un processus trop gourmand lors de son passage sur le
|
|
CPU.
|
|
|
|
## Les privilèges
|
|
|
|
Nous avons besoin de contrôler ce que font les processus, seul le noyau doit
|
|
être tout-puissant. Le contrôle des instructions autorisées (ou non) ne peut se
|
|
faire **qu'au niveau du matériel** et donc du CPU.
|
|
|
|
Ainsi ce dernier disponse de deux modes de fonctionnement:
|
|
|
|
* **protégé**: seul un nombre restreint d'instructions sont disponibles
|
|
* **réel** (ou noyau) toutes les instructions sont disponibles.
|
|
|
|
Si une instruction privilégiée est exécutées par un processus, une exception
|
|
(sorte d'interruption) est lancée.
|
|
|
|
Pour des questions de sécurité, un processus ne doit pas pouvoir exécuter des
|
|
instructions privilegiées. En effet le rôle du noyau est aussi de faire
|
|
abstraction du matériel, lui seul y a accès. Cependant certains processus ont
|
|
besoin d'y accéder **un affichage** avec `printf` ou la **saisie d'un texte au
|
|
clavier** ou encore **créer un processus**, et utiliser des instructions du mode
|
|
réel.
|
|
|
|
### Les appels systèmes
|
|
|
|
Pour celà le noyau dispose d'un mécanisme : **les appels systèmes**. ainsi le
|
|
noyau contient des routines pouvant être utiles aux processus. Ces routines sont
|
|
appelés par des interruptions logicielles. Le processus positionne le numéro de
|
|
l'appel un registre (`%eax` sur les processeurs Intel) et lance l'interruption.
|
|
|
|
Côté noyau, une table contenant la liste des appels systèmes est positionnée en
|
|
RAM.
|
|
|
|
L'utilisation des appels systèmes est sécurisée : les processus ne joue pas avec
|
|
des adresse mémoires contenant des routines, mais ne connaissent seulement son
|
|
numéro. Les paramètres necessaires aux appels sont eux stockés sur la pile.
|
|
|
|
### Dans les systèmes modernes.
|
|
|
|
Ils sont nombreux : on en compte environ 330 dans Linux et plus de 500 dans
|
|
MacOSX.
|
|
|
|
Pour Linux, certaines routines sont inclues dans la `libc` et ne sont donc pas
|
|
des appels système. Par exemple `printf` qui affiche des éléments à l'écran et
|
|
inclu dans la `libc` utilise l'appel système `write`.
|