Documente Academic
Documente Profesional
Documente Cultură
y Sistemas Operativos
Tema
Comunicacin entre
procesos
Introduccin
La comunicacin entre procesos habilita mecanismos para que
los procesos puedan intercambiar datos y sincronizarse
Con seales podramos comunicar procesos, pero su uso debe
limitarse a la comunicacin de eventos o situaciones excepcionales
Consideramos dos situaciones:
Los procesos se ejecutan en una misma mquina
Tuberas (pipes) y FIFOs
Mecanismos IPC (Inter-Process Communication)
Semforos
Memoria compartida
Colas de mensajes
Los procesos se ejecutan en mquinas diferentes
sockets
open()
Abre un fichero.
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<sys/types.h>
<sys/stat.h>
<fcntl.h>
read()
Lee desde un fichero.
write()
Escribir en un fichero .
close()
Cierra un fichero.
dup2()
Genera un duplicado de un descriptor existente, tiene el siguiente prototipo:
dup2(fd, STDOUT_FILENO);
dup2 genera el duplicado, de manera que el descriptor 1
(STDOUT_FILENO) ya no apunta a la pantalla sino al fichero
resultados.txt de descriptor fd
entrada estndar
0
resultados.txt
1
salida estndar de errores (pantalla)
2
.
fd
resultados.txt
Tuberias
Tuberias
Limitaciones:
Tuberias
Normalmente, un proceso crea una tubera y luego
ejecuta la llamada fork
Los descriptores de fichero se heredan de padres
a hijos
Tuberias
int n, fdes[2];
pid_t pid;
char line[MAXLINE];
if (pipe(fdes) < 0) exit(1);
if ((pid=fork()) == 0)
{
close(fd[1]);
n = read(fdes[0],line,MAXLINE);
write(STDOUT_FILENO, line, n);
}
else if (pid>0) {
close(fdes[0]);
write(fdes[1], hello son\n,10);
}
else
exit(1);
Tuberias
La tubera usa un buffer gestionado por el ncleo
La sincronizacin entre los accesos de
escritura y lectura la lleva a cabo el ncleo
Cuando el buffer est lleno, la llamada write se
bloquea
Cuando el buffer est vaco, la llamada read se
bloquea
Tambin es el ncleo el encargado de
Tuberias
Ejercicio prctico:
Vamos a crear un proceso padre que se
encargue de leer mensajes de la entrada
estndar y se los pase a un proceso hijo que
los presentar por pantalla. El ciclo
terminar cuando el padre enve la cadena
FIN al proceso hijo
FIFOS
Permiten comunicacin entre dos procesos
cualesquiera, entre los que no hay relacin de parentesco
Son un tipo especial de fichero, con una
entrada en un directorio
FIFOS
Apertura bloqueante
open(fifo_ejemplo,O_WRONLY) => el proceso escritor se
bloquea hasta hasta que no haya otro proceso que abra la tubera
para leer de ella
open(fifo_ejemplo,O_RONLY) => el proceso lector se
bloquea hasta que no haya otro proceso que abra la tubera para
escribir en ella