1 Répondre à des questions de cours
Répondre par OUI ou NON aux questions suivantes
OUI
Lorsqu'un processus est créé par fork, le processus parent et le processus enfant exécutent le même programme,
à partir de l'instruction qui suit fork()
OUI
La valeur retournée par fork est 0 dans le processus enfant
mais c'est le n° de PID du processus créé dans le processus parent
NON
exec permet de créer un nouveau processus
OUI
exit( ) permet au processus enfant de transmettre au parent un code de fin d'exécution
OUI
wait permet au processus parent d'attendre la fin de l'exécution d'un processus enfant
OUI
sleep (10) met le processus courant en sommeil pendant 10 secondes
OUI
le sommeil d'un processus est interrompu lorsqu'il reçoit un signal
OUI
lorsqu'il est réveillé le processus exécute la fonction associée au signal
NON
s'il est réveillé par un signal avant la fin du délai défini par sleep(), le processus se rendort
NON
si un processus était endormi parce qu'il attendait que l'opérateur frappe une réponse à une question, ce processus
n'est pas réveillé par un signal
OUI
Il est possible de demander à un processus d'ignorer les signaux 2 et 3
NON
Il est possible de demander à un processus d'ignorer tous les signaux
NON
les signaux et les tubes (pipes)sont des mécanismes de synchronisation
NON
les sémaphores et les files de messages sont des mécanismes de communication de données
NON
la fonction signal permet d'envoyer un signal à un processus
OUI
la fonction signal permet d'associer une fonction de traitement à un signal donné
OUI
la fonction kill sert à tuer un processus
OUI
l'envoi du signal N° 9 à un processus tue ce processus
et il n'est possible ni d'ignorer ce signal ni de lui affecter une autre action
OUI
la fonction pause est équivalente à une fonction sleep avec un temps infini
OUI
la fonction alarm(10) programme l'envoi du signal SIGALRM au processus courant dans 10 s
OUI
la fonction pipe(p) crée un tube constitué de 2 descripteurs de fichiers un pour écrire p[1] un pour lire p[0]
OUI
plusieurs processus peuvent lire dans le même tube
NON
un seul processus peut écrire dans un tube donné
NON
plusieurs processus peuvent lire successivement la même donnée dans un tube
OUI
un tube créé par un processus est connu dans tous les processus enfants de ce processus
NON
Une file de message est identifiée par un numéro de 8 octets (16 chiffres hexadécimaux)
OUI
la fonction ftok( ) sert à générer un identificateur d'objet IPC à partir d'un nom de fichier
NON
un message déposé dans une file de message est de longueur fixe : 256 octets
OUI
un type de message (dans une file de messages) est un nombre strictement positif
NON
il est possible de déposer des messages de type 0 (fonction msgsnd) dans une file de message
OUI
il est possible de rechercher des messages de type 0 (fonction msgrcv) dans une file de message
OUI
il est possible de rechercher des messages de type -5 (fonction msgrcv) dans une file de message
OUI
par défaut la recherche d'un message dans une file bloque le processus s'il n'y a pas de messages correspondant
au type cherché (fonction msgrcv)
NON
tout processus peut envoyer un signal à n'importe quel processus (fonction kill)
OUI
comme pour les fichiers il est possible de définir des droits d'accès de type RWX pour une file de messages
NON
tout processus peut lire ou écrire dans une file de messages quelle que soit cette file
OUI
la fonction msgctl permet de définir des droits d'accès sur une file de messages
2 Concevoir une application multitâche IPC (10 points)
On souhaite implémenter une système de traduction automatique de messages sous forme d'application
multitâche utilisant les IPC d'Unix.
L'architecture générale de l'application sera la suivante :
un processus traducteur reçoit sous forme de chaînes de caractères (délimitées par
le caractère NULL '\0') des messages à traduire provenant 1 ou plusieurs
processus "clients"
ce processus traduit les messages en fonction d'un algorithme et d'un dictionnaire
qu'il n'est pas nécessaire de préciser ici
il renvoie ensuite les messages traduits au processus client
On vous demande de proposer 2 mécanismes IPC (autres que les sockets) pour l'échange de messages entre
le processus traducteur et les processus clients.
On devra donc préciser quels objets de type pipe (tube), files de messages, mémoire
partagée, sémaphores… il sera nécessaire de créer pour cette application; combien
d'objets seront nécessaires et quel processus devra les créer.
On devra aussi se poser la question de l'identification des "canaux de communication"
utilisés par les processus qui envoient ou reçoivent les messages.
3 Comprendre un programme en langage C
#include <stdio.h>
#include <ctype.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/stat.h>
#include <fcntl.h>
char *strupr(char *texte)
{
int i;
for(i=0; i<strlen(texte); i++)
texte[i]=toupper(texte[i]);
return texte;
}
char *strlwr(char *texte)
{
int i;
for(i=0; i<strlen(texte); i++)
texte[i]=tolower(texte[i]);
return texte;
}
void reveil()
{
signal(SIGUSR1, reveil);
}
int main(void)
{
char msg[256],c;
int flag1=0, f1=0, f2=0, p[2], choix, status, lu, retour;
pipe(p);
f1=fork();
if(f1!=0)
f2=fork();
if((f1<0)&&(f2<0))
{
fprintf(stdout, "erreur de ceration de processus\n");
exit(-2);
}
if(f1==0)
{
signal(SIGUSR1, reveil);
do{
pause();
read(p[0], msg, 256);
write(p[1], strupr(msg), 256);
kill(getppid(), SIGUSR1);
}while(msg[0]!='$');
exit(0);
}
if(f2==0)
{
signal(SIGUSR1, reveil);
do{
pause();
read(p[0], msg, 256);
write(p[1], strlwr(msg), 256);
kill(getppid(), SIGUSR1);
}while(msg[0]!='$');
exit(0);
}
if((f1>0)&&(f2>0))
{
signal(SIGUSR1, reveil);
do{
fprintf(stdout,
"taper un texte comportant majuscules et minuscules ($=FIN) :\n");
do fgets(msg, 254, stdin);
while (strlen(msg)<2);
if (msg[0]=='$') break;
write(p[1], msg, 256);
fprintf(stdout, "choix : MAJ (1) sinon MIN .... : ");
fflush(stdin);
scanf("%d", &choix);
if(choix==1)
kill(f1, SIGUSR1);
else
kill(f2, SIGUSR1);
sleep(100);
lu=read(p[0], msg, 256);
if(lu!=0 && lu!=-1)
{
fprintf(stdout, "\n RESULTAT = %s \n", msg);
}
else
{
fprintf(stdout, "\n ERREUR, PAS DE RETOUR RECU \n");
return(-2);
}
}while(msg[0]!='$');
kill (f1, SIGKILL);
kill (f2, SIGKILL);
exit (0);
}
}
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !