CHAP 3 - 4 CIP Et Interblocage
CHAP 3 - 4 CIP Et Interblocage
CHAP 3 - 4 CIP Et Interblocage
et Interblocage
1
Plan
1 Introduction
4 Interblocages
2
Plan
1 Introduction
4 Interblocages
3
Introduction
Rôles d’un SE
Gestion des processus
Chaque processus
Est autonome
Vit isolé dans son propre espace mémoire
Trop restrictif
besoin de communication
4
Deux types de besoin de
communication
Données échangées entre processus
Chacun les traite à safaçon
Un seul processus a les données à la fois
En pratique
Échanges et partages sont utiles pour tout type de
processus
5
Exemples de besoins de
communication
Réservation de billet d’avion
Une base de données commune est partagée par
tous les « guichets »
Type simple
l’échange d’un simple élément entre un processus
expéditeur et un processus receveur
Exemples : wait(), waitpid(), kill()
Type complexe
Échange ou partage continue de donné avec
protection et synchronisation
Exemples : tubes de communication, réseau
Gestion de lacommunication
Le programmeur
Il a une liberté étendue mais a la charge d’assurer
les besoins liés à la communication
Processus terminé
Un processus terminé est dans l’état zombi jusqu’à
sa prise en considération par son processus parent
Plan
1 Introduction
4 Interblocages
6
Signaux
Comportement asynchrone
Un signal est envoyé
Il sera reçu et traité au moment opportun
Sémantique des signaux
Liste dessignaux
Les signaux sont catalogués, la liste est fixée et
chacun est documenté
$ man 7 signal
SIGSEV
Une erreur de segmentation provoque l’expédition
de ce signal au processus fautif
kill
La commande shell « kill 9482 » envoie un signal
SIGTERM au processus 9482.
L’appel système kill() permet également d’envoyer
des signaux.
Action possibles pour un signal
Pour chaque catégorie de signal, un processus peut
Accepter le comportement par défaut (en général,
arrêt du processus)
Ignorer le signal (pas tous)
Gérer le signal (pas tous)
Quelques signaux
Signal Valeur Action Description
SIGHUP 1 T le terminal se ferme
SIGINT 2 T Ctrl C au clavier
SIGKILL 9 TD terminer le processus
SIGSEGV 11 M erreur de segmentation
SIGCHLD - I terminaison d’un fils
Action par défaut : T=terminer, D=défaut
obligatoire, M=image mémoire, I=ignorer
Gestion des signaux
Deux étapes
Écrire la fonction gérante (en C)
Associer fonction et signal (appel système)
Exemple (pseudo-code)
void ma_gerante ( int numero Si gnal ) {
/∗ contenu de l a gé r a n t e ∗/
}
i n t main ( ) { . . .
a ss o c i er ( nom Signal , ma_gerante ) ;
/∗ à p a r t i r de l à , ma_gerante ( ) se ra appel ée
pour le s ig n a l i d e n t i f i é par nom Signal ∗/
}
Association signal et fonction
L’appel système est sigaction()
Signature
#i nclude < si gn al . h>
int si gac t i on ( int signum ,
const st r uct si gact i on ∗act ,
struct si gact i on ∗ol dact ) ;
Avec
struct si gact i on {
void ( ∗sa_ handl er ) ( int ) ;
si gset _ t sa_mask ;
int sa_ f l ags ;
}
Exemple
void ger e ( int si g ) {
p r i n t f ( " Re cu SIGSEGV (%d ) \ n" , s i g ) ;
ex i t ( 1 ) ;
}
int main ( ) {
struct si g ac t i o n act ;
si gempty set (& act . sa_mask ) ;
act . sa_ f l ags = 0;
act . sa_ handl er = ger e ;
si g ac t i o n ( SIGSEGV , &act , NULL) ;
puts (NULL ) ;
}
Quelques info en plus
4 Interblocages
6
Tubes
Définition
Espace mémoire accessible en lecture et/ou écriture
Deux bouts : un pour l’écriture, l’autre pour la
lecture
L’espace est géré par le SE
Processus Processus
Tube
A B
Tube et processus
Descripteurs de fichiers
Pour un processus, un tube est un
peudo-périphérique
Une fois le tube ouvert, chaque extrémité se
manipule comme fichier
Exemple :
int emboi s [ 2 ] ; /∗ dé c la r a t i o n ∗/
e r r = pi pe ( emboi s ) ; /∗ c r é a t io n ∗/
ec r i t s = w r i t e ( embois [ 1 ] , . . . ) ;
l u s = re ad ( embois [ 0 ] , . . . ) ;
Tubes simple
embois[1] embois[0]
Processus
Tube
Communication par tube
Écriture
Bloquante si le tube est plein
Signal SIGPIPE envoyé si aucun lecteur existe
Opérations synchronisées
Exclusion mutuelle : une après l’autre
Bonnes pratiques
Règle importante de prévention
Toujours fermer les bouts inutiles
Exemple
(Père) (Fils)
Créer le tube -
fork() -
Retour du fork() Retour du fork()
Fermer un des deux Fermer l’autre bout du
bouts du tube tube
Bonnes pratiques
Corollaire
Pour une communication à deux sens
Il faut deux tubes
Tubes shell
$ chercheLe | deColle
création du tube : pipe(p);
clonage : fork();
si père alors
fermer sortie du tube : close(p[0]);
fermer la sortie standard : close(1);
associer entrée du tube à la sortie standard :
dup2(p[1], 1);
fermer le doublon : close(p[1]);
se recouvrir par chercheLe : exec..();
sinon si fils alors
analogue mais dans l’autre sens...
fin
Limites des tubes simples
Caractéristiques
Une structure en mémoire système (comme un tube
simple)
La possibilité de rendez-vous entre processus
La gestion des droits
Tubes nommées
Le rendez-vous
L’ouverture du fichier est bloquante tant qu’il n’y a
pas un lecteur et un écrivain
Autres moyens de communication
Files de messages
Mémoire partagée
Sémaphores
Threads
Réseau
Système de fichiers
Bus logiciels
File de messages (Unix)
Espace mémoire
Géré par le SE
Protection et synchronisation faites par le SE
Communication distante
Objectif primaire : faire communiquer des
applications sur des ordinateurs distincts
Peut être utilisé pour des applications sur une même
machine
Avantages
Le SE peut optimiser l’efficacité du traitement
Exemple : client/serveur X
Système de fichier
Les fichiers ne sont pas exclusifs à un processus
Les processus peuvent utiliser les fichiers pour
communiquer entre eux
L’accès et la protection sont connus
Exemples
Répertoire temporaire pour passer des données
(compilation, etc.)
Fichiers spéciaux pour initier un autre type de
communication (tubes nommés, etc.)
Spool (impression, cron job, etc.)
Bus logiciels
Support de communication de haut niveau
Permet de faire communiquer des applications via
des objets partagés et des envois de messages
Généralement pour le réseau (ex. CORBA) mais
existe aussi pour les SE.
Exemple : D-BUS
-Un démon gérant les services et les clients
-Une bibliothèque utilisable par les processus --
-Démon et bibliothèque utilisent des primitives
systèmes pour faire le travail de communication, de
synchronisation et de protection
Plan
1 Introduction
6
4 Interblocages
5
Interblocages
Alias
Deadlock
Verrou fatal
Étreinte fatale
Embrasse mortelle
Principe
Plusieurs processus sont bloqués entre eux et ne
peuvent progresser
Ressources
Ressources et interblocages
Les interblocages découlent de l’allocation des
ressources
Ressources
A S D
T U
R B C
(a) (b) (c)
Quatre stratégies
Ignorer le problème
Détecter et résoudre
Prévenir le problème
Éviter dynamiquement
Ignorer le problème
Principe
Prétendre que le problème n’existe pas
Raisonnable si
Interblocages rares
Autres solutions trop coûteuses/restrictives
Avantage
Facile à comprendre
Facile à mettre en œuvre
Détecter et résoudre
Principe
Vérifier périodiquement si les processus sont en
interblocage et les débloquer
Principe
Éliminer une condition de l’interblocage
Exemples
Spooling : seul un processus a la ressource
Ressources demandées d’un coup au début
Permettre la préemption
Ordonner les ressources (donc les demandes)
Éviter dynamiquement
Principe
Forcer l’ordonnanceur à faire le bon choix
C’est possible via des infos supplémentaires
Idée
Un état est sûr s’il existe un séquence d’allocations
qui permet aux processus d’aller jusqu’au bout
Exécuter une allocation que si l’état qui en résulte
est sûr
Résolutions en pratique
Pas de solutionultime
Le coût et l’efficacité d’une technique dépend
fondamentalement de la nature des ressources
En pratique,
Les SE actuels ignorent le problème
Seuls les SE critiques préviennent ou évitent ce
genre de problème
Problème cousin - Famine
Synonymes
Starvation
Privation de ressource
Définition
Un groupe de processus partagent une ressource
(sans interblocage) mais certains processus (voire
tous) n’obtiennent jamais la ressource