Les signaux
• signaux relatifs aux interactions avec le terminal (extinction, frappe touche DELETE et
BREAK)
– SIGHUP, SIGINT (crtl C), SIGQUIT (crtl \)
kill (pid_B, S)
Signal[0]
Entier de 32 bits
00001100000000000000100000100010
Signaux 1, 5, 11, 27, 26 reçus
• Un processus traite les signaux reçus quand il quitte le mode noyau pour
retourner au mode utilisateur
signal délivré, le bit correspondant est remis à 0; le traitement associé est
exécuté.
Utilisateur Noyau
Réordonnancement
Processus B élu Examen des signaux reçus
par le processus élu
Traitement
(do_signal())
Méthodes de Programmation Système 2008/2009 J. Delacroix 8
3. Comment un processus associe-t-il un traitement aux signaux ?
3 2 1 0
entier signal[0] 0 0 0 0 0 0 0
..........................
1 1 1 1 1 1 1
Indicateurs
de ..........................
Comportement
(sig)
SIG_IGN
rien SIG_DFL @handler
action définie par l’utilisateur
Méthodes de Programmation Système 2008/2009 J. Delacroix 10
Fonction do_signal()
signr = dequeue_signal()
non
Récupération de l’action associée à signr, stockée dans ka
ka = ¤t->sig->action[signr-1]
handle_signal(signr);
main()
{
1
4
}
fonction handler
sig_int
{
2
Co
}
@
ha @ handler
nd
3 ler
• Attendre un signal
– int pause();
{ {
signal(sig1, handler)
Processus 1
kill (proc1, sig1)
sig1
} 0
handler()
} handler
{
{ {
signal(sig1, handler)
Processus 1
kill (proc1, sig1)
sig1
} 1
Signal pendant
handler()
} handler
{
{ {
signal(sig1, handler)
• Signaux • Interruptions
Le processus P2 envoie un Le dispositif matériel X envoie
signal au processus P1 (signal une interruption lors de
pendant chez P1)
l’exécution du processus P1.
main() }
{
int i;
extern onintr(); /* Handler */
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h> onalarm ()
#include <signal.h> {
pid_t pid;
printf("Handler onalarm\n");
main() kill (pid, SIGKILL);
{
extern onalarm(); /* Handler */ exit ();
}
pid = fork();
if (pid == -1)
printf ("erreur creation de processus");
else
if (pid == 0)
{
printf ("valeur du fork”, pid);
printf (" je suis le fils, mon pid est", getpid());
for(;;)
printf("je boucle !!!! \n");
exit(); }
else {
printf ("valeur du fork", pid);
signal (SIGALRM, onalarm);
alarm(5);
wait (); }
}
Méthodes de Programmation Système 2008/2009 J. Delacroix 22
Programmation clients serveurs
distants
Serveur Parallèle
Le processus père effectue
Requête la réception. Il crée un fils pour
fork() réaliser le traitement et
thread_create()
l'émission de la réponse.
Serveur
Méthodes de Programmation Système 2008/2009 J. Delacroix 24
L'interconnexion de réseau : quelques principes
M1
M1
R1
R2
R3
RVirtuel RVirtuel
M2
M2
Résolution d'adresses
Adresses Ethernet
Adresses physiques
Machine A Machine B
ports
APPLICATIONS APPLICATIONS
De bout en bout
R1
R2
Datagrammes indépendants
Perte de datagrammes, datagrammes dupliqués, pas de
remise dans l'ordre d'émission
Analogie : le courrier
Analogie : le téléphone
UDP TCP
Echange de datagrammes
Etablissement connexion
Fermeture connexion
La couche Application
Création
Inetd
Ecoute
Ecoute
Exemple :
APPLICATIONS
INTERFACE SOCKETS
TCP UDP
IP
INTERFACES
IPPROTO_TCP
famille Type de se rvice IPPROTO_UDP
TCP-IP---> AF_INET SOCK_STREAM 0
UNIX ---> AF_UNIX SOCK_DGRAM
SOCK_RAW
in t b in d ( s o c k , p _ a d r e s s e , lg )
d e s c r ip te u r d e la s o c k e t lo n g u e u r d e la
p o in t e u r e n m é m o ir e s u r l'a d r e s s e s tru c tu re a d re s s e
D a n s le d o m a in e T C P /I P
s t r u c t s o c k a d d r _ in
struct sockaddr_in {
short sin_family; -- AF-INET
ushort sin_port; -- n° de port
struct in_addr sin_addr; -- @ IP
char sin_zero [8]; -- Huit 0
}
/etc/hosts
Correspondance adresse IP et nom symbolique
Adresse IP, nom symbolique, alias, commentaire
163.173.128.6 asimov.cnam.fr cnam iris
Struct hostent {
char *h_name; /* nom de la machine */
char **h_aliases; /* alias */
int h_addrtype; /* type de l'adresse */
int h_length; /* longueur de l'adresse */
char **h_addr_list; /* liste des adresses IP depuis le serveur de
noms */
#define h_addr h_addr_list[0] /* premier élément de
la liste IP */
};
CLIENT SERVEUR
Adresse locale
Socket client
Port PORTC
Adresse IP INADDR_ANY
Adresse distante
Port PORTS
Adresse IP gethostbyname (nom_serveur)
Méthodes de Programmation Système 2008/2009 J. Delacroix 39
L'interface socket : Communication en mode datagramme
Serveur Client
Socket ()
recvfrom()
Appels bloquants
Connexion établie
Write()
Read ()
nb
connect (sock, ....)
sock_service = accept(sock_ecoute,....)
nb
sock_service
read write
Création d’une socket de service sur laquelle
s’effectue les échanges de données
Connect
Listen
BLOQUANT
tant que le serveur
Accept (sock_ecoute) traite une requête
Demande de service
Sock_service Sock_ecoute
Fermeture sock_service
SERVEUR ITERATIF
SERVEUR
Ouverture du service PARALLELE
listen
PERE FILS
SERVEUR
Ouverture du service PARALLELE
listen Le père n’attend
pas son fils.
PERE FILS
IP
. INTERFACES
CLIENT
RESEAU SERVEUR
Appel proc (x,y)
Paramètres proc (x,y)
Résultat
Site B
Site A
receive z
z z send Assemblage
Du résultat dans
le message
Passage de paramètres
par référence
Assemblage Désassemblage
des paramètres des paramètres
send receive
x x
y x,y x,y y
z Assemblage
Du résultat dans
send le message
send
Solution
Placer un numéro de séquence sur les opérations. Le serveur refuse de
refaire deux fois de suite une demande de service portant un même
numéro de séquence
Assemblage Désassemblage
des paramètres des paramètres
send receive
x x
y x,y x,y y HS
send
Proc(x,y)
HS
Proc(x,y)
HS
HS
Panne avant ou pendant l’exécution du service Panne après exécution du service le service a été exécuté
le service n’ a pas été exécuté
Bien plus que des documents.
Découvrez tout ce que Scribd a à offrir, dont les livres et les livres audio des principaux éditeurs.
Annulez à tout moment.