Add Operating System Introduction

This commit is contained in:
Yorick Barbanneau 2021-11-07 01:46:41 +01:00
parent 29e4927a2b
commit 248ca2307e

View file

@ -0,0 +1,100 @@
---
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 l'envoi d'une interruption, 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 appellen 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. Ainsi le
noyau peut stopper, voire tuer un processus trop gourmand.
## Les privilèges
Nous avons besoin de contrôler ce que font les processus, seult le noyau doit
être tout-puissant. Le contrôle des instructions autorisée 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'instruction 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 ets 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**.
### 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.
Sour 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`.