Os Acad 2122 S4
Os Acad 2122 S4
SYSTEMES D'EXPLOITATION
(PARTIE I)
TABLE DE MATIERES
OBJECTIF Error! Bookmark not defined.
A RETENIR Error! Bookmark not defined.
RECOMMANDATIONS Error! Bookmark not defined.
CHAPITRE I : INTRODUCTION AUX SYSTEMES D’EXPLOITATION 3
1 Système informatique = le matériel + le logiciel 3
2 Organisation d’un Système informatique 3
3 Qu’est ce qu’un Système d’Exploitation ? 4
4 Fonctions d’un système d’exploitation général 4
5 Historique 4
5.1 Porte ouverte ou exploitation self service (1945-1955) 4
5.2 Traitement par lots (Batch Processing, 1955-1965) 6
5.3 Multiprogrammation (Multiprogramming, 1965-1970) 7
5.4 Temps partagé (Time Sharing, 1970-) 8
5.5 Systèmes des Ordinateurs Personnels 9
5.6 Systèmes Parallèles (Parallel Systems) 9
5.7 Systèmes Distribués et Réseaux 10
5.8 Systèmes Temps Réels 10
5.9 Systèmes Embarqués (Embedded Systems) 10
6 Exemple de systèmes d’exploitation : UNIX 11
6.1 Historique 11
6.2 Architecture Générale d’UNIX 12
6.3 Caractéristiques 14
7 Fonctionnement d’un Système Informatique Moderne 14
8 Interactions Utilisateur/Système 15
CHAPITRE II : MECANISMES DE BASE D’EXECUTION DES PROGRAMMES 16
1 Machine de VON-NEUMANN 16
1.1 Définition 16
1.2 Unité Centrale de Traitement (CPU, Central Process Unit) 16
2 Cheminement d’un Programme dans un Système 18
2.1 Editeur de texte (Text Editor) 19
2.2 Compilateur (Compiler) 19
2.3 Editeur de liens (Linker) 19
2.4 Le chargeur (Loader) 21
3 Concepts de Processus et de Multiprogrammation 21
3.1 Définition 21
3.2 Contexte d’un processus 21
3.3 Image mémoire d’un processus 21
3.4 Descripteur de Processus (PCB) 22
3.5 Etat d’un processus 23
3.6 Multiprogrammation 23
3.7 Processus sous UNIX 24
4 Les Systèmes d’Interruption 29
4.1 Problématique 29
4.2 Définition (Interruption) 29
4.3 Mécanismes de gestion des interruptions 29
5 Les signaux sous UNIX 33
5.1 Définition 33
5.2 Identification des signaux 33
5.3 Origines d’un signal 34
5.4 Réponse à un signal 34
BIBLIOGRAPHIE 38
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
Unité Centrale
Unité Centrale de
Traitement
Données
Unité de commande
Mémoire Centrale
Instruction Unité
Arithmétique et
Logique
Données Commandes
Unité d'E/S
ou d'Echange
Côté logiciel, un système informatique est composé de deux niveaux bien distincts : les
Programmes d’application (achetés ou développés) et les logiciels de base. Dans les logiciels
de base, on trouve le système d’exploitation (S.E.) et les utilitaires.
L’objectif du logiciel est d’offrir aux utilisateurs des fonctionnalités adaptées à leurs
besoins. Le principe est de masquer les caractéristiques physiques du matériel.
USTHB 3
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
3 Qu’est ce qu’un Système d’Exploitation ?
Le système d’exploitation (Operating System, O.S.) est l’intermédiaire entre un
ordinateur (ou en général un appareil muni d’un processeur) et les applications qui utilisent
cet ordinateur ou cet appareil. Son rôle peut être vu sous deux aspects complémentaires :
1. Machine étendue ou encore machine virtuelle (Virtual Machine)
Son rôle est de masquer des éléments fastidieux liés au matériel, comme les
interruptions, les horloges, la gestion de la mémoire, la gestion des périphériques
(déplacement du bras du lecteur de disquette) ...etc. Cela consiste à fournir des outils
adaptés aux besoins des utilisateurs indépendamment des caractéristiques physiques.
2. Gestionnaire de ressources
Le système d'exploitation permet l'ordonnancement et le contrôle de l'allocation des
processeurs, des mémoires et des périphériques d'E/S entre les différents
programmes qui y font appel, avec pour objectifs : efficacité (utilisation maximale
des ressources), équité (pas de programme en attente indéfinie), cohérence (entre des
accès consécutifs), et protection (contre des accès interdits).
Ce rôle de gestionnaire de ressources est crucial pour les systèmes d'exploitation
manipulant plusieurs tâches en même temps (multi-tâches (Multitasking)).
On peut trouver un S.E. sur les ordinateurs, les téléphones portables, les assistants
personnels, les cartes à puce, …etc.
5 Historique
Les systèmes d'exploitation ont été historiquement liés à l'architecture des ordinateurs
sur lesquels ils étaient implantés. Nous décrirons les générations successives des ordinateurs
et observons à quoi ressemblait leur système d'exploitation.
Utilisateur Ordinateur
Pupitre
Utilisateurs en attente
Programme Lecteur
sur cartes Imprimante
de cartes
Figure 1. 4 : Utilisation de la machine en Porte Ouverte
USTHB 5
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
5.2 Traitement par lots (Batch Processing, 1955-1965)
Ce sont des systèmes réalisant le séquencement des jobs ou travaux selon l’ordre des
cartes de contrôle à l’aide d’un moniteur d’enchaînement. L’objectif était de réduire les
pertes de temps occasionnées par l’oisiveté du processeur entre l’exécution de deux jobs ou
programmes (durant cette période, il y a eu apparition des machines à transistor avec unités
de bandes magnétiques, donc évolution des ordinateurs).
L’idée directrice était de collecter un ensemble de travaux puis de les transférer sur une
bande magnétique en utilisant un ordinateur auxiliaire (Ex. IBM 1401). Cette bande sera
remontée par la suite sur le lecteur de bandes de l’ordinateur principal (Ex. IBM 7094) afin
d’exécuter les travaux transcrits en utilisant un programme spécial (l’ancêtre des S.E.
d’aujourd’hui. Ex. FMS : Fortran Monitor System, IBSYS). Les résultats seront récupérés sur
une autre bande pour qu’ils soient imprimés par un ordinateur auxiliaire. Cette situation est
illustrée à la Figure 1.5.
Opérateur
Ordinateur principal
(7094)
Ordinateur auxiliaire Ordinateur auxiliaire
Dérouleur
(1401) (1401)
entrées
Lecteur de cartes Dérouleur de
Dérouleur bandes
Dérouleur de système
bandes Imprimante
Dérouleur
sorties
Programmeurs
Données
$RUN
$LOAD
Programme
$FTN
$JOB, 10, 429754, E1
Inconvénients
USTHB 6
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
Perte de temps due à l’occupation du processeur durant les opérations d’E/S. (En
effet, le processeur restait trop inactif, car la vitesse des périphériques mécaniques
était plus lente que celle des dispositifs électroniques).
Les tâches inachevées sont abandonnées.
Programmeurs
Ordinateur principal
Lecteur de cartes
Disque entrées
Mémoire principale
Système
Programme 1
Opérateur
Programme 2
Programme N
Disque sorties
Imprimante
Programmeurs
En effet, le processeur est alloué à un job, et dès que celui-ci effectue une demande
d’E/S, le processeur est alloué à un autre job, éliminant ainsi les temps d’attente de l’unité de
traitement chargé des E/S, appelé canal d’E/S.
Exemple
Soient les deux programmes A et B suivants :
Job A
Job B
Calcul E/S Calcul E/S
USTHB 7
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
On suppose qu’on a un seul périphérique d’E/S.
Système mono-programmé
CPU
Job A Job A Job B Job B
Temps de réponse de A
Temps de réponse de B
Système multiprogrammé
CPU
Job A Job B Job A
Temps de réponse de A
Temps de réponse de B
USTHB 8
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
Utilisateurs Programmeurs
Ordinateur principal
Mémoire principale
Système
Programme 1
Programme 2
Programme N
Ingénieur
Parmi les premiers systèmes à temps partagé, nous citons : CTSS (Compatible Time
Sharing System), MULTICS (MULTiplexed Information and Computing Service), UNIX,
MINIX, LINUX. En fait, la plupart des systèmes d’aujourd’hui sont en temps partagé.
USTHB 9
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
5.7 Systèmes Distribués et Réseaux
Un développement intéressant a débuté vers le milieu des années 1980 : la croissance des
réseaux d'ordinateurs personnels fonctionnant sous des systèmes d'exploitation réseaux ou
des systèmes d'exploitation distribués.
Les systèmes réseaux (Network Operating Systems), permettant l’accès des
utilisateurs à des services communs, trop coûteux pour être individuels : stockage de
grandes quantités d’informations, impression des documents, processeurs de grandes
puissances, …etc. Ces services sont gérés par des systèmes appelés serveurs,
auxquels s’adressent les utilisateurs clients qui disposent chacun de leurs machines
individuelles. Un ordinateur qui exécute un système d’exploitation réseau agit
indépendamment de tous les autres ordinateurs présents sur le réseau, bien qu’il ait
connaissance du réseau et soit capable de communiquer avec d’autres ordinateurs
connectés.
Les systèmes distribués (Distributed Systems) qui consistent en plusieurs
ordinateurs pourvus de leur système d’exploitation et reliés entre eux par des canaux
de communication. On parle de systèmes répartis ou faiblement couplés (Loosely
Coupled). Les S.E. de ces ordinateurs coopèrent et collaborent pour exécuter une
application distribuée. Ces systèmes communiquent de manière suffisamment proche
pour donner l’illusion qu’il n’y a qu’un S.E. unique qui contrôle le réseau.
USTHB 10
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
6 Exemple de systèmes d’exploitation : UNIX
6.1 Historique
L’histoire du système d’exploitation Unix commence en 1969 aux laboratoires AT&T
de Bell, et ceci avec le développement d’une version simplifiée du système MULTICS par
Ken Thompson. Brian Kernighan appela cette version UNICS (Uniplexed Information
and Computer Service) qui devint ensuite UNIX et qui était entièrement écrite en
assembleur.
Le système Unix a connu un véritable succès, lorsqu'il fut réécrit en langage C en 1973
par Dennis Ritchie et Thompson. Le langage de programmation C a d’ailleurs été conçu
initialement par D. Ritchie en 1971 pour la refonte d’Unix et son portage sur de nombreuses
architectures matérielles.
En 1975, le système Unix (V6) est distribué aux universités et aux centres de recherches.
La principale université qui va travailler sur Unix est l’université de Berkeley, qui va
produire ses propres versions appelées BSD (Berkeley Software Distribution). A Berkeley,
les efforts portent sur l’intégration des protocoles réseaux TCP/IP, la gestion de la mémoire
avec l’introduction de la pagination, la modification de certains paramètres du système
(taille des blocs, nombre des signaux...) et l’ajout d’outils (l’éditeur vi, un interpréteur de
commandes csh...).
En 1979, les Bell Labs sortent leur version appelée UNIX V7, avec en particulier, l’ajout
de nouveaux utilitaires et un effort en matière de portabilité. Cette version est la première à
être diffusée dans le monde industriel. On peut dire qu’elle est à l’origine du développement
du marché Unix.
Les nombreuses modifications et améliorations apportées au système UNIX, par AT&T
et Berkeley ont abouti aux versions System V Release 4 d’AT&T et 4.4BSD de Berkeley.
Le support de l’environnement graphique est apparu avec le système XWindow du
MIT en 1984.
La fin des années 80 est marquée par une croissance sans précédent du nombre de
systèmes Unix dans le domaine des systèmes d’exploitation. Les principales versions
actuelles sont System VR4, GNU/Linux, SUN Solaris, FreeBSD, IBM AIX, Microsoft
Xenix…etc. Pour qu’un système d’exploitation puisse être un Unix, il faut qu’il respecte la
norme POSIX (Portable Operating System Interface). Tout logiciel écrit en respectant la
norme Posix devrait fonctionner sur tous les systèmes Unix conformes à cette norme.
Une version gratuite d'Unix porte le nom de Linux (code source disponible). Elle a été
créée par Linus Torvalds en 1991. Par la suite, un grand nombre de programmeurs ont
contribué à son développement accéléré. Conçu d'abord pour tourner sur des machines avec
le processeur 80x86, Linux a migré à plusieurs autres plate-formes.
USTHB 11
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
Une vision simplifiée de l'évolution subie par Unix est montrée sur la figure ci-dessous
(Figure 1.10) :
Commandes
ls, cat, cp, rm,
Chown, adduser,
Librairie: stdio.h Grep, find, etc.
Scanf, printf, Shell
fopen, fclose (sh, csh, bash)
Putc, getc, etc. Les appels ystème
(SGF, Processus, etc.)
open fork
Autres librairies read exec
Mathématique
write pipe
Graphique
etc. close
Noyau
X Window
(startx, xterm, etc.)
C. Le Shell
Le shell désigne l’interface utilisateur sous UNIX. C’est un programme qui permet à
l'utilisateur de dialoguer avec le noyau. Il joue un double rôle celui d’interpréteur de
commandes et celui de langage de programmation. Il existe plusieurs shells différents mais
les plus répondus sont:
le Bourne Shell : sh
le C-shell : csh
le Korn-Shell : ksh
Bash (Bourne Again Shell) : est un interpréteur (Shell) compatible sh qui exécute les
commandes lues depuis l'entrée standard, ou depuis un fichier. C'est le shell par
défaut sous Gnu/Linux.
D. Utilitaires
USTHB 13
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
UNIX est livré avec un grand nombre de programmes utilitaires, parmi lesquels :
Compilateurs : cc, gcc
Gestionnaire d’applications : make
Editeurs de texte : vi, emacs
6.3 Caractéristiques
Les principales caractéristiques, auxquelles est dû le succès d’UNIX, sont :
Portabilité : Une des premières caractéristiques d’Unix est son écriture (à hauteur de
95%) en langage C, permettant ainsi une portabilité sur la plupart des architectures en
allant des micro-ordinateurs jusqu’aux supercalculateurs.
Multi-utilisateurs et Multitâches : Plusieurs utilisateurs peuvent accéder
simultanément au système ; chaque utilisateur peut effectuer une ou plusieurs tâches
en même temps.
Temps partagé : c’est-à-dire que les ressources du processeur et du système sont
réparties entre les utilisateurs.
Interface utilisateur interactive (shell) : elle est constituée d’un programme séparé
du noyau permettant à l’utilisateur de choisir son environnement de travail. Elle
intègre un langage de commandes très sophistiqué (scripts).
Système de fichiers hiérarchique : plusieurs systèmes de fichiers peuvent être
rattachés au système de fichiers principal ; chaque système de fichiers possède ses
propres répertoires.
Entrées-Sorties intégrées au système de fichiers : les périphériques sont représentés
par des fichiers, ce qui rend le système indépendant du matériel et en assure la
portabilité ; l’accès aux périphériques est donc identique à l’accès aux fichiers
ordinaires.
Gestion de la mémoire virtuelle : un mécanisme d’échange entre la mémoire centrale
(MC) et le disque dur permet de pallier un manque de MC et optimise le système.
USTHB 14
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
8 Interactions Utilisateur/Système
Pour un utilisateur, le système d'exploitation apparaît comme un ensemble de
procédures, trop complexes pour qu'il les écrive lui-même. Les bibliothèques des appels
système sont alors des procédures mises à la disposition des programmeurs. Ainsi un
programme C/C++ peut utiliser des appels système d'Unix/Linux comme open(), write() et
read() pour effectuer des Entrées/Sorties de bas niveau.
L'interpréteur de commandes constitue une interface utilisateur/système. Il est
disponible dans tous les systèmes. Il est lancé dès la connexion au système et invite
l'utilisateur à introduire une commande. L'interpréteur de commandes récupère puis exécute
la commande par combinaison d'appels système et d'outils (compilateurs, éditeurs de lien,
etc.). Il affiche les résultats ou les erreurs, puis se met en attente de la commande suivante.
Par exemple, la commande de l'interpréteur (shell) d'Unix suivante permet d'afficher à
l'écran le contenu du fichier appelé essai : cat essai.txt
L'introduction du graphisme dans les interfaces utilisateur a révolutionné le monde de
l'informatique. L'interface graphique a été rendue populaire par le Macintosh de Apple. Elle
est maintenant proposée pour la plupart des machines.
USTHB 15
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
USTHB 16
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
Les Registres d’Index qui sont utilisés pour l’adressage indexé. Dans ce
cas l'adresse effective d'un opérande est obtenue en ajoutant le contenu du
registre d'index à l'adresse contenue dans l'instruction.
Les Registres de Base qui permettent le calcul des adresses effectives. Un
registre de base contient une adresse de référence, par exemple l'adresse
physique correspondant à l'adresse virtuelle 0. L'adresse physique est
obtenue en ajoutant au champ adresse de l'instruction le contenu du
registre de base.
Les Registres Banalisés qui sont des registres généraux pouvant servir à diverses
opérations telles que stockage des résultats intermédiaires, sauvegarde des
informations fréquemment utilisées, …etc. Ils permettent de limiter les accès à la
mémoire, ce qui accélère l'exécution d'un programme.
Le Registre Pile (Stack Pointer, SP) : Il pointe vers la tête de la pile du processeur.
Cette pile est une pile particulière (appelée pile système) est réservée à l'usage de
l'unité centrale, en particulier pour sauvegarder les registres et l'adresse de retour en
cas d'interruption ou lors de l'appel d'une procédure. Le pointeur de pile est
accessible au programmeur, ce qui est souvent source d'erreur.
Exemple : Utilisation dans le cas d’appels imbriqués de procédures ABCD.
Le Registre Mot d’Etat (PSW, Program Statut Word) : Il indique l’état du processeur
donné par des indicateurs (Flags) qu’on verra ci-après.
2. Cycle d’exécution du processeur
Un programme séquentiel est composé d’une suite d’instructions. L’exécution du
programme fait évoluer l’état de la machine d’un état à un autre. Cette évolution est discrète :
l’état n’est observable qu’en des instants particuliers appelés "points observables", qui
correspondent en général aux débuts et fins d’instructions.
Le processeur central exécute continuellement le cycle suivant :
Début
Point
observable
Non Arrêt
Interruption
Suspension
USTHB 17
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
Exemple
Programme suspendu lors d’une demande d’E/S et le périphérique est en panne et
ne répond pas, ou suspendu par le système pour une durée déterminée.
Un programme est interrompu par l’exécution d’un programme plus prioritaire que
lui.
Remarque
Le cycle de processeur est indivisible et ne peut être interrompu qu’à la fin de la phase
Execute (i.e. on exécute au moins une instruction élémentaire d’un programme pour pouvoir
interrompre).
3. Etat du processeur
Il est décrit par le contenu de son registre d’état ou mot d’état (PSW). Le PSW contient
plusieurs types d’informations :
Etat d’exécution du programme
Le processeur peut être dans un état actif où il exécute des instructions, ou dans l’état
d’attente où l’exécution est suspendue. L’état d’exécution en un point observable est
donné par :
1. L’adresse de la prochaine instruction à exécuter (CO).
2. Les valeurs courantes des codes conditions qui sont des bits utilisés dans les
opérations arithmétiques et comparaisons des opérandes.
3. Le mode d’exécution. Pour des raisons de protection, l’exécution des instructions
et l’accès aux ressources se fait suivant des modes d’exécution. Ceci est nécessaire
pour pouvoir réserver aux seuls programmes du S.E. l’exécution de certaines
instructions. Deux modes d’exécution existent généralement :
Mode privilégié ou maître (ou superviseur). Il permet :
L’exécution de tout type d’instruction. Les instructions réservées au mode
maître sont dites privilégiées (Ex. instructions d’E/S, protection, …etc.).
L’accès illimité aux données.
Mode non privilégié ou esclave (ou usager). Il permet :
Exécution d’un répertoire limité des instructions. C’est un sous ensemble
du répertoire correspondant au mode maître.
Accès limité aux données d’usager.
4. masques d’interruption (seront détaillés dans la suite).
Informations sur le contexte accessible en mémoire et les droits d’accès associés :
Tables de segments de données, indicateurs de protection de mémoire, …etc.
Remarque
L’état d’un processeur n’est observable qu’entre deux cycles du processeur.
USTHB 18
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
Un programme est généralement écrit dans un langage évolué (Pascal, C, VB, Java, etc.).
Pour faire exécuter un programme par une machine, on passe généralement par les étapes
suivantes (Voir Figure 2.2) :
Programme P brouillon
Editeur de texte
Chargeur
Erreur de
chargement
USTHB 19
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
2. des données localement définies,
3. des données externes, et
4. des procédures ou sous-programmes externes (bibliothèques de fonctions).
Avant d’exécuter le programme objet, il est nécessaire de rassembler les parties non
locales et les procédures externes avec le programme.
L’éditeur de liens est donc un logiciel permettant de combiner plusieurs programmes
objets en un seul programme.
P Q
(Code source) (Code Source)
Compilateur
Editeur de liens
320
Programme complet
(P+Q)
Exécutable Chargeable
320
Procédure proc
Pour pouvoir développer de gros programmes, on structure ceux-ci en modules que l’on
traduit indépendamment. Ainsi, un programme peut être constitué de plusieurs fichiers dont
l’un est le programme principal. Ce dernier fait appel aux sous-programmes, ce qui donne
lieu à des références extérieures.
Lors de la compilation, le compilateur ne peut pas remplacer les références extérieures
par les adresses correspondantes puisqu’il ne les connaît pas. Le programme objet généré
contient donc le code machine des instructions et la liste des références extérieures, ainsi que
la liste des adresses potentiellement référençables depuis l’extérieur du module. Après la
compilation, chaque sous-programme commence à l’adresse logique 0.
L’éditeur de liens ordonne les sous-programmes et le programme appelant, modifie les
adresses de chacun d’eux et produit un programme final dont l’origine est à l’adresse 0.
USTHB 20
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
2.4 Le chargeur (Loader)
Après l’édition de liens, le programme exécutable doit être en MC pour être exécuté. Le
chargeur est un programme qui installe ou charge un exécutable en MC à partir d’une
adresse déterminée par le S.E.
Programme exécutable
Chargeur Processus
Adresse de chargement
USTHB 21
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
4. Tas (Heap) ; une zone à partir de laquelle l’espace peut être alloué dynamiquement
en cours d’exécution (Runtime), en utilisant par exemple les fonctions new et malloc.
Identificateur processus
Etat du processus
Compteur ordinal
Contexte pour reprise
(Registres, Pointeurs piles, …)
Pointeurs sur file d’attente et priorité
(Ordonnancement)
Informations mémoire
(limites et tables pages/segments)
Le système d’exploitation maintient dans une table appelée «table des processus» les
informations sur tous les processus créés (une entrée par processus : Bloc de Contrôle de
Processus PCB). Cette table permet au SE de localiser et gérer tous les processus.
USTHB 22
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
Donc, un processus en cours d’exécution peut être schématisé comme suit (Figure 2.5) :
MC CPU
Noyau Utilisateur
SP
Etat Pile
RI
Mémoire
Fichiers CO
Statistiques Tas
PSW
Priorité
Données
Utilisateur Registres
Registres Généreaux
Code
Nouveau Terminé
Réquisition CPU
Admis Exit
Prêt Actif
Allocation CPU
Terminaison d’un En attente d’un événement
événement ou d’une E/S ou d’une E/S
Bloqué
3.6 Multiprogrammation
Dans un système multiprogrammé, le processeur assure l’exécution de plusieurs
processus en parallèle (pseudo-parallélisme).
Le passage dans l’exécution d’un processus à un autre nécessite une opération de
sauvegarde du contexte du processus arrêté, et le chargement de celui du nouveau processus.
Ceci s’appelle la commutation du contexte (Context Switch).
USTHB 23
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
A. Mécanisme de commutation de contexte
La commutation de contexte consiste à changer les contenus des registres du processeur
central par les informations de contexte du nouveau processus à exécuter.
Exécuter
Petit contexte 1 1ère phase Petit contexte 2 2ème phase Petit contexte 2
Remarque
La commutation du contexte est déclenchée suivant l’état d’un indicateur qui est consulté
par le processeur à chaque point observable.
USTHB 24
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
B. Création d’un processus
Un processus est créé par une instruction spéciale fork. Le processus créé (le fils) est un
clone (copie conforme) du processus créateur (le père).
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
Le père (Parent) et le fils (Child) ne se distinguent que par le résultat retourné par fork.
Pour le père, cette fonction renvoie le numéro du fils (ou -1 si création impossible) et pour le
fils, elle renvoie 0.
pid_t pid=fork();
switch(pid){
case -1: /* Erreur de création */
...
case 0: /* Programme du fils */
...
default: /* Programme du père */
...
}
C. Hiérarchie des processus
Sous UNIX, les processus forment une hiérarchie (père-fils) (Figure 2.9).
La commande UNIX ps -aeH permet d’afficher la hiérarchie complète des processus, y
compris le processus init.
Init
1
Utilisateur U2 Système
Utilisateur U1
USTHB 27
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
L’appel système waitpid() permet à un processus père d'attendre un fils particulier
d’identité pid, de façon bloquante (options=0) ou non bloquante
(options=WNOHANG).
Si l’appel réussit, il renvoie l'identifiant du processus fils et son état de terminaison
dans status (si status n’est pas NULL). En cas d'erreur -1 est renvoyé. Si l’option
WNOHANG est utilisée et aucun fils n’a changé d’état, la valeur de retour est 0.
pid_t id;
pid_t pid=fork();
switch(pid){
case -1: /* Erreur de création */
...
case 0: /* Programme du fils */
...;
exit(10);
default: /* Programme du père */
...
While((id=waitpid(pid,&status,WNOHANG))==0)
printf("processus fils non encore terminé\n");
printf("fin processus fils %d\n", id) ;
...
}
L’appel waitpid(-1, &status, 0) est équivalent à l’appel wait(&status)
Code de sortie retourné par wait() et waitpid()
Pour extraire le code de retour du processus fils de status, il faut d’abord tester que le
processus c’est terminé normalement. Pour cela, on utilise la macro
WIFEXITED(status), qui renvoie vrai si le processus fils c’est terminé normalement.
Ensuite pour obtenir son code de retour, on utilise la macro WEXITSTATUS(status).
pid_t id;
pid_t pid=fork();
switch(pid){
case -1: /* Erreur de création */
...
case 0: /* Programme du fils */
...;
exit(10);
default: /* Programme du père */
...
while((id=waitpid(pid,&status,WNOHANG))==0)
printf("processus fils non encore terminé\n");
if(WIFEXITED(status))
USTHB 28
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
printf("fils %d terminé par exit(%d)\n",id,WEXITSTATUS(status));
...
}
USTHB 29
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
Matériel
Processus P
Logique câblée
Nouveau processus
(P ou autre)
Remarque
Le programme repris après le traitement de l’interruption peut être le programme
interrompu ou autre.
B. Conditions d’arrivée d’une interruption
Une interruption ne peut arriver au processeur que dans les conditions suivantes :
1. Le système d’interruption est actif.
2. L’UC est à un point observable (interruptible).
3. L’interruption est armée.
4. L’interruption est démasquée.
5. L’interruption est plus prioritaire que le programme en cours.
Système d’interruption actif
Dans certains cas, le processeur a besoin d’interdire toute interruption possible. Pour
cela, il dispose d’un mécanisme d’activation/désactivation globale des interruptions.
Dans ces conditions, aucune interruption ne peut interrompre l’UC, et toute
interruption est retardée à la prochaine activation du système d’interruption.
L’interruption est armée
Une interruption désarmée ne peut interrompre l’UC. Ceci se passe comme si la cause
de l’interruption était supprimée. Toute demande d’interruption faite durant son
désarmement est perdue.
On utilise ce procédé quand on désire qu’un élément ne doive plus interrompre.
L’interruption est démasquée
Parfois, il est utile de protéger, contre certaines interruptions, l’exécution de certaines
instructions (par exemple, les programmes d’interruption eux-mêmes). Une
interruption masquée ne peut alors interrompre l’UC, mais toute demande
USTHB 30
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
d’interruption faite durant le masquage est retardée (mémorisée) pour être traitée à la
levée du masquage.
Les informations concernant l’état masqué des interruptions figurent dans le mot
d’état du processeur.
On utilise le procédé de masquage pour définir des règles de priorité entre différentes
causes d’interruption. Ainsi, les interruptions de même niveau de priorité ou d’un
niveau plus bas peuvent être masquées, alors qu’une interruption de priorité
supérieure est en cours d’exécution.
Remarque
Le masquage porte sur un niveau ou une cause d’interruption, contrairement à
l’activation qui porte sur l’ensemble du système d’interruption.
C. Types d’interruption
Les interruptions sont classées en deux grandes classes :
Les interruptions externes ou matérielles.
Les interruptions internes ou logicielles.
1. Interruptions externes
Ce sont les interruptions causées par des organes externes au processeur central, comme
les horloges de temps, les périphériques d’E/S, …etc.
Ces interruptions asynchrones (c’est-à-dire, peuvent arriver à tout moment
indépendamment de l’exécution du programme en cours) sont dues à :
Périphérique prêt.
Erreur durant l’E/S.
Fin d’E/S.
Ecoulement d’un délai de garde (horloge).
Réinitialisation du système.
…etc.
2. Interruptions internes
Ce sont des interruptions causées par l’exécution du programme. Ces interruptions sont
synchrones et se divisent en deux sous-classes :
Les déroutements (trap ou exception) qui sont dus à des erreurs lors de l’exécution
d’un programme et en empêchent la poursuite de son exécution. Ces erreurs peuvent
avoir diverses causes :
Tentative d’exécution d’une opération interdite ou invalide.
Violation d’accès à une zone mémoire protégée ou inexistante.
Division par zéro.
Débordement arithmétique.
…etc.
Remarque
USTHB 31
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
Un déroutement ne peut être masqué ou retardé, mais il peut être supprimé (comme
pour les déroutements liés aux opérations arithmétiques).
Les appels au superviseur (SuperVisor Call, SVC) qui est une instruction permettant,
à partir d’un programme utilisateur d’accéder à un service du S.E. (Ex. demande
d’E/S, allocation dynamique de la mémoire, fin de programme, accès à un
fichier, …etc.).
Cette façon de procéder permet au système de :
Se protéger des usagers.
Vérifier les droits d’accès au service demandé.
Exemple
It : appel au superviseur
Rit : superviseur
Contrôle des paramètres
Contrôle des droits d’accès
Services Opération
Output Fin programme …………..
du SE Input (lecture)
USTHB 32
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
Pt observable Pt observable
Cycle processeur
it (A)
2 requêtes d’it
simultanées
it (B)
Le traitement des requêtes simultanées se fait suivant un certain ordre de priorité établi
entre les niveaux d’interruption. La priorité peut être fixe ou modifiable.
E. Requêtes imbriquées
Pour des raisons de temps critiques, certaines demandes d’interruption doivent être
prises en compte, même quand le processeur est en train de traiter une interruption, on parle
alors d’interruptions imbriquées.
Du point de vue fonctionnement, l’interruption d’une interruption est traitée comme une
interruption classique de programme. En réalité, le processeur ignore même qu’il s’agit
d’interruptions imbriquées.
USTHB 33
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
SIGILL Détection d'une instruction illégale. (ILLegal)
SIGTRAP Emis après chaque instruction en cas d’exécution en mode trace, par un débogueur.
SIGPIPE Ecriture dans un tube sans lecteur.
USTHB 34
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
Ignorance du signal. On peut ignorer un certain nombre de signaux (sauf par
exemple SIGKILL, SIGSTOP) ;
Interception puis invocation d’une fonction en réaction à l’événement. Le signal peut
être rattrapé par le processus destinataire, ce qui provoque un déroutement et le
lancement d’une routine spécifique de traitement (handler). Après le traitement, le
processus reprend où il a été interrompu.
Un signal peut être dérouté soit à travers les appels systèmes signal() et sigaction() à
partir d’un programme C/C++ ou en utilisant la commande trap à partir du shell.
L’appel système signal()
#include <signal.h>
void (* signal(int signum, void (* handler)(int))) (int);
L’appel système signal() permet d'installer handler comme fonction de traitement
lors de la réception du signal signum. Cette fonction ne pourra prendre qu’un
argument de type entier : le numéro du signal qui l’aura appelée. La fonction
renvoie SIG_ERR en cas d’échec.
Exemple
La fonction de déroutement (handler) permet d’afficher le numéro et le nom
symbolique du signal dérouté. S’il s’agit du signal SIGINT, on arrête le
programme.
La fonction strsignal permet de renvoyer le nom symbolique du signal numéro
sig.
#include <string.h>
char *strsignal (int sig)
#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <stdlib.h>
//fonction de déroutement
void handler (int sig) {
printf("Bien reçu %d %s\n", sig, strsignal(sig));
if (sig == SIGINT) {
printf ("Fin volontaire\n");
exit (1);
}
}
void main () {
signal (SIGINT, handler); //Ctrl-c : signal 2
signal (SIGQUIT, handler); //Ctrl-\ : signal 3
signal (SIGTSTP, handler); //Ctrl-z : signal 20
//SIGKILL est non déroutable
USTHB 35
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
if (signal (SIGKILL, handler) == SIG_ERR) perror("SIGKILL");
for (;;);
}
Remarque
La fonction de traitement peut être remplacée par une des constantes suivantes :
SIG_IGN, qui indique que le signal doit être ignoré.
/*Rendre Ctrl-C (SIGINT) inopérant*/
/*l’arrêt de ce programme doit se faire avec kill -9 pid*/
#include <signal.h>
void main () {
signal (SIGINT, SIG_IGN);
for (;;);
}
SIG_DFL, qui indique de rétablir l’action par défaut pour le signal.
L’appel système sigaction()
La primitive sigaction() associe un signal à un contexte de déroutement,
représenté par une structure sigaction.
struct sigaction{
void (*sa_handler)(); /*SIG_DFL ou SIG_IGN ou ptr sur handler*/
sigset_t sa_mask; /*signaux supplémentaires à bloquer*/
int sa_flags; /*indicateurs optionnels*/
}
Le champ sa_handler est le seul obligatoire ; c'est un pointeur sur la fonction qui
servira de handler.
#include <signal.h>
int sigaction (int signum, const struct sigaction* act,
struct sigaction* oldact)
Exemple
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <stdlib.h>
void handler (int sig) {
printf ("Bien reçu %d %s\n", sig, strsignal(sig));
if (sig == SIGINT) {
printf ("Fin volontaire\n");
exit (1);
}
USTHB 36
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
}
void main () {
struct sigaction act;
act.sa_handler = handler;
sigaction (SIGINT, &act, NULL); //Ctrl-c : signal 2
sigaction (SIGQUIT, &act, NULL); //Ctrl-\ : signal 3
sigaction (SIGTSTP, &act, NULL); //Ctrl-z : signal 20
//SIGKILL est non déroutable
if (sigaction(SIGKILL, &act, NULL) == -1) perror ("SIGKILL");
for (;;);
}
La commande trap
La commande trap permet d’associer un traitement à un ou plusieurs signaux
directement à partir du shell.
$ trap ‘liste de commandes’ sig1 sig2 ...
Exemple
La commande :
$ trap ‘rm /tmp/* ; exit’ 2 3
a pour effet d’exécuter la commande rm /tmp/* ; exit à la réception des signaux
SIGINT ou SIGQUIT.
Pour désactiver un ou plusieurs signaux, il suffit de transmettre la chaîne vide
comme argument de la commande trap.
Exemple
La commande :
$ trap ” 2 3 15
permet de masquer les signaux SIGINT, SIGQUIT et SIGTERM.
Pour rétablir l’action par défaut pour un ou plusieurs signaux, il suffit de
transmettre les numéros de ces signaux comme seul argument de la commande
trap.
Exemple
La commande :
$ trap 2 3 15
permet de rétablir les actions par défaut associée aux signaux SIGINT, SIGQUIT
et SIGTERM.
USTHB 37
Systèmes d’Exploitation N.BELGUERCHE & C. BENZAID
BIBLIOGRAPHIE
N. SALMI, "Principes des Systèmes d’Exploitation", Pages Bleues, les Manuels de
l’Etudiant, 2007.
B. LAMIROY, L. NAJMAN, H. TALBOT, "Systèmes d’exploitation", Collection
Synthex, Pearson Education, 2006.
A. BELKHIR, "Système d’Exploitation, Mécanismes de Base", OPU, 2005.
A. Silberschatz, P.B. Galvin, G. Gagne, "Operating System Concepts", 7th Edition,
John Wiley & Sons Editions, 2005, 921 p.
A. TANENBAUM, "Systèmes d’Exploitation : Systèmes Centralisés – Systèmes
Distribués", 3ème édition, Editons DUNOD, Prentice Hall, 2001.
A. Silberschatz, P. B. Galvin, "Principes des Systèmes d’Exploitation", traduit par
M. Gatumel, 4ème édition, Editions Addison-Wesly France, SA, 1994.
M. GRIFFITHS, M. VAYSSADE, "Architecture des Systèmes d’Exploitation", Edition
Hermès, 1990.
S. KRAKOWIAK, "Principes des Systèmes d’Exploitation des Ordinateurs", Editions
DUNOD, 1987.
A. TANENBAUM, "Architecture de l’Ordinateur", Editions Pearson Education,
2006.
J. M. LERY, "Linux", Collection Synthex, Pearson Education, 2006.
J. Delacroix, "LINUX, Programmation Système et Réseau, Cours et Exercices
Corrigés", Editions DUNOD, 2003.
M. J. BACH, "Conception du système UNIX", Editions Masson, 1989.
USTHB 38