Vous êtes sur la page 1sur 46

Ecole Nationale Polytechnique d’Oran- Maurice AUDIN

Département de Génie des Systèmes

Intitulé de la matière: Programmation Système

Chapitre1: Introduction aux


Systèmes d’Exploitation

Dr. Nawel BENDIMERAD

Année universitaire 2023/2024


1
Objectifs spécifiques du module
• Connaitre les concepts de base d’un système d’exploitation.
• Maîtriser le principe de la gestion des ressources de la machine
réelle de manière transparente aux utilisateurs.
• Se familiariser avec la programmation système en langage C sous
Linux.
• Créer des processus sous Linux.
• Assimiler le principe de synchronisation et de recouvrement de
processus sous Linux.
• Etudier les différents algorithmes d’ordonnancement des
processus.
• Assimiler les différentes méthodes d’allocation mémoire.
• Se familiariser avec les mécanismes de gestion des E/S et les
systèmes de fichiers
2
Contenu du Chapitre 1

1/ Définition d’un Système d’Exploitation


2/ Evolution historique des systèmes d’exploitation
3/ Classification des systèmes d’exploitation
4/ Fonctions d’un SE
5/ Modes d’exécution et appels système
6/ Le gestionnaire d’interruptions
7/ Structure d’un SE

3
Introduction
• Un système informatique est composé de deux entités : matérielle
et logicielle.
• La partie matérielle représente un ensemble de dispositifs
physiques tels que:
− Le processeur
− La mémoire
− La carte mère
− Les périphériques (écrans, disques durs, imprimantes, etc.)

• Objectifs:
‒ Faire fonctionner correctement tous les dispositifs
physiques.
‒ Rendre l’utilisation du matériel simple à l’utilisateur.
4
Introduction

Organisation
d’un système
informatique

5
Introduction
• La partie logicielle comporte des programmes qui sont classés en
deux catégories :
– les programmes d'application des utilisateurs,
– les programmes système qui permettent le fonctionnement de
l'ordinateur. Parmi ceux-ci, le système d'exploitation.

Pour qu’un ordinateur soit capable de faire fonctionner un


programme informatique, la machine doit être en mesure
d’effectuer un certain nombre d’opérations préparatoires afin
d’assurer les échanges entre le processeur, la mémoire et les
ressources physiques (périphériques).

6
1/ Définition d’un Système d’Exploitation
Un Système d’Exploitation (noté SE ou OS, abréviation du terme
anglais Operating System) est le logiciel de base qui permet
l’utilisation d’un ordinateur.
Un SE peut être vu comme un ensemble de programmes qui
remplissent deux grandes fonctions:
• Machine virtuelle.
– Masquer les éléments fastidieux du matériel pour fournir une interface
simple à utiliser (Abstraction des périphériques).
– Permettre à plusieurs programmes de fonctionner en même temps,
chaque programme ayant sa propre machine virtuelle.
• Gestionnaire de ressources.
– Ordonnancer et contrôler l’allocation des ressources (Processeur,
mémoire, périphériques, etc.)
– Améliorer l'efficacité du système
7
Exemples de systèmes d’exploitation
Parmi les systèmes d’exploitation les plus connus, nous pouvons citer :

• Windows (Microsoft) (Windows XP, Windows Vista, …,


Windows 10, Windows 11)

• Unix (AIX, Xenix, Ultrix, Solaris, etc.)

• Linux (Fedora, Debian, Ubuntu, etc.)


(Open Source)

• MacOS (Apple)

• PalmOS, VxWorks, Blackberry OS, Symbian,


iPhone OS, Windows mobile, Androïd
(SE embarqués)
8
2/ Evolution historique des systèmes
d’exploitation
1ère Génération (1945-1955): les tubes à vide et les cartes perforées
• Les machines étaient énormes, coûteuses, très peu fiables et beaucoup
moins rapides.
• Le programmeur exploitait seul toutes les ressources de la machine.
• Les programmes étaient écrits directement en langage machine.
• Au début de 1950, la procédure s’est améliorée grâce à l’introduction
de cartes perforées.

ENIAC (Maulchy &


Eckert,1946)

9
2/ Evolution historique des systèmes
d’exploitation
2ème Génération(1955-1965): les transistors et le traitement par lot
• Les ordinateurs sont devenus plus fiable grâce à l’apparition des
transistors avec unités de bandes magnétiques.
• Commercialisation des ordinateurs à des utilisateurs (grandes
compagnies, universités, etc.).
• Les programmeurs utilisaient le traitement par lot:
- Le programmeur fournit son programme à un opérateur sur
bande magnétique ou sur cartes perforées.
- Les programmes sont regroupés et soumis les uns après les
autres par l’opérateur.
- L’opérateur récupère les résultats sur bande ou sur cartes
perforées et les distribue aux programmeurs.
• Les utilisations principales étaient le calcul scientifique et
l’ingénierie (équations différentielles).
10
2/ Evolution historique des systèmes d’exploitation
3ème Génération(1965-1980): les circuits intégrés et la
multiprogrammation
• Amélioration des coûts et des performances (circuits intégrés).
• L’arrivée sur le marché des unités de disques, qui offrent l’accès
aléatoire et des capacités de stockage importantes.
• Apparition du spool (spool, Simultaneous Peripheral Operation
On Line) pour le transfert des travaux des cartes vers le disque.
• Développement de la multiprogrammation (partitionnement de la
mémoire pour des tâches différentes et partage du processeur).
• Le processeur est alloué à un job, et dès que celui-ci effectue une
E/S, le processeur est alloué à un autre job, réduisant ainsi le
temps de réponse.
• Enfin, apparition des systèmes à temps partagé (répartition du
temps CPU en « quantum de temps » ). 11
2/ Evolution historique des systèmes
d’exploitation
4ème Génération (1980-1990): les ordinateurs personnels
• Développement des circuits LSI (Large Scale Integration) et
VLSI (Very Large Scale Integration) contenant des centaines de
transistors au cm2.
• Il existait deux principaux systèmes d’exploitation : MS-DOS
(Microsoft) et UNIX.
• Apparition des réseaux d’ordinateurs individuels qui
fonctionnent sous des systèmes d’exploitation en réseau ou des
systèmes d’exploitation distribués.

12
2/ Evolution historique des systèmes
d’exploitation
5ème Génération (1990-????): les ordinateurs personnels portables
et de poche
• Apparition des PDA (Personal Digital Assistant), des smartphones
et des tablettes électroniques grâce à l’intégration des composants
et l’arrivée des systèmes d’exploitation de type «micro-noyau».
• Les systèmes d’exploitation de type « micro-noyau» sont
modulaires (un module par fonction); ils peuvent être réalisés avec
plus ou moins de modules et donc adaptables à de très petites
machines.
• Les appareils personnels remplacent les terminaux.
• Développement des réseaux locaux haute performance et
d’Internet.
13
3/ Classification des systèmes d’exploitation
3.1/ Les systèmes Mono-tâche (MS-DOS) : Dans un système
mono-tâche, à tout instant, un seul programme est exécuté; un autre
programme ne démarrera, sauf conditions exceptionnelles, que
lorsque le premier sera terminé.

Exemple d’exécution dans un système mono-tâche

Remarque: L’exécution des deux processus A et B est complètement séquentielle.


14
3/ Classification des systèmes d’exploitation
3.2/ Les systèmes Multi-tâches (Windows, Linux) : Nous pouvons
distinguer dans ce type de systèmes deux possibilités :
• Plusieurs processus peuvent s’exécuter simultanément (systèmes
multiprocesseurs).
• les processus peuvent s’exécuter en quasi-parallèle (systèmes à
temps partagé).

Exemple d’exécution dans un système multi-programmé

Remarque: Le temps de réponse du Processus B est amélioré par rapport à une


exécution dans un système mono-tâche. 15
3/ Classification des systèmes d’exploitation
3.3/ Les systèmes Mono-utilisateur (Windows 98,2000) : Au plus
un utilisateur à la fois peut travailler sur la machine.
Les systèmes réseaux permettent de différencier plusieurs
utilisateurs, mais chacun d’eux utilise de manière exclusive la
machine.

3.4/ Les systèmes Multi-utilisateurs (Windows XP, Linux,


MacOS): Plusieurs utilisateurs peuvent travailler simultanément sur
la même machine afin de profiter des mêmes ressources.
Gestion d’environnement propre à chaque utilisateur ainsi que la
sécurité d’accès aux programmes et aux données.

16
3/ Classification des systèmes d’exploitation

3.5/ Les systèmes temps réel: Ce sont des systèmes spécialisés


dans la conduite d’appareillage industriel ou dans la commande
de processus où le temps joue un rôle critique (des contraintes
temporelles strictes ou souples à respecter).
Pour garantir le respect de limites ou contraintes temporelles, il
est nécessaire que :
• les différents services et algorithmes utilisés s’exécutent en temps
borné. Un système d’exploitation temps réel doit ainsi être conçu de
manière à ce que les services qu’il propose (accès hardware, etc.)
répondent en un temps borné ;
• les différents enchaînements possibles des traitements garantissent que
chacun de ceux-ci ne dépassent pas leurs limites temporelles.

17
3/ Classification des systèmes d’exploitation
3.5/ Les systèmes temps réel

Nous pouvons distinguer deux types de systèmes temps réel :


• le temps réel strict (hard real-time) : il ne tolère aucun
dépassement de ses contraintes, ce qui est souvent le cas lorsque
de tels dépassements peuvent conduire à des situations critiques,
voire catastrophiques : pilote automatique d’avion, système de
surveillance de centrale nucléaire, etc.
• le temps réel souple (soft real-time) : à l’inverse, le temps réel
souple s’accommode de dépassements des contraintes temporelles
dans certaines limites au-delà desquelles le système devient
inutilisable : visioconférence, jeux en réseau, etc.

18
4/ Fonctions d’un SE

• Le SE se présente comme une couche logicielle placée entre la


machine matérielle et les applications.
– Il s’interface avec la couche matérielle par le biais du
mécanisme des interruptions.
– Il s’interface avec les applications par le biais des primitives
qu’il offre : appels système et commandes.
• Un SE doit assurer plusieurs fonctions telles que la gestion du
processeur, de la mémoire, des entrées/sorties, de la concurrence,
des objets externes et de la protection.

19
4/ Fonctions d’un SE

20
4/ Fonctions d’un SE
4.1/ Gestion du processeur
• Le système doit gérer l’allocation du processeur aux différents
programmes pouvant s’exécuter.
• Cette allocation se fait par le biais d’un algorithme
d’ordonnancement qui planifie l’exécution des programmes.
• Selon le type de système d’exploitation, l’algorithme
d’ordonnancement répond à des objectifs différents
• Le SE utilise un allocateur ( dispatcher ) responsable de la
répartition du temps processeur entre les différents processus,
et un planificateur ( scheduler ) déterminant les processus à
activer, en fonction du contexte.

21
4/ Fonctions d’un SE
4.2/ Gestion de la mémoire
• Le système doit gérer l’allocation de la mémoire centrale entre
les différents programmes pouvant s’exécuter.
• Comme la mémoire physique est parfois trop petite pour
contenir la totalité des programmes, la gestion de la mémoire
se fait selon le principe de la mémoire virtuelle : à un instant
donné, seules sont chargées en mémoire centrale, les parties de
code et données utiles à l’exécution

22
4/ Fonctions d’un SE
4.3/ Gestion des entrées/sorties
• Les entrées/sorties correspondent aux mécanismes utilisés par
les processus afin de communiquer avec l’extérieur.
• Le système doit gérer l’accès aux périphériques, c’est-à-dire
faire la liaison entre les appels de haut niveau des programmes
utilisateurs et les opérations de bas niveau de l’unité d’échange
responsable du périphérique.
• Ces entrées/sorties font appel aux couches les plus proches du
matériel, et dont le système tente de masquer les difficultés
aux utilisateurs.

23
4/ Fonctions d’un SE
4.4/ Gestion de la concurrence
• Comme plusieurs programmes coexistent en mémoire centrale,
ceux-ci peuvent vouloir communiquer pour échanger des
données. Par ailleurs, il faut synchroniser l’accès aux données
partagées afin de maintenir leur cohérence.
• Le système offre des outils de communication et de
synchronisation entre programmes

24
4/ Fonctions d’un SE
4.5/ Gestion des objets externes
• La mémoire centrale est une mémoire volatile. Aussi, toutes les
données devant être conservées au-delà de l’arrêt de la machine,
doivent être stockées sur une mémoire de masse ( disque dur,
CD-ROM, etc).
• La gestion de l’allocation des mémoires de masse ainsi que
l’accès aux données stockées s’appuient sur la notion de fichiers
et de système de gestion de fichiers (SGF).

25
4/ Fonctions d’un SE

4.6/ Gestion de la protection


• Le système doit fournir des mécanismes garantissant que ses
ressources (CPU, mémoire, fichiers) ne peuvent être utilisées
que par les programmes auxquels les droits nécessaires ont été
accordés.
• Il faut notamment protéger le système et la machine des
programmes utilisateurs (mode d’exécution utilisateur et
superviseur).

26
4/ Fonctions d’un SE
Exemples de protections
• Certaines régions ne doivent pas être vu par les utilisateurs
– tables d'authentifications
– zones d'autres utilisateurs
• Entrées/Sorties
– Toutes les instructions E/S sont privilégiées
– Elles passent toutes par le noyau
• La mémoire
– Gestion de la mémoire au niveau matériel
• Temps processeur
– Éviter les boucles infinies
-> redonner le contrôle au SE régulièrement.
27
5/ Modes d’exécution et appels système
• Le système d’exploitation fourni un ensemble de services aux
utilisateurs et à leurs applications. Ces services peuvent être appelés
soit par des appels systèmes, soit par des commandes.
• L’interpréteur de commande (shell sous Unix) est le mode
fondamental de contrôle d’un système d’exploitation : l’utilisateur
entre ses commandes au clavier, qui sont ensuite transmises au
programme (l’interpréteur) qui exécute en mode interactif les
instructions.
• En général, les processeurs ont deux modes de fonctionnement, le
mode superviseur (kernel mode : mode noyau) et le mode
utilisateur.
• Ces modes de fonctionnement assurent la protection du système
d’exploitation contre les intrusions et les erreurs.
28
5/ Modes d’exécution et appels système
• Le mode superviseur est le mode d’exécution du système
d’exploitation. C’est un mode privilégié et protégé.
• Le mode utilisateur est le mode d’exécution de tout programme
utilisateur, y compris l’interpréteur de commande. Ce mode est
restrictif : des instructions machine sont interdites, et spécialement
les instructions permettant la manipulation des interruptions.
• Lorsqu’un programme utilisateur a besoin d’un appel système (par
exemple une entrée/sortie sur disque pour la lecture ou l’écriture
d’un fichier), il doit quitter son mode courant d’exécution
(utilisateur) pour passer en mode superviseur, et exécuter la routine
système, le code du système d’exploitation.
• Il y a alors commutation de contexte : le système d’exploitation
sauvegarde l’état du processus, pour charger son propre code.
• Une fois l’appel système effectué, le contexte du processus appelé
est restauré, pour continuer son exécution normale. 29
6/ Le gestionnaire d’interruptions
• Une interruption est une réponse à un événement qui interrompt
l’exécution du programme en cours à un point observable
(interruptible) du processeur central.
• Physiquement, l’interruption se traduit par un signal envoyé au
processeur.
• Elle permet de forcer le processeur à suspendre l’exécution du
programme en cours, et à déclencher l’exécution d’un programme
prédéfini, spécifique à l’événement, appelé routine d’interruption.
• La Procédure d'interruption est la suivante:
- Sauvegarde du contexte d'exécution du programme en cours;
- Lire l'emplacement du programme destiné à gérer cet événement (table
d’association préétablie);
- Exécution de la routine d’interruption;
- Restauration du contexte;
- Reprise du programme. 30
6/ Le gestionnaire d’interruptions
Exemple d’interruption
• Le Programme utilisateur demande l’exécution d’une E/S (exemple:
écriture sur le disque (write))
• Le gestionnaire d'interruptions prépare le Programme d’E/S et le
lance;
• À la fin du module d'E/S le gestionnaire d'interruption reprend la
main pour examiner son état;
• Le programme utilisateur reprend son exécution.

31
6/ Le gestionnaire d’interruptions

Les interruptions peuvent être d’origine matérielle ou logicielle.


• Les interruptions matérielles :
Ce sont des interruptions causées par des organes externes au
processeur. Elles peuvent arriver à tout moment, indépendamment de
l’exécution du programme en cours. Tels que :
- Les périphériques (pour signaler la fin d’une E/S par exemple)
- Les Timers (tick horloge, pour limiter le temps d’allocation du
processeur).
- Défauts matériels.

32
6/ Le gestionnaire d’interruptions

• Les interruptions logicielles :


Ce sont des interruptions causées par l’exécution d’un programme à
l’intérieur de l’ordinateur. Tels que :
- Les exceptions (déroutement) : Elles sont générées par un
programme en cours d’exécution (division par zéro, débordement
arithmétique, défaut de page (données non disponibles en
mémoire), etc.
- Les appels système : Ils permettent à un programme utilisateur
d’accéder à un service du SE (demande d’E/S, accès à un fichier,
etc.).

33
6/ Le gestionnaire d’interruptions

Différence entre une interruption et une exception


• Une interruption est provoquée par un signal provenant du
monde extérieur au processeur, et modifiant le comportement
de celui-ci.
• Une exception est un signal provoqué par un
dysfonctionnement du programme en cours d'exécution.
• Chaque interruption ou exception dispose d’un
sous-programme (handler) qui prend en charge l’évènement
correspondant : table de vecteurs d'interruption ou IDT :
Interrupt Descriptor Table dans le langage Linux.

34
7/ Structure d’un SE
Il existe plusieurs possibilités de conception pour un SE, les
différents schémas d’organisation possibles sont les suivants :
• En couches
• À noyau
– Monolithique
– Microkernel
– Hybride
• Modèle client/serveur
• Machines virtuelles
7/ Structure d’un SE
7.1/ En couches
• Structuration hiérarchique bien définie
• Une couche ne fait appel qu’aux services de la couche
directement inférieure
• L’intérieur de chaque niveau est masqué par rapport aux autres.
• Bonne théorie générale, extensible
• Très peu efficace, trop d’intermédiaires (Un appel système
transmis de couche en couche avant d’être traité peut ralentir
son traitement)
• Traversée des couches contraignantes
pour les performances
• Exemple : THE (Technische Hogeschool
Eindhoven) de Dijkstra (1968)
7/ Structure d’un SE
7.2/ À noyau
• Le noyau est généralement exécuté dans un espace mémoire séparé de
l’espace des applications: espace noyau.
• Structuration à deux niveaux :
– Mode noyau (Kernel Mode)
– Mode utilisateur (User Mode)
• Les applications en mode utilisateur doivent demander des services au
noyau à travers des appels système
7/ Structure d’un SE
7.2/ À noyau : Monolithique
• Le terme monolithique désigne un seul niveau,
• Les SE monolithiques intègrent une grande quantité de
fonctionnalités dans le noyau,
• Efficaces à l’exécution.
• Gâchis de mémoire (tout est chargé)
• Exemple : MS-DOS, les premières versions d’UNIX
7/ Structure d’un SE
7.2/ À noyau : Monolithique
Exemple d’exécution

Les systèmes d’exploitation sous une structure monolithique


sont un ensemble de procédures:
– une procédure principale qui appelle la procédure de
service requise,
– des procédures de service qui exécutent les appels
système et
– un ensemble de procédures utilitaires qui assistent les
procédures de service, par exemple la recherche de données
des programmes utilisateurs.

39
7/ Structure d’un SE
7.2/ À noyau : Micronoyau
• Noyau réduit au stricte nécessaire (microkernel).
• Ensemble de petits modules bien définis dont un seul (le
micronoyau) fonctionne en mode noyau.
• Gère principalement l’ordonnancement, la gestion de la
mémoire et la communication entre processus.
• Les drivers et les applications s’exécutent en mode utilisateur.
• Portable et facilement maintenable.
• Exemples : Minix.
7/ Structure d’un SE
7.2/ À noyau : Comparaison entre noyau
monolithique et micronoyau

41
7/ Structure d’un SE
7.2/ À noyau : Hybride
• Compromis entre le kernel monolithique et le microkernel.
• Les drivers s’exécutent en mode noyau.
• Exemple : Windows.
7/ Structure d’un SE
7.3/ Le modèle client/serveur
• Le système d’exploitation est composé d’un noyau et d’un
ensemble de serveurs.
• Le noyau gère la communication entre les clients et les serveurs.
• Les clients sont les demandeurs de services. Par exemple, pour
demander un service, comme la lecture d’un bloc d’un fichier, un
processus utilisateur (aussi appelé processus client) envoie une
requête à un processus serveur qui effectue le travail et renvoie
une réponse.
• Les serveurs s’exécutent en mode utilisateur. Ils ne peuvent donc
pas accéder directement au matériel. Par conséquent, une erreur
dans le serveur de fichiers, par exemple, n’affectera pas, en
général, l’ensemble de la machine. Les dégâts se limitent au
serveur.

43
7/ Structure d’un SE
7.4/ Machines virtuelles
• Le cœur du système se charge de la multiprogrammation en
fournissant à la couche au-dessus plusieurs machines virtuelles.
Des systèmes d’exploitation différents peuvent tourner sur une
seule machine virtuelle.
• Exemples de machines virtuelles :
– IBM VM: un logiciel qui offre à chaque usager sa propre
machine virtuelle monotâche. Les machines virtuelles étaient
planifiées avec du temps partagé.
– VMWare : un logiciel permettant d’exécuter simultanément
plusieurs SE sur la même machine, des sessions OS/2,
Windows, Linux, etc.
– Oracle VM VirtualBox : un logiciel de virtualisation gratuit
multiplateformes d’Oracle. Il fonctionne sur différents systèmes
d’exploitation hôtes à savoir Windows, Linux, macOS et
44
Solaris.
7/ Structure d’un SE
7.4/ Machines virtuelles

Architecture d’une machine virtuelle


45
7/ Structure d’un SE
7.4/ Machines virtuelles

Avantages:
• Plusieurs machines virtuelles sont obtenues à partir d’une seule
machine physique:
– Utilisation plus efficace du matériel.
• Utile à des fins d’expérimentation:
– Un nouveau SE ou une nouvelle application peuvent être
développés sur une machine virtuelle sans affecter les autres.
• Protection complète, car les machines virtuelles sont isolées les
unes des autres.

46

Vous aimerez peut-être aussi